Docker部署nginx:手把手教你用Docker部署
准备环境与安装Docker
开始之前,你的服务器需要装有 Docker。
推荐使用 Ubuntu 20.04+ 或 CentOS 7+。
安装命令如下:
- Ubuntu/Debian:
sudo apt update && sudo apt install docker.io -y - CentOS/RHEL:
sudo yum install -y yum-utils && sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo && sudo yum install docker-ce docker-ce-cli containerd.io -y - 安装完成后,启动 Docker 并设置开机自启:
sudo systemctl start docker && sudo systemctl enable docker - 验证是否成功:
sudo docker version,看到客户端和服务器版本即正常。
如果系统防火墙开启了,需放行 80 端口(后续 Nginx 默认端口),例如 CentOS 执行:sudo firewall-cmd --add-port=80/tcp --permanent && sudo firewall-cmd --reload。
拉取 Nginx 镜像并创建容器
Docker 部署 Nginx 第一步是拉取官方镜像。
打开终端执行:
sudo docker pull nginx
该命令会从 Docker Hub 下载最新版 Nginx 镜像。
拉取完成后,用以下命令启动容器:
sudo docker run -d -p 80:80 --name my-nginx nginx
-d:后台运行。-p 80:80:将宿主机的 80 端口映射到容器的 80 端口。--name my-nginx:给容器命名为 my-nginx,方便管理。nginx:使用的镜像名称。
容器启动后,可以用 sudo docker ps 查看运行状态,看到 my-nginx 处于 UP 状态就说明容器正常。
配置端口映射与目录挂载(进阶)
若需要自定义 Nginx 配置或静态文件目录,可以使用目录挂载。
例如,将宿主机 /data/www 映射到容器内的 /usr/share/nginx/html,并挂载自定义配置文件:
sudo mkdir -p /data/www /data/conf
sudo docker run -d -p 80:80 --name my-nginx \
-v /data/www:/usr/share/nginx/html \
-v /data/conf/nginx.conf:/etc/nginx/nginx.conf:ro \
nginx
-v /data/www:/usr/share/nginx/html:将宿主机的网站目录挂载到容器。-v /data/conf/nginx.conf:/etc/nginx/nginx.conf:ro:挂载自定义配置文件,:ro表示只读。- 如果配置文件有错误,容器可能无法启动,此时可用
sudo docker logs my-nginx查看错误日志。
验证 Nginx 是否正常运行
最简单的方法是在浏览器访问服务器的公网 IP 或域名。
如果看到 Nginx 默认欢迎页(Welcome to nginx),说明部署成功。
如果没有浏览器,也可以在服务器本地用 curl 测试:
curl http://localhost
返回包含 Welcome to nginx 的 HTML,即正常。
若显示 Connection refused,请检查:
- 防火墙是否放行 80 端口。
- 容器是否在运行:
sudo docker ps。 - 端口映射是否正确:
sudo docker port my-nginx应返回80/tcp -> 0.0.0.0:80。
常见问题与避坑
Q:端口被占用怎么办?
宿主机 80 端口已使用时,更换映射端口,例如 -p 8080:80,然后通过 http://IP:8080 访问。
Q:容器启动后立刻退出?
用 sudo docker logs my-nginx 查看日志。常见原因是挂载的配置文件有语法错误,或映射的目录权限不足。检查配置文件内容,确保 nginx -t 测试通过。
Q:如何停止并删除容器?
sudo docker stop my-nginx && sudo docker rm my-nginx。若需同时删除镜像:sudo docker rmi nginx。
Q:为什么修改了挂载目录的文件但页面没变?
注意挂载路径是否正确。可以用 sudo docker exec -it my-nginx /bin/bash 进入容器,ls /usr/share/nginx/html 确认文件是否存在。
建议每次修改配置文件后,先在本机用 nginx -t 验证,再挂载到容器,避免容器反复重启。
如果你正在处理 Docker 部署 Nginx,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。
动手操作一遍就能熟练掌握 Docker 部署 Nginx 的全流程。