1、获取镜像
# docker pull nginx

2、查看本地镜像
# docker images
3、创建挂载目录
拉取成功后需要创建文件和文件夹用于运行的时候挂载
# mkdir -p /usr/local/nginx/conf
# mkdir -p /usr/local/nginx/logs
# mkdir -p /usr/local/nginx/html
4、准备配置文件
下面需要先运行容器,方便把文件本来的内容拷贝出来,然后再将容器删除,因为自己手动创建的配置文件容易有语法错误,当然如果你有了正确的配置文件也可以直接使用,就不需要创建容器拷贝出来后再删除这个操作了。接下来几个步骤可以跳过:
# 1. 先用 nginx 镜像创建 nginx 容器,将需要挂载的文件拷贝出来
docker run --name nginx -d -p 80:80 nginx
# 2. 将容器中的 nginx.conf 文件拷贝到宿主机中
docker cp nginx:/etc/nginx/nginx.conf /usr/local/nginx/conf/nginx.conf
# 3. 将容器中 conf.d 文件夹(包括里面的文件)拷贝到宿主机中
docker cp nginx:/etc/nginx/conf.d /usr/local/nginx/conf/conf.d
# 4. 将容器中的 html 文件夹拷贝到宿主机中
docker cp nginx:/usr/share/nginx/html /usr/local/nginx/
# 5.删除正在运行的容器容器(-f 的参数作用是强制删除)
docker rm -f nginx

最终可以在宿主机中看到这些目录和文件夹,并且其中的html中包含了html文件,conf文件夹中包含了配置文件。

5、创建容器
全部准备好后,做最终的文件夹挂载,端口映射
#运行启动命令,并将端口进行映射,文件进行挂载。
docker run -p 80:80 --name nginx -v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/nginx/conf/conf.d:/etc/nginx/conf.d -v /usr/local/nginx/logs:/var/log/nginx -v /usr/local/nginx/html:/usr/share/nginx/html -d --restart=always nginx:latest
#格式化后的代码
docker run -p 80:80 --name nginx \
-v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /usr/local/nginx/logs:/var/log/nginx \
-v /usr/local/nginx/html:/usr/share/nginx/html \
-d \
--restart=always \
nginx:latest
# 1.--name是设置容器名
# 2.-p是容器与宿主机的端口映射
# 3.-v是做卷挂载,实质上就是文件的映射
# 4.-d是后台运行
# 5.--restart 是Docker提供重启策略控制容器退出时或Docker重启时是否自动启动该容器。,always表示docker重启后,这个容器会自动重启
6、配置代理
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://backend-server:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
}
# HTTP 服务配置(不重定向)
server {
listen 80;
server_name example.com;
# 不重定向,直接处理请求
location / {
proxy_pass http://backend-server:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto http;
}
}# HTTP 服务配置
server {
listen 80;
server_name example.com;
# 重定向到 HTTPS
return 301 https://$host$request_uri;
}