Docker安装Nginx
·
在 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 证书)
- 准备证书:将 SSL 证书(
xxx.crt)和私钥(xxx.key)上传到主机/data/nginx/conf/ssl目录(需先创建)。 - 创建 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; } - 重启容器:
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/*)。
更多推荐
所有评论(0)