Docker 安装 Nginx(长文讲解)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观
前言
Docker 是容器化技术领域的“瑞士军刀”,而 Nginx 则是 Web 服务器领域的“瑞士军刀”。两者的结合不仅能够简化开发环境的搭建,还能通过容器化实现高效部署与运维。本文将从零开始,带领编程初学者和中级开发者逐步掌握如何通过 Docker 安装并配置 Nginx。通过实际案例与代码示例,读者将理解容器化部署的优势,并能够独立完成相关操作。
Docker 基础概念:容器与镜像的“集装箱”比喻
什么是 Docker?
Docker 是一种开源的容器化平台,允许开发者将应用程序及其依赖打包成一个轻量级、可移植的容器。想象 Docker 是一个集装箱码头,而应用程序是需要运输的货物:
- 镜像(Image):如同集装箱的设计图纸,记录了应用程序的运行环境与配置。
- 容器(Container):基于镜像运行的“实例”,就像根据图纸组装的集装箱,可以随时启动、停止或删除。
Docker 的核心优势在于环境一致性——无论在本地开发机还是生产服务器上,只要运行相同的镜像,就能确保应用程序的行为一致。
环境准备:安装 Docker
在开始安装 Nginx 之前,需确保本地已安装 Docker。以下是不同操作系统下的安装步骤:
Linux 系统(以 Ubuntu 为例)
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
docker --version # 应输出 Docker 版本号,如 Docker version 20.10.7, build f0df350
macOS 或 Windows 系统
- 访问 Docker 官网 ,下载并安装 Docker Desktop。
- 安装完成后,打开 Docker Desktop 并确保其状态为“Running”。
步骤一:拉取 Nginx 镜像
Docker Hub 是全球最大的容器镜像仓库,提供了官方维护的 Nginx 镜像。通过以下命令获取镜像:
docker pull nginx
执行后,Docker 会自动下载最新版本的 Nginx 镜像。若需指定版本,可添加标签(例如 nginx:1.21.3
)。
步骤二:运行 Nginx 容器
基础命令:启动容器
使用 docker run
命令启动 Nginx 容器:
docker run -d -p 80:80 --name my-nginx nginx
参数解释
参数 | 作用 |
---|---|
-d | 后台运行容器(类似“守护进程”模式) |
-p 80:80 | 将容器的 80 端口映射到宿主机的 80 端口 |
--name my-nginx | 为容器指定名称(便于后续管理) |
nginx | 使用名为 nginx 的镜像启动容器 |
验证容器运行状态
docker ps
若看到类似以下输出,说明容器已成功运行:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abc123... nginx "nginx -g 'daemon of…" 2 minutes ago Up 2 minutes 0.0.0.0:80->80/tcp my-nginx
步骤三:访问 Nginx 默认页面
在浏览器中输入 http://localhost
,若看到“Welcome to nginx!”的欢迎页面,说明安装成功。
进阶操作:自定义 Nginx 配置
修改 Nginx 配置文件
Nginx 的核心配置文件位于容器内的 /etc/nginx/nginx.conf
。通过 Docker 的**卷挂载(Volume)**功能,可以将本地配置文件与容器内的文件绑定,实现动态修改。
示例:自定义欢迎页面
-
在本地创建目录
my-nginx-conf
,并添加自定义的nginx.conf
文件:worker_processes auto; events { worker_connections 1024; } http { server { listen 80; location / { root /usr/share/nginx/html; index index.html; } } }
-
重新运行容器,挂载配置文件与静态资源:
docker run -d \ -p 80:80 \ -v $PWD/my-nginx-conf/nginx.conf:/etc/nginx/nginx.conf \ -v $PWD/my-html:/usr/share/nginx/html \ --name my-nginx \ nginx
$PWD
表示当前目录路径。-v
参数将本地目录挂载到容器中,实现配置与文件的实时同步。
-
在
my-html
目录下创建index.html
,输入自定义内容后,刷新浏览器即可看到效果。
进阶技巧:Docker Compose 简化部署
对于复杂项目,Docker Compose 可以通过 YAML 文件管理多容器应用。例如,创建 docker-compose.yml
:
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./html:/usr/share/nginx/html
restart: always
执行以下命令启动服务:
docker-compose up -d
常见问题与解决
问题 1:端口已被占用
若提示 port is already allocated
,可尝试:
- 修改
-p
参数中的宿主机端口(例如-p 8080:80
)。 - 终止占用端口的进程(Linux 命令:
sudo kill -9 $(lsof -t -i:80)
)。
问题 2:容器停止后无法访问
检查容器状态:
docker ps -a
若容器已退出,可尝试:
docker restart my-nginx
结论
通过本文,读者已掌握 Docker 安装 Nginx 的核心流程:从环境搭建到容器运行,再到配置修改与故障排查。Docker 的容器化技术不仅简化了开发环境的管理,还为团队协作与持续集成提供了标准化的解决方案。
对于希望深入学习的开发者,建议进一步探索以下方向:
- Dockerfile 自定义镜像
- 使用 Traefik 等工具管理反向代理
- 结合 Kubernetes 实现容器编排
通过实践与探索,Docker 与 Nginx 的组合将成为高效开发与部署的得力工具。