Docker部署镜像的关键知识点:
- 镜像的无状态原则:镜像属于只读模版,打包程序、运行环境,本身不存储运行时产生的数据;同一镜像可以启动多个容器(沙箱),相互独立、互不干扰;容器销毁后容器内临时数据直接丢失。
- 数据的持久化要求:容器生命周期结束后数据丢失,而磁盘挂载将业务数据、配置文件剥离容器保存,实现数据脱离容器独立留存。
Nginx简介
2002年Igor Sysoev 开发 Nginx,目标用于俄罗斯高流量门户网站,解决大并发、高访问场景下 Apache 性能孱弱的痛点。
出色的核心设计包括:
- 多进程+IO多路复用:Master进程处理主线、Worker进程处理连接,单个进程可以维护成千上万个TCP连接。
- 事件驱动异步非阻塞:IO读写使用异步处理,静态文件、反向代理等待磁盘/网络期间,处理其他请求,效率拉满。
- 模块化架构:内核极简,大多数功能(SSL、gzip、rewrite、限流、缓存)以插件模块实现,按需编译,轻量无冗余。
- 经典能力场景:
- 反向代理:接收请求后转发,隐藏后端真实IP,实现安全隔离。
- 负载均衡:内置轮询、加权轮询、IP哈希策略,流量分发,分摊压力。
- 动静分离:静态资源本地读取,动态接口转发给后端服务。
- 热重载:nginx -s reload,Master生成Worker处理新请求,就Worker处理完后销毁,全程服务不中断。
Docker启动Nginx
磁盘挂载关键目录:
/dev-ops/
├── nginx/
│ ├── conf/
│ ├── html/
│ ├── logs/
│ └── ssl/
└── docker-compose.yml
创建对应目录:
sudo mkdir -p /dev-ops/nginx/{conf,html,logs,ssl}
有三个必要的文件:基础配置(/dev-ops/nginx/conf/nginx.conf)、服务配置(/dev-ops/nginx/conf/conf.d/default.conf)和首页(/dev-ops/nginx/html/index.html)
# /dev-ops/nginx/conf/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
# /dev-ops/nginx/conf/conf.d/default.conf
server {
listen 80;
listen [::]:80;
location / {
root /usr/share/nginx/html;
index index.html;
}
location /api {
root /usr/share/nginx/html;
index index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
# /dev-ops/nginx/html/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Nginx</title>
</head>
<body>
Hi Boy, Congratulations on your successful deployment!
</body>
</html>
容器编排文件/dev-ops/docker-compose.yml
# 命令执行 docker-compose up -d
# docker-compose -f docker-compose.yml up -d
version: '3.9'
services:
# yum install -y httpd-tools
nginx:
image: registry.cn-hangzhou.aliyuncs.com/xfg-studio/nginx:1.25.1
container_name: nginx
restart: always
ports:
- '443:443'
- '80:80'
volumes:
- ./nginx/logs:/var/log/nginx
- ./nginx/html:/usr/share/nginx/html
- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/conf/conf.d:/etc/nginx/conf.d
- ./nginx/ssl:/etc/nginx/ssl/
privileged: true
容器启动Nginx:
# cd进入到/dev-ops/目录下
docker-compose -f docker-compose.yml up -d
直接访问验证,地址 http://云服务器IP,显示index.html内容:
Hi Boy, Congratulations on your successful deployment!
SSL证书配置
获取免费自动续期的证书
推荐👉 https://httpsok.com/p/5Dq3, 🔐 httpsok|SSL证书自动续期工具
一行命令,完成证书申请、自动续期、自动部署;避免证书过期,适合长期稳定运行的服务。
操作指导:https://httpsok.com/doc/guide/apply.html
然后获取到了证书文件,我选择的tar.gz格式的压缩包:_.qiubuer.cn_nginx_rsa.tar.gz(qiubuer.cn是我的域名)
配置证书
本地打开Git Bash使用scp上传到云服务器:
scp _.qiubuer.cn_nginx_rsa.tar.gz 登录用户名@云服务器IP:/dev-ops/nginx/ssl
云服务器进入指定目录解压后,生成两个文件:xxx.xxxx.key和xxx.xxxx.pem
tar -zxf _.qiubuer.cn_nginx_rsa.tar.gz
配置证书/dev-ops/nginx/ssl/conf/conf.d/qiubuer.cn.conf,替换对应的域名就ok了。
,server {
listen 80;
listen [::]:80;
server_name qiubuer.cn;
rewrite ^(.*) https://$server_name$1 permanent;
}
server {
listen 443 ssl;
server_name qiubuer.cn;
ssl_certificate /etc/nginx/ssl/_.qiubuer.cn.pem;
ssl_certificate_key /etc/nginx/ssl/_.qiubuer.cn.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
重启nginx,还是进入到/dev-ops/目录下
# 停止并删除容器+项目专属网络
docker-compose -f docker-compose.yml down
# 重新创建网络并启动
docker-compose -f docker-compose.yml up -d
这次直接访问https://域名,显示index.html内容就是成功了:
Hi Boy, Congratulations on your successful deployment!
证书配置自动续期
为了避免证书续签的麻烦事, https://httpsok.com/p/5Dq3提供了自动续签脚本。
操作路径:左侧自动部署 —> 选择服务器tab —> 安装脚本选择nginx —> 会自动生成到剪贴板。

服务器操作:
# 查看启动的容器名称 有个nginx的容器
docker ps
# 进入nginx容器内部
docker exec -it nginx /bin/bash
直接执行复制的脚本:

提示success就可以去httpsok控制台查看:下方就会出现自动部署的记录。
证书监控页面也有记录显示,可以点击检测按钮刷新状态和显示有效期。