该安装脚本会在当前目录下创建nginx文件夹,并将nginx部署在此位置,请确保当前环境的docker中没有相同命名的nginx容器!
install_nginx.sh
#!/bin/bash
mkdir nginx/data -p
cd nginx
cat > docker-compose.yml <<EOF
services:
nginx:
image: nginx:latest
container_name: nginx
restart: always
network_mode: host
# volumes:
# - ./data:/etc/nginx/
environment:
- TZ=Asia/Shanghai
EOF
docker compose up -d
sleep 5
docker compose cp nginx:/etc/nginx ./data
mv data/nginx/* ./data
rm -rf ./data/nginx
docker compose stop
sed -i '7,8 s/# //' docker-compose.yml # 取消volumes注释
docker compose up -d --build # 重新build即可将容器中的nginx目录映射到data下
如果需要将docker中的nginx配置为系统服务,执行以下脚本
setup_nginx.sh
#!/bin/bash
cur_dir=$(pwd)
cat > /usr/bin/nginx <<EOF
#!/bin/bash
cd $cur_dir/nginx && docker compose exec nginx nginx "\$@"
EOF
chmod +x /usr/bin/nginx
ln -s $cur_dir/nginx/data /etc/nginx
使用Host部署Nginx容器需要考虑主机防火墙策略相关配置,如果防火墙开启但未配置对应Nginx端口开放会导致外网无法访问到本机的Nginx端口,此处拿firewall-cmd配置举例:
#!/bin/bash
firewall-cmd --zone=public --add-port=80/tcp --permanent # 此处为开放80端口
firewall-cmd --reload # 重新加载防火墙策略
安装使用到的docker compose配置,volumes在未完成初始化前务必注释掉!
docker-compose.yml
services:
nginx:
image: nginx:latest
container_name: nginx
restart: always
network_mode: host
# volumes:
# - ./data:/etc/nginx/
environment:
- TZ=Asia/Shanghai