Docker部署Nginx服务器
1、项目目录结构
创建目录结构
mkdir -p /data/nginx/{conf.d,html,logs,ssl}
cd /data
临时创建容器
#临时运行容器
docker run --name nginx -p 80:80 -d nginx:latest
#查看版本号
docker inspect mysql:latest | grep -i version
从容器中复制文件到宿主机
docker cp nginx:/etc/nginx/nginx.conf /data/nginx/
docker cp nginx:/etc/nginx/conf.d/ /data/nginx/
docker cp nginx:/usr/share/nginx/html/ /data/nginx/
删除容器
docker stop nginx
docker rm nginx
2、编排文件
创建编排文件
touch docker-compose.yml
vim docker-compose.yml
编排文件内容
version: "3.8"
services:
nginx:
image: nginx:1.27.5 # 指定版本
container_name: nginx
ports:
- "80:80"
#- "443:443" # 如需HTTPS
volumes:
- /data/nginx/nginx.conf:/etc/nginx/nginx.conf
- /data/nginx/conf.d:/etc/nginx/conf.d # 挂载自定义配置
- /data/nginx/html:/usr/share/nginx/html # 挂载静态文件
- /data/nginx/logs:/var/log/nginx # 挂载日志
- /data/nginx/ssl:/etc/nginx/ssl # 挂载SSL证书(可选)
- /etc/localtime:/etc/localtime
- /data/www:/data/www
restart: unless-stopped # 自动重启
environment:
- TZ=Asia/Shanghai
networks:
default:
ipv4_address: 172.17.0.2
networks:
default:
name: nginx-net
driver: bridge
ipam:
config:
- subnet: 172.17.0.0/16
gateway: 172.17.0.1
启动
docker-compose up -d
3、配置防火墙
禁止Docker自动管理iptables规则
Debian系统
# 编辑配置文件
echo 'DOCKER_OPTS="--iptables=false"' >> /etc/default/docker
# 重启docker服务
systemctl restart docker
Centos系统
# 编辑配置文件
echo 'OPTIONS="--iptables=false"' >> /etc/sysconfig/docker
# 重启docker服务
systemctl restart docker
所有系统通用方式创建或修改 daemon.json
# 创建/修改daemon.json
tee /etc/docker/daemon.json <<EOF
{
"iptables": false
}
EOF
# 重载配置(无需完全重启)
systemctl reload docker
禁用后需手动配置iptables以下规则
# 启用IP转发
echo 1 > /proc/sys/net/ipv4/ip_forward
# 添加NAT规则(替换172.17.0.0/16为你的Docker子网)
iptables -t nat -A POSTROUTING -s 172.17.0.0/16 -j MASQUERADE
删除规则
使用 -D
参数(Delete),并保持与添加规则时完全相同的参数(除了将 -A
改为 -D
):
iptables -t nat -D POSTROUTING -s 172.17.0.0/16 -j MASQUERADE
查看规则
iptables -t nat -L POSTROUTING --line-numbers
指定行号删除规则
iptables -t nat -D POSTROUTING 1
规则持久化,删除后需保存规则,否则重启后可能恢复:
iptables-save | sudo tee /etc/iptables/rules.v4