脚本安装
- 需要安装docker 和 docker compose 最新版
- 空闲的 80 端口
- 新建 nginx_docker_install.sh 写入以下内容执行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 定义目标目录变量
target_dir="/opt/nginx_docker"
# 第一阶段:提取默认配置和HTML文件
echo "启动临时Nginx容器来提取默认配置和HTML文件..."
docker run --name tmp-nginx -d nginx:latest
# 等待几秒以确保Nginx容器已经完全启动
sleep 5
echo "从临时容器复制默认配置和HTML文件..."
mkdir -p ${target_dir}
docker cp tmp-nginx:/etc/nginx/ ${target_dir}/
docker cp tmp-nginx:/usr/share/nginx/html ${target_dir}/
echo "停止并移除临时Nginx容器..."
docker stop tmp-nginx && docker rm tmp-nginx
# 检查docker-compose.yml文件是否存在
compose_file="$(pwd)/docker-compose.yml"
if [ ! -f "$compose_file" ]; then
echo "docker-compose.yml文件不存在,正在创建..."
cat << EOF > docker-compose.yml
version: '3.7'
services:
nginx:
image: nginx:latest
container_name: nginx_docker
network_mode: host
volumes:
- ${target_dir}/nginx/:/etc/nginx/
- ${target_dir}/html/:/usr/share/nginx/html
restart: always
EOF
fi
# 第二阶段:使用docker-compose启动定制的Nginx容器
echo "使用docker-compose启动定制的Nginx容器..."
docker-compose up -d
mv docker-compose.yml ${target_dir}/
echo "完成。"
安装
1 | docker pull nginx:latest && \ |
说明
- 主配置文件
/opt/nginx_docker/nginx.conf*
- 子配置文件
/opt/nginx_docker/conf.d/*
- 静态资源路径
/opt/nginx_docker/html/*
注意配置文件中路径写法
例:
站点文件存放于/opt/nginx_docker/html/blog/
SSL证书存放于1
2ls /opt/nginx_docker/html/blog/
index.html style.css .../opt/nginx_docker/ssl/aaa.com/
对应的 Nginx 配置文件如下:1
2ls /opt/nginx_docker/ssl/aaa.com/
fullchain.pem private_key.pem/opt/nginx_docker/conf.d/aaa.conf
1
2
3
4
5
6
7
8
9
10
11server {
listen 443 ssl http2;
server_name aaa.com;
ssl_certificate /etc/nginx/ssl/aaa.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/aaa.com/private_key.pem;
root /usr/share/nginx/html/blog/;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}注意:配置中的资源路径、SSL证书路径为 Docker 容器中的虚拟路径而非宿主机路径