在 Docker 中部署 Nginx 是前端开发、静态网站托管的常用方式,具有配置灵活、环境隔离的优势。以下是详细的部署步骤,包括基础配置、自定义网站内容、SSL 证书配置及日常管理:

一、拉取 Nginx 镜像

从 Docker Hub 拉取官方 Nginx 镜像,可指定稳定版本(如1.23,默认拉取latest最新版):

bash

# 拉取最新版
docker pull nginx

# 拉取指定版本(推荐生产环境使用稳定版)
docker pull nginx:1.23

验证拉取结果:

bash

docker images | grep nginx
# 输出示例:nginx   1.23   xxxxxxxx   2 weeks ago   142MB

二、基础部署:启动 Nginx 容器

1. 简单启动(快速测试)

bash

docker run -d \
  --name nginx \
  -p 80:80 \
  --restart=always \
  nginx:1.23

启动后,访问主机 IP(如http://服务器IP)可看到 Nginx 默认欢迎页。

2. 持久化部署(生产环境推荐)

为了方便管理网站文件、配置和日志,需通过数据卷挂载将容器内关键目录映射到主机:

bash

# 先在主机创建所需目录(建议统一管理)
mkdir -p /data/nginx/{conf,conf.d,html,logs}

# 启动容器并挂载目录
docker run -d \
  --name nginx \
  -p 80:80 \  # HTTP端口
  -p 443:443 \  # HTTPS端口(如需启用)
  -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \  # 主配置文件
  -v /data/nginx/conf.d:/etc/nginx/conf.d \  # 虚拟主机配置目录
  -v /data/nginx/html:/usr/share/nginx/html \  # 网站根目录
  -v /data/nginx/logs:/var/log/nginx \  # 日志目录
  --restart=always \
  nginx:1.23
目录说明:
主机目录 容器内目录 作用
/data/nginx/conf/nginx.conf /etc/nginx/nginx.conf Nginx 主配置文件
/data/nginx/conf.d /etc/nginx/conf.d 存放虚拟主机配置(如default.conf
/data/nginx/html /usr/share/nginx/html 网站静态文件(HTML/CSS/JS 等)
/data/nginx/logs /var/log/nginx 访问日志(access.log)和错误日志(error.log

三、自定义网站内容与配置

1. 替换默认页面

直接在主机的/data/nginx/html目录下修改文件,容器内会实时同步:

bash

# 创建自定义首页
echo "<h1>My Docker Nginx</h1>" > /data/nginx/html/index.html

访问主机 IP 即可看到自定义内容。

2. 配置虚拟主机(多网站)

/data/nginx/conf.d目录下创建配置文件(如mywebsite.conf):

nginx

server {
    listen 80;
    server_name yourdomain.com;  # 替换为你的域名

    root /usr/share/nginx/html/mywebsite;  # 网站文件目录(主机对应/data/nginx/html/mywebsite)
    index index.html;

    # 日志配置
    access_log /var/log/nginx/mywebsite_access.log;
    error_log /var/log/nginx/mywebsite_error.log;
}

创建对应网站目录并添加文件:

bash

mkdir -p /data/nginx/html/mywebsite
echo "<h1>My Website</h1>" > /data/nginx/html/mywebsite/index.html

重启容器使配置生效:

bash

docker restart nginx
3. 配置 HTTPS(SSL 证书)
  1. 准备证书:将 SSL 证书(xxx.crt)和私钥(xxx.key)上传到主机/data/nginx/conf/ssl目录(需先创建)。
  2. 创建 HTTPS 配置:在conf.d目录添加ssl.conf

    nginx

    server {
        listen 443 ssl;
        server_name yourdomain.com;
    
        # 证书路径(容器内路径)
        ssl_certificate /etc/nginx/conf/ssl/xxx.crt;
        ssl_certificate_key /etc/nginx/conf/ssl/xxx.key;
    
        # SSL配置优化(可选)
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers HIGH:!aNULL:!MD5;
    
        root /usr/share/nginx/html/mywebsite;
        index index.html;
    }
    
    # 可选:HTTP自动跳转HTTPS
    server {
        listen 80;
        server_name yourdomain.com;
        return 301 https://$host$request_uri;
    }
    
  3. 重启容器docker restart nginx,访问https://yourdomain.com即可生效。

四、容器管理与操作

1. 进入容器终端

如需临时修改配置或调试,可进入容器:

bash

docker exec -it nginx /bin/bash

容器内常用命令:nginx -t(测试配置是否正确)、nginx -s reload(重载配置)。

2. 查看日志

实时查看访问日志或错误日志:

bash

# 访问日志
tail -f /data/nginx/logs/access.log

# 错误日志(排查启动失败等问题)
tail -f /data/nginx/logs/error.log
3. 重启 / 停止 / 更新容器

bash

# 重启(配置修改后需执行)
docker restart nginx

# 停止
docker stop nginx

# 更新Nginx版本(需先备份数据)
docker stop nginx && docker rm nginx
docker pull nginx:1.24  # 拉取新版本
# 用原命令重新创建容器(挂载目录不变,数据保留)

五、常见问题解决

1. 容器启动失败(无日志或报错)
  • 检查配置文件语法:docker exec nginx nginx -t(若容器能启动)或在主机用nginx -t -c /data/nginx/conf/nginx.conf(需本地安装 nginx)。
  • 检查端口是否被占用:netstat -tulpn | grep 80,释放占用端口或修改映射(如-p 8080:80)。
  • 检查目录权限:确保主机/data/nginx目录权限正确(可执行chmod -R 755 /data/nginx)。
2. 网站文件不生效
  • 确认文件已放入主机/data/nginx/html对应目录,且文件名正确(如index.html)。
  • 检查 Nginx 配置中root路径是否与文件存放目录一致。
  • 重启容器或重载配置:docker exec nginx nginx -s reload
3. HTTPS 证书错误
  • 确认证书文件路径在配置中是否正确(容器内路径为/etc/nginx/conf/ssl/xxx.crt)。
  • 证书文件是否完整,权限是否允许 Nginx 读取(可执行chmod 644 /data/nginx/conf/ssl/*)。

更多推荐