Docker 安装部署nginx

179 阅读1分钟

自动续期https移步<Docker+certbot+Nginx实现自动续期https证书>

  • 下载
docker pull nginx
  • 编写docker-compose脚本
version: '3.8'
services:
  nginx:
    image: nginx:latest
    container_name: nginx
    ports:
      - "80:80"
      - "443:443"
    restart: always
    privileged: true
  • 编写init-nginx.sh脚本
#!/bin/bash

# 创建必要的目录
mkdir -p nginx/logs nginx/html nginx/conf

# 启动一个临时的 nginx 容器
docker run --name nginx-temp -d nginx:latest

# 复制配置文件到主机
docker cp nginx-temp:/etc/nginx/nginx.conf ./nginx/
docker cp nginx-temp:/etc/nginx/conf.d/default.conf ./nginx/conf/
docker cp nginx-temp:/usr/share/nginx/html/ ./nginx/

# 停止并删除临时容器
docker stop nginx-temp
docker rm nginx-temp

# 设置适当的权限
chmod -R 755 nginx

# 修改 docker-compose.yml 添加 volumes 配置
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
  nginx:
    image: nginx:latest
    container_name: nginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/logs:/var/log/nginx
      - ./nginx/html:/usr/share/nginx/html
      - ./nginx/conf:/etc/nginx/conf.d
    networks:
      - nginx-network    # 添加到自定义网络
    restart: always
    privileged: true
# 定义网络
networks:
  nginx-network:
    driver: bridge      # 使用 bridge 驱动
    name: nginx-network # 指定网络名称
EOF

# 启动 docker-compose
docker-compose up -d
  1. 创建必要的目录结构
  2. 启动一个临时的 Nginx 容器
  3. 从临时容器中复制默认配置文件到主机
  4. 删除临时容器
  5. 设置正确的权限
  6. 更新 docker-compose.yml 文件
  7. 启动正式的 Nginx 容器
  • 添加执行权限
chmod +x init-nginx.sh
  • 运行脚本
./init-nginx.sh