Docker 部署 Nginx 完整指南

准备工作

确保已安装 Docker 和 Docker Compose。验证安装是否成功:

docker --version
docker-compose --version
拉取 Nginx 镜像

从 Docker Hub 获取官方 Nginx 镜像:

docker pull nginx:latest
运行 Nginx 容器

使用以下命令启动一个临时容器:

docker run --name my-nginx -p 80:80 -d nginx
  • -p 80:80:将主机的 80 端口映射到容器的 80 端口。
  • -d:后台运行容器。
验证运行状态

检查容器是否正常运行:

docker ps

访问 http://localhost 应显示 Nginx 默认欢迎页。

挂载自定义配置

创建本地目录存放 Nginx 配置文件和网站内容:

mkdir -p ~/nginx-config/conf.d
mkdir ~/nginx-config/html

将默认配置复制到本地目录:

docker cp my-nginx:/etc/nginx/nginx.conf ~/nginx-config/
docker cp my-nginx:/etc/nginx/conf.d/default.conf ~/nginx-config/conf.d/

停止并删除临时容器:

docker stop my-nginx
docker rm my-nginx

重新启动容器并挂载本地目录:

docker run --name my-nginx \
  -p 80:80 \
  -v ~/nginx-config/nginx.conf:/etc/nginx/nginx.conf \
  -v ~/nginx-config/conf.d:/etc/nginx/conf.d \
  -v ~/nginx-config/html:/usr/share/nginx/html \
  -d nginx
使用 Docker Compose 部署

创建 docker-compose.yml 文件:

version: '3'
services:
  nginx:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ~/nginx-config/nginx.conf:/etc/nginx/nginx.conf
      - ~/nginx-config/conf.d:/etc/nginx/conf.d
      - ~/nginx-config/html:/usr/share/nginx/html
    restart: unless-stopped

启动服务:

docker-compose up -d
配置 SSL 证书

生成自签名证书(仅测试用途):

mkdir ~/nginx-config/ssl
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout ~/nginx-config/ssl/nginx.key \
  -out ~/nginx-config/ssl/nginx.crt

修改 default.conf 启用 HTTPS:

server {
    listen 443 ssl;
    server_name localhost;
    ssl_certificate /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx.key;
    location / {
        root /usr/share/nginx/html;
        index index.html;
    }
}

更新 docker-compose.yml 挂载 SSL 目录:

volumes:
  - ~/nginx-config/ssl:/etc/nginx/ssl

重启服务:

docker-compose restart
日志管理

查看容器日志:

docker logs my-nginx

实时跟踪日志:

docker logs -f my-nginx
性能优化

限制容器资源使用:

# 在 docker-compose.yml 中添加
resources:
  limits:
    cpus: '1'
    memory: 512M

启用 Nginx 缓存:

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
高级配置

启用 HTTP/2:

server {
    listen 443 ssl http2;
    # 其他配置...
}

配置 Gzip 压缩:

gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml;
故障排查

检查容器内部文件:

docker exec -it my-nginx bash

验证 Nginx 配置:

docker exec my-nginx nginx -t
常见问题

端口冲突:确保主机 80 或 443 端口未被占用。
权限问题:本地挂载的文件需对容器内用户可读(通常为 nginx 用户)。
配置不生效:修改配置文件后需重启容器或重载 Nginx:

docker exec my-nginx nginx -s reload

更多推荐