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