学习 Docker 最好的方式就是亲手部署一个项目。
相比 WordPress,静态网站没有数据库依赖,结构更加简单,非常适合 Docker 初学者练习。
在这一节,我们将使用 Docker 快速部署一个 Nginx 静态网站,并了解如何将本地网页映射到容器中。
为什么选择 Nginx?
Nginx 是目前最流行的 Web 服务器之一,具有以下优点:
- 轻量级,占用资源低
- 性能优秀,能够处理大量并发请求
- 配置简单,学习成本低
- 支持静态资源、反向代理、负载均衡等功能
无论是个人博客、企业官网,还是 Vue、React、Next.js 打包后的前端项目,都可以通过 Nginx 进行部署。
Docker 官方也提供了长期维护的 Nginx 镜像,非常适合学习和生产环境使用。
第一步:准备网站目录
首先创建一个项目目录:
mkdir nginx-demo
cd nginx-demo
创建网站文件目录:
mkdir html
目录结构如下:
nginx-demo/
├── html/
└── docker-compose.yml
接下来,在 html 目录中新建一个 index.html 文件。
例如:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>Docker Nginx Demo</title>
</head>
<body>
<h1>Docker 部署成功!</h1>
<p>如果你看到这个页面,说明 Nginx 已经正常运行。</p>
</body>
</html>
当然,你也可以将自己的博客首页、个人主页或前端项目打包后的文件放入 html 目录。
第二步:创建 docker-compose.yml
在项目根目录创建:
docker-compose.yml
内容如下:
services:
nginx:
image: nginx:latest
container_name: nginx-demo
restart: unless-stopped
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html:ro
networks:
- nginx-network
networks:
nginx-network:
整个配置非常简单,但已经包含了生产环境常见的几个配置项。
配置说明
image
image: nginx:latest
指定使用 Docker Hub 官方最新版本的 Nginx 镜像。
ports
ports:
- "80:80"
表示:
服务器:
80
对应容器:
80
浏览器访问:
http://服务器IP
即可打开网站。
如果本机已经占用了 80 端口,可以修改为:
ports:
- "8080:80"
然后访问:
http://localhost:8080
volumes
这一项非常重要。
volumes:
- ./html:/usr/share/nginx/html:ro
表示:
把本地:
html
目录映射到容器:
/usr/share/nginx/html
这样:
修改本地 HTML 文件后,容器会立即读取新的内容,无需重新构建镜像。
后面的:
:ro
表示:
Read Only(只读)
容器只能读取文件,不能修改本地内容。
生产环境建议开启。
restart
restart: unless-stopped
作用:
服务器重启以后:
Docker 会自动恢复运行。
不用每次手动启动。
第三步:启动容器
执行:
docker compose up -d
第一次运行时:
Docker 会自动下载官方 Nginx 镜像。
下载完成以后:
查看容器:
docker ps
如果看到:
nginx-demo
状态:
Up
说明运行成功。
第四步:访问网站
浏览器访问:
如果本机:
http://localhost
或者:
http://localhost:8080
如果部署到 VPS:
http://你的服务器IP
即可看到刚才创建的页面。
如果修改:
html/index.html
刷新浏览器即可看到最新内容。
整个过程不需要重新启动容器。
部署 Vue、React 项目
很多前端项目最终都会生成:
dist/
或者:
build/
目录。
例如:
Vue:
npm run build
React:
npm run build
然后:
把:
dist
里面所有文件复制到:
html
目录。
重新刷新浏览器。
你的整个前端项目就已经部署完成。
因此:
Docker + Nginx
也是目前部署:
- Vue
- React
- Angular
- Vite
- Next.js(静态导出)
最常见的方法。
查看容器日志
如果网站打不开。
第一步建议查看日志。
执行:
docker logs nginx-demo
或者:
docker compose logs -f
可以看到:
- 启动日志
- 错误日志
- 请求日志
这是排查问题最常用的方法。
进入容器
如果需要查看容器内部文件。
执行:
docker exec -it nginx-demo bash
有些轻量版镜像没有安装 Bash。
可以改成:
docker exec -it nginx-demo sh
进入后:
查看网站目录:
cd /usr/share/nginx/html
ls
确认文件是否已经成功挂载。
实际项目建议
如果准备正式部署网站,建议进一步优化:
- 不要直接使用
latest标签,而是固定镜像版本,例如nginx:1.28-alpine,避免镜像更新导致兼容性问题。 - 网站前面增加 Nginx 反向代理或 CDN(如 Cloudflare),提高访问速度并增强安全性。
- 配置 HTTPS(推荐 Let’s Encrypt 免费证书)。
- 将静态资源启用 Gzip 或 Brotli 压缩,减少传输体积。
- 为图片、CSS、JavaScript 设置合理的缓存策略,提高页面加载速度。
- 定期更新 Nginx 镜像,并做好网站文件和配置备份。
小结
通过这个示例,你已经学会了 Docker 部署静态网站最核心的几个知识点:
- 使用官方 Nginx 镜像
- 编写
docker-compose.yml - 映射端口
- 挂载本地目录(Volume)
- 查看容器日志
- 进入容器排查问题
掌握这些内容后,你已经能够部署绝大多数静态网站和前端项目。后续再结合 Dockerfile、反向代理和 HTTPS 配置,就可以搭建一个更加完整、稳定的生产环境。