Docker 部署 Nginx 环境
Docker 部署 Nginx 环境(详细实操教程,新手友好)
前言:Nginx 是目前最流行的高性能 Web 服务器,常用于静态资源托管、反向代理、负载均衡等场景;而 Docker 可以实现环境的隔离与快速部署,避免“本地能跑、服务器跑不起来”的问题。本文将从 0 到 1 讲解,如何在 Linux 服务器(CentOS 7)上,使用 Docker 部署 Nginx 环境,步骤详细、命令可直接复制,新手也能轻松上手。
一、部署前准备(必做)
1.1 环境要求
服务器:CentOS 7(阿里云、腾讯云、华为云等云服务器均可,最低配置 1核2G,满足基础部署需求);
系统状态:确保服务器能正常联网(用于下载 Docker 和 Nginx 镜像);
权限:拥有服务器 root 权限(或 sudo 权限),避免执行命令时出现权限不足问题;
工具:本地电脑安装 Xshell(或 Putty),用于远程连接服务器(也可直接使用云服务器自带的远程终端)。
1.2 提前检查服务器状态
远程连接服务器后,先执行以下命令,检查服务器是否已安装 Docker(避免重复安装),以及系统网络是否正常。
1. 检查网络连通性(能 ping 通百度即正常):
ping baidu.com -c 3说明:-c 3 表示只 ping 3 次,避免一直 ping 占用终端,出现“64 bytes from xxx”即表示网络正常。
2. 检查是否已安装 Docker:
docker -v结果说明:
若显示类似 “Docker version 24.0.7, build xxx”,说明已安装 Docker,可直接跳至 第二章 拉取 Nginx 镜像;
若显示 “command not found”,说明未安装 Docker,需执行 1.3 安装 Docker 步骤。
1.3 安装 Docker(未安装时执行)
全程使用命令行操作,每一步都需等待执行完成(出现 “Complete!” 或类似成功提示即为完成),命令可直接复制粘贴,避免手动输入出错。
1. 安装 Docker 依赖包(yum 工具自带,直接安装即可):
yum install -y yum-utils device-mapper-persistent-data lvm2说明:-y 表示自动确认安装,无需手动输入 y 确认,节省操作时间。
2. 设置 Docker 镜像源(使用阿里云镜像源,下载速度更快,避免官方源卡顿):
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3. 安装 Docker CE(社区版,免费且足够日常使用):
yum install -y docker-ce docker-ce-cli containerd.io注意:若出现 “No match for argument: docker-ce” 错误,可先执行 yum clean all 清理缓存,再重新执行该命令。
4. 启动 Docker 服务,并设置开机自启(避免服务器重启后 Docker 失效):
systemctl start docker # 启动 Docker
systemctl enable docker # 设置开机自启5. 验证 Docker 是否安装成功:
docker -v若显示 Docker 版本信息,即为安装成功;若仍提示 command not found,可重启服务器(reboot)后再检查。
二、拉取 Nginx 镜像(核心步骤)
Docker 部署应用的核心是“镜像”,我们需要先从 Docker Hub(官方镜像仓库)拉取 Nginx 官方镜像,建议拉取 稳定版(本文使用 nginx:1.24 稳定版,兼容性好、bug 少)。
2.1 拉取 Nginx 镜像
docker pull nginx:1.24执行命令后,会自动下载镜像,下载速度取决于服务器带宽,耐心等待即可。
说明:若不指定版本(直接执行 docker pull nginx),会拉取最新版(latest),但最新版可能存在兼容性问题,新手建议指定稳定版。
2.2 验证镜像是否拉取成功
docker images若输出结果中包含 “nginx”,且标签为 “1.24”,说明镜像拉取成功,类似如下内容:
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.24 xxxxxxxxxxxx 2 weeks ago 187MB三、启动 Nginx 容器(部署核心)
镜像拉取完成后,需要通过镜像创建并启动 Nginx 容器(容器是镜像的运行实例,相当于“启动 Nginx 服务”)。为了方便后续修改 Nginx 配置、托管静态资源,我们将 容器内的核心目录映射到服务器本地目录(避免进入容器操作,降低难度)。
3.1 创建本地映射目录
在服务器本地创建 3 个目录,分别映射容器内的 Nginx 配置目录、静态资源目录、日志目录,命令如下(一次性执行):
mkdir -p /home/nginx/conf # 映射 Nginx 配置文件目录
mkdir -p /home/nginx/html # 映射 Nginx 静态资源目录(用于放网页文件)
mkdir -p /home/nginx/logs # 映射 Nginx 日志目录(方便查看访问日志、错误日志)说明:-p 表示递归创建目录,即使上级目录不存在,也会自动创建,避免手动创建多级目录的麻烦。
3.2 复制容器内的默认配置文件到本地
先临时启动一个 Nginx 容器,将容器内的默认配置文件复制到本地映射目录,后续直接修改本地配置文件即可(无需进入容器):
# 临时启动 Nginx 容器(命名为 temp-nginx,仅用于复制配置文件)
docker run --name temp-nginx -d nginx:1.24
# 复制容器内的 nginx.conf 配置文件到本地 /home/nginx/conf 目录
docker cp temp-nginx:/etc/nginx/nginx.conf /home/nginx/conf/
# 复制容器内的 conf.d 目录(虚拟主机配置)到本地 /home/nginx/conf 目录
docker cp temp-nginx:/etc/nginx/conf.d /home/nginx/conf/
# 停止并删除临时容器(配置文件已复制,临时容器无用)
docker stop temp-nginx
docker rm temp-nginx每一步执行完成后,可进入本地目录检查是否复制成功,例如:
ls /home/nginx/conf若显示 “nginx.conf conf.d”,说明配置文件复制成功。
3.3 启动正式 Nginx 容器
执行以下命令,启动 Nginx 容器,同时完成本地目录与容器目录的映射,命令较长,可分多行复制(或直接复制完整命令):
docker run -d \
--name nginx \
-p 80:80 \
-v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /home/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /home/nginx/html:/usr/share/nginx/html \
-v /home/nginx/logs:/var/log/nginx \
--restart=always \
nginx:1.24命令参数详解(新手必看,理解参数含义,避免后续出错):
-d:后台运行容器(守护进程模式),避免终端关闭后容器停止;
--name nginx:给容器命名为 nginx,后续操作(停止、重启)可直接用名称,无需记容器 ID;
-p 80:80:端口映射,将服务器的 80 端口(HTTP 默认端口)映射到容器的 80 端口,外部访问服务器 IP 即可访问 Nginx;
-v 本地目录:容器目录:目录映射,共 4 个映射,分别对应配置、虚拟主机、静态资源、日志,后续修改本地文件即可同步到容器;
--restart=always:设置容器开机自启,服务器重启后,Nginx 容器会自动启动;
nginx:1.24:指定使用的镜像名称和版本。
3.4 验证 Nginx 容器是否启动成功
执行以下命令,查看容器运行状态:
docker ps若输出结果中,NAME 为 nginx,STATUS 为 “Up X minutes”(X 为运行时间),说明容器启动成功;若 STATUS 为 Exited,说明启动失败,需查看日志排查问题(下文有排查方法)。
补充:查看容器启动日志(排查启动失败问题):
docker logs nginx常见失败原因:端口 80 被占用(可执行 netstat -tuln | grep 80 查看占用端口的进程,停止该进程或修改映射端口即可)。
四、验证部署结果(关键一步)
Nginx 容器启动成功后,我们需要验证是否能正常访问,有两种验证方式,任选一种即可。
4.1 服务器本地验证
在服务器终端执行以下命令,访问本地 Nginx:
curl http://localhost:80若输出类似以下内容(Nginx 默认欢迎页面的 HTML 代码),说明本地访问正常:
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body { width: 95%; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
</body>
</html>4.2 外部访问验证(最直观)
在本地电脑的浏览器中,输入 http://服务器公网IP(无需加端口 80,因为 80 是 HTTP 默认端口),若能看到 Nginx 默认欢迎页面(白色背景,黑色文字 “Welcome to nginx!”),说明部署成功!
注意:若无法访问,大概率是服务器防火墙未开放 80 端口,执行以下命令开放 80 端口(CentOS 7 防火墙命令):
firewall-cmd --permanent --add-port=80/tcp # 永久开放 80 端口
firewall-cmd --reload # 重新加载防火墙配置,使端口开放生效若使用的是云服务器(阿里云、腾讯云等),还需在云控制台的“安全组”中,开放 80 端口(入方向),否则外部无法访问。
五、后续常用操作(必记)
部署完成后,后续可能需要重启 Nginx、修改配置、查看日志等,以下是最常用的命令,建议收藏。
5.1 Nginx 容器常用命令
# 停止 Nginx 容器
docker stop nginx
# 启动 Nginx 容器(已停止时)
docker start nginx
# 重启 Nginx 容器(修改配置后需执行,使配置生效)
docker restart nginx
# 查看 Nginx 运行日志(实时查看,按 Ctrl+C 退出)
docker logs -f nginx
# 进入 Nginx 容器内部(特殊情况需操作容器时,一般无需进入)
docker exec -it nginx /bin/bash5.2 修改 Nginx 配置(最常用)
后续若需修改 Nginx 配置(如托管自己的网页、配置反向代理),直接修改本地映射目录的配置文件即可,步骤如下:
编辑 Nginx 主配置文件(一般无需修改,主要修改虚拟主机配置):
vim /home/nginx/conf/nginx.conf编辑虚拟主机配置(最常用,比如配置自己的网站):
vim /home/nginx/conf/conf.d/default.conf修改完成后,重启 Nginx 容器,使配置生效:
docker restart nginx
示例:替换 Nginx 默认首页(托管自己的静态网页):
# 编辑本地静态资源目录下的 index.html 文件
vim /home/nginx/html/index.html
# 输入自己的网页内容(示例),按 Esc 后输入 :wq 保存退出
<!DOCTYPE html>
<html>
<head><title>我的博客</title></head>
<body><h1>Docker + Nginx 部署成功!</h1></body>
</html>
# 重启 Nginx 容器
docker restart nginx此时再访问服务器公网 IP,就能看到自己修改的网页内容了。
5.3 查看 Nginx 访问日志
日志映射在本地 /home/nginx/logs 目录,常用命令:
# 查看访问日志(记录所有访问请求)
cat /home/nginx/logs/access.log
# 实时查看访问日志(按 Ctrl+C 退出)
tail -f /home/nginx/logs/access.log
# 查看错误日志(排查访问失败、配置错误等问题)
cat /home/nginx/logs/error.log六、常见问题排查(新手必看)
问题1:Docker 启动失败,提示 “Job for docker.service failed because the control process exited with error code”
解决方法:执行 systemctl status docker 查看错误原因,最常见的是“端口被占用”或“镜像损坏”,可尝试重启 Docker 服务:systemctl restart docker,若仍失败,卸载 Docker 后重新安装。
问题2:Nginx 容器启动成功,但外部无法访问
解决步骤:
检查服务器防火墙是否开放 80 端口(执行
firewall-cmd --list-ports,若没有 80/tcp,重新执行开放端口命令);检查云服务器安全组是否开放 80 端口(登录云控制台,找到安全组,添加入方向规则,端口 80,允许所有 IP 访问);
检查容器端口映射是否正确(执行
docker ps,查看 PORTS 列是否为 0.0.0.0:80->80/tcp);检查 Nginx 是否正常运行(执行
docker logs nginx,查看是否有错误日志)。
问题3:修改 Nginx 配置后,重启容器仍不生效
解决方法:
检查配置文件是否修改正确(避免语法错误,比如少写分号、括号不匹配);
检查本地配置文件是否映射正确(确保修改的是 /home/nginx/conf 目录下的文件,而非容器内的文件);
重启容器后,执行
docker exec nginx nginx -t,检查 Nginx 配置语法是否正确,若有错误,根据提示修改。
七、总结
本文通过 Docker 部署 Nginx 环境,全程采用“命令复制+步骤拆解”的方式,覆盖了从环境准备、Docker 安装、镜像拉取、容器启动,到验证部署、常用操作、问题排查的全流程,新手只需跟着步骤一步步执行,就能完成部署。
后续可基于此环境,实现静态博客托管、反向代理(如代理后端接口)、负载均衡等功能,后续会继续更新相关实操教程,关注我的博客,获取更多干货~