基于 Dockerfile 部署nginx服务(实现HTTPS功能)

目录

前言

1、任务要求

2、建立工作目录并上传nginx安装包

3、创建自签名证书

4、创建 nginx Dockerfile 文件

5、准备并编写 nginx.conf 配置文件

6、准备nginx页面文件

7、工作目录文件结构

8、生成镜像

8、启动容器并开启宿主机端口映射

9、浏览器测试


前言

Nginx作为一款高性能的Web服务器和反向代理服务器,被广泛应用于互联网领域。在今天的网络环境中,保障数据传输的安全性至关重要,而HTTPS协议正是保障数据安全的重要手段之一。本文将介绍如何通过Dockerfile部署Nginx服务,并实现HTTPS功能,为您的Web应用程序提供更加安全和可靠的服务

本文的目标是帮助读者了解如何利用Dockerfile部署Nginx服务,并实现HTTPS功能,为其Web应用程序提供更加安全、稳定的服务。我们将提供详细的步骤和实用的技巧,帮助读者顺利完成部署过程,并为其未来的Web开发项目奠定坚实的基础

1、任务要求

基于 dockfile 部署 nginx 并且实现https

宿主机

操作系统

IP地址

主要软件

Docker

CentOS 7

172.16.12.10

Docker 26.1.0

关闭防火墙和核心防护

systemctl disable --now  firewalld
setenforce 0

2、建立工作目录并上传nginx安装包

mkdir -p /opt/nginx/html
cd /opt/nginx     #在此路径上上传 nginx安装包

3、创建自签名证书

mkdir -p /opt/nginx/ssl
cd /opt/nginx/ssl

vim certificate.sh
CA_SUBJECT="/O=dh/CN=ca.dh.com"
SUBJECT="/C=CN/ST=js/L=nj/O=dh/CN=www.dh.com"
SERIAL=34
EXPIRE=202002
FILE=dh.com

openssl req  -x509 -newkey rsa:2048 -subj $CA_SUBJECT -keyout ca.key -nodes -days 202002 -out ca.crt

openssl req -newkey rsa:2048 -nodes -keyout ${FILE}.key  -subj $SUBJECT -out ${FILE}.csr

openssl x509 -req -in ${FILE}.csr  -CA ca.crt -CAkey ca.key -set_serial $SERIAL  -days $EXPIRE -out ${FILE}.crt

chmod 600 ${FILE}.key ca.key

bash certificate.sh

cat dh.com.crt ca.crt > www.dh.com.crt
mv dh.com.key www.dh.com.key

 

4、创建 nginx Dockerfile 文件

FROM centos:7                           #基于centOS:7镜像作为基础镜像
MAINTAINER nginx image <dh>             #指定镜像的维护者信息
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make openssl openssl-devel 
# yum安装必要的软件包至镜像;
RUN useradd -M -s /sbin/nologin nginx   #创建nginx的系统用户,且无法登录系统
ADD nginx-1.24.0.tar.gz /usr/local/src/ #将nginx文件解压到/usr/local/src/目录下
WORKDIR /usr/local/src/nginx-1.24.0     #工作目录切换
RUN ./configure \                       #配置、编译并安装Nginx,指定安装路径、用户、用户组以及使用了 with-http_sub_status_module 模块
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \    #加载nginx_http_ssl_module模块,该模块是处理SSL/TLS连接所必需的
--with-http_stub_status_module && make -j 8 && make instal
ENV PATH /usr/local/nginx/sbin:$PATH    #将Nginx可执行文件路径添加到环境变量中
COPY ssl/ /usr/local/nginx/ssl/         #将证书文件和相关的密钥文件复制镜像目录中
ADD nginx.conf /usr/local/nginx/conf/   #将宿主机当前目录nginx.conf配置文件复制到镜像指定目录
ADD html/ /usr/local/nginx/html/ # 将本地的html目录添加到镜像中的/usr/local/nginx/html/目录下
RUN chmod 777 -R /usr/local/nginx/html/ #授权
EXPOSE 80                               #暴露容器的80端口,http
EXPOSE 443                              #暴露容器的443端口,https
VOLUME [ "/usr/local/nginx/html/" ]     #在Docker内创建挂载点
ENTRYPOINT [ "/usr/local/nginx/sbin/nginx", "-g", "daemon off;" ] 
#启动Nginx并以非守护进程方式运行

5、准备并编写 nginx.conf 配置文件

server {
        listen       80;
        server_name  www.dh.com;
        root /usr/local/nginx/html/;
        listen 443 ssl;      #指定 Nginx 监听端口 443,并启用 SSL
        ssl_certificate /usr/local/nginx/ssl/www.dh.com.crt;
        #指定 SSL 证书的路径
        ssl_certificate_key /usr/local/nginx/ssl/www.dh.com.key;
        #指定 SSL 证书的密钥文件路径
        ssl_session_cache shared:sslcache:20m;
        #配置 SSL 会话缓存,提高 SSL 握手性能
        ssl_session_timeout 10m;
        #配置 SSL 会话超时时间为 10 分钟
        location / {
            root   html;
        #这是一个条件判断,如果请求协议是 HTTP,则执行重定向到相同的请求地址但使用 HTTPS 协议
            if ( $scheme = http ) {
            rewrite /(.*) https://$host/$1 permanent;
        }
            index  index.html index.htm;
        }
}

6、准备nginx页面文件

cd /opt/nginx/html
echo "<h1>hello world</h1>" > index.html

7、工作目录文件结构

yum install -y tree
tree /opt/nginx

8、生成镜像

#基于当前目录中的 Dockerfile 构建一个名为 nginx,标签为 centos 的 Docker 镜像
docker build -t nginx:centos .

#docker build: 这部分指示 Docker 命令行工具开始构建一个新的 Docker 镜像
#-t nginx:centos: 这部分使用 -t 标志来为构建的镜像指定一个标签,标签的格式通常是 <repository>:<tag>。在这里,nginx 是镜像的名称,centos 是标签,指明这个镜像是基于 CentOS 操作系统的 Nginx 镜像
# . : 这表示 Docker 将在当前目录中查找包含构建上下文的 Dockerfile。Dockerfile 是一个包含构建指令的文本文件,用于定义如何构建 Docker 镜像

8、启动容器并开启宿主机端口映射

#在 Docker 中运行一个名为 "nginx" 的容器,使用的镜像是 "nginx:centos"
docker run -d --name nginx -p 80:80 -p 443:443 -v /opt/nginx/html:/usr/local/nginx/html nginx:centos
#-d: 以守护进程模式运行容器,即在后台运行
#--name nginx: 将该容器命名为 "nginx"
#-p 80:80 -p 443:443: 将主机的 80 端口映射到容器的 80 端口,同时将主机的 443 端口映射到容器的 443 端口,这样可以通过主机的这些端口访问容器中运行的 Nginx 服务
#-v /opt/nginx/html:/usr/local/nginx/html: 将主机上的 /opt/nginx/html 目录挂载到容器中的 /usr/local/nginx/html 目录,这样可以实现主机和容器间的文件共享

docker ps -a   #查看当前所有的容器

9、浏览器测试

浏览器访问 http://172.16.12.10 会自动跳转到 https://172.16.12.10

  • 21
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 下面是一个可以用于部署 NGINXDockerfile 示例: ``` FROM nginx COPY . /usr/share/nginx/html ``` 这个 Dockerfile 使用 NGINX 镜像作为基础镜像,然后将当前目录中的所有文件复制到镜像中的 `/usr/share/nginx/html` 目录中。这样,你就可以在运行这个镜像的容器中使用 NGINX 服务器了。 你还可以在 Dockerfile 中添加其他命令,例如更改 NGINX 配置文件或安装其他软件包。 要使用这个 Dockerfile 创建镜像,你可以使用下面的命令: ``` $ docker build -t my-nginx . ``` 这会在当前目录中创建一个名为 `my-nginx` 的镜像。 然后,你就可以使用下面的命令运行这个镜像: ``` $ docker run -p 80:80 my-nginx ``` 这会在本地主机的 80 端口上启动 NGINX 服务器,并将其映射到容器的 80 端口上。你就可以通过本地主机的浏览器访问 NGINX 服务器了。 ### 回答2: 部署nginxDockerfile是指通过编写一个Dockerfile来构建和部署一个包含了Nginx服务器的Docker镜像。 首先,我们需要创建一个文本文件并命名为`Dockerfile`。在该文件中,我们可以使用一系列的指令来描述如何构建镜像。以下是一个简单的部署NginxDockerfile的示例: ``` # 基于官方的Nginx镜像构建我们自己的镜像 FROM nginx:latest # 可选:更新操作系统和安装必要的软件包 RUN apt-get update && apt-get install -y <软件包名称> # 可选:将自定义的Nginx配置文件复制到镜像中 COPY nginx.conf /etc/nginx/nginx.conf # 可选:将网站文件复制到镜像中的默认网站目录 COPY website /usr/share/nginx/html # 可选:设置环境变量 ENV MY_ENV_VAR=my_value # 可选:暴露Nginx的默认端口 EXPOSE 80 # 可选:启动Nginx服务器 CMD ["nginx", "-g", "daemon off;"] ``` 以上Dockerfile示例的步骤如下: 1. 使用`FROM`指令基于官方的Nginx镜像创建我们自己的镜像。 2. 可选地,使用`RUN`指令更新操作系统并安装必要的软件包。 3. 可选地,使用`COPY`指令将自定义的Nginx配置文件复制到镜像中的对应位置。 4. 可选地,使用`COPY`指令将网站文件复制到镜像中的默认网站目录。 5. 可选地,使用`ENV`指令设置环境变量。 6. 可选地,使用`EXPOSE`指令公开Nginx的默认端口。 7. 可选地,使用`CMD`指令在容器启动时启动Nginx服务器。 要构建镜像,我们可以使用以下命令: ``` docker build -t my-nginx-image . ``` 其中,`-t`参数用于指定镜像的标签,`.`表示使用当前目录下的Dockerfile。 构建完成后,我们可以使用以下命令来运行Nginx容器: ``` docker run -d -p 80:80 my-nginx-image ``` 其中,`-d`参数表示在后台运行容器,`-p`参数表示将容器的80端口映射到主机的80端口。 这样,我们就成功部署了一个使用Dockerfile构建的Nginx容器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值