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