多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Docker Compose 入门:部署 Nginx,读懂端口与数据挂载

Docker Compose 入门:部署 Nginx,读懂端口与数据挂载 Docker Compose 把镜像、端口、挂载和启动策略放进一份 YAML 文件。本文用一个静态页面作为第一个项目从准备文件、启动服务到访问验证、备份和清理逐步操作适合已经能连接 Docker、但还不清楚 Compose 配置含义的新手。文章目录1. 准备环境先确认 daemon 可用2. 建立项目两个文件就够用3. 编写 compose.yaml逐项理解配置3.1 端口左边是宿主机右边是容器3.2 挂载网页文件留在宿主机4. 检查、启动然后真的打开网页项目运行在云服务器上浏览器在哪里打开5. 修改网页、停止项目与保留文件6. 最容易卡住的地方1. 准备环境先确认 daemon 可用命令面向 Linux Bash示例为 Ubuntu 24.04 LTS 上的 Docker Engine 与当前 Compose 插件。Windows 用户可以在 Docker Desktop 对应的 Linux 环境中练习不要把下面的 Bash 文件创建命令直接粘贴到 PowerShell。先运行dockerinfodockercompose version第一条需要能返回 Server 信息第二条应显示 Compose 版本。本文使用当前的docker compose命令形式不依赖旧的独立docker-compose命令。Linux 主机已经通过 Docker 官方软件仓库安装 Engine、但缺少 Compose 插件时可按同一仓库的说明安装sudoapt-getupdatesudoapt-getinstalldocker-compose-plugin这不是“任意 Ubuntu 都直接可用”的独立安装步骤。仓库尚未配置时先完成 Docker 官方 Compose 安装说明 中的前置条件。2. 建立项目两个文件就够用在自己的教学目录执行已有同名项目时换一个目录避免覆盖文件mkdir-pcompose-demo/sitecdcompose-demo项目最终应包含compose-demo/ ├── compose.yaml └── site/ └── index.html图 1Compose 文件放在项目根目录方便终端与编辑器定位。图中的应用还包含调试和源码文件本篇只需要compose.yaml与site/index.html无需生成整套应用脚手架。图源Microsoft / VS Code Compose 文档© Microsoft CorporationCC BY 3.0 US原图未修改。在site/index.html中保存以下内容!doctypehtmlhtmllangzh-CNheadmetacharsetutf-8metanameviewportcontentwidthdevice-width, initial-scale1titleCompose Demo/title/headbodyh1Compose Demo OK/h1p这个页面来自宿主机的 site/index.html。/p/body/html3. 编写 compose.yaml逐项理解配置在项目根目录保存name:compose-demoservices:web:image:nginx:1.28-alpineports:-127.0.0.1:8080:80volumes:-type:bindsource:./sitetarget:/usr/share/nginx/htmlread_only:truebind:create_host_path:falserestart:unless-stoppedlogging:driver:json-fileoptions:max-size:5mmax-file:3这份配置只有一个服务web。image指定镜像ports发布访问入口volumes把本机文件提供给容器logging为这一容器的日志设置轮转避免日志文件持续增长。Compose 服务配置nginx:1.28-alpine指定版本系列标签仍可能更新。需要严格复现时在验证兼容性后记录并固定镜像摘要也就是对应镜像内容的 digest版本标签不等于永久不变的镜像内容。图 2打开配置文件将鼠标移到image字段查看说明。截图用来定位编辑器功能本篇直接使用上面的 YAML。当前 Compose 不需要旧示例中的version: 3.4它也不会锁定实际解析规则。Compose 的 version 字段说明图源Microsoft / VS Code 容器文档© Microsoft CorporationCC BY 3.0 US原图未修改。3.1 端口左边是宿主机右边是容器127.0.0.1:8080:80表示宿主机回环地址的 8080 转发到容器 80。浏览器访问 8080Nginx 仍在容器内监听 80。图 38080 已占用时换成127.0.0.1:8081:80访问地址也要同步改为 8081。默认面向本机练习不需要为了看到页面就开放公网端口。Docker 端口发布说明3.2 挂载网页文件留在宿主机本篇采用 bind mount意思是把主机目录挂到容器中的指定位置。read_only: true阻止容器通过这个挂载写回网页目录主机上的编辑器仍能修改网页。create_host_path: false让缺失目录直接报错避免路径拼错后自动生成空目录。绑定挂载还会遮住目标目录原有内容因此site/index.html必须存在且可读。绑定挂载说明它与 Docker 管理的 named volume 不同。网页适合保留为本机文件数据库数据则应按数据库官方方案选择卷和备份方式。4. 检查、启动然后真的打开网页在compose.yaml所在目录执行dockercompose config-qdockercompose pulldockercompose up-ddockercomposepsdockercompose logs--tail50webconfig -q检查解析后的配置不输出完整内容没有错误并返回成功退出状态才算通过。它不能证明镜像已拉取、端口可用或程序能启动。Compose 配置检查pull获取镜像up按配置创建并启动项目-d表示后台运行。首次拉取失败时记录原始错误分别检查网络、镜像名称和仓库响应不直接关闭证书校验。图 4在 VS Code 的容器视图找到项目分组右键可查看 Compose Logs。命令行ps负责确认状态日志负责查看程序信息两者都不能替代实际网页访问。图源Microsoft / VS Code 容器文档© Microsoft CorporationCC BY 3.0 US原图未修改。在 Docker 主机上验证curl--fail--show-error http://127.0.0.1:8080/然后在同一台主机的浏览器打开http://127.0.0.1:8080/。验收目标是web处于运行状态HTTP 请求成功页面显示Compose Demo OK日志没有对应的启动错误。图 5Container Explorer 中右键目标容器选择 Open in Browser若有多个发布端口核对所选端口。界面中的项目名不影响定位方法。图源Microsoft / VS Code Compose 文档© Microsoft CorporationCC BY 3.0 US原图未修改。项目运行在云服务器上浏览器在哪里打开云服务器上的localhost属于服务器。可以用自己的 SSH 连接转发回环端口在本地电脑终端执行ssh-N-L127.0.0.1:18080:127.0.0.1:8080 用户名服务器地址将用户名和服务器地址换成已验证可登录的值保留这个连接再在本地打开http://127.0.0.1:18080/。-N不执行远程命令-L建立本地端口转发本地 18080 需要空闲。图 6Remote-SSH 连接后可在 Ports 面板转发远端 8080再使用面板给出的本地访问地址。SSH 必须允许转发回环访问失败时先检查服务再检查转发状态。Remote-SSH 端口转发图源Microsoft / 同上文档© Microsoft CorporationCC BY 3.0 US原图未修改。5. 修改网页、停止项目与保留文件在宿主机把index.html的标题改成Compose Demo Updated刷新浏览器确认变化必要时强制刷新以排除浏览器缓存。此时网页文件通过挂载提供不需要重新构建镜像。stop停止容器并保留项目容器之后可startdown移除这个项目的容器和默认网络。执行前先确认自己位于教学项目目录dockercompose stopdockercompose start练习结束后可执行docker compose down。主机site目录仍然保留再次up -d后应能访问更新后的页面。不要给清理命令随意添加--volumes它会影响项目的卷。Compose down 说明备份本例时保存compose.yaml与site即可在项目目录执行tar-czf../compose-demo-backup.tar.gz compose.yaml site实际数据库项目要采用一致性备份不能把本篇静态文件打包方式直接当成数据库备份方案。6. 最容易卡住的地方现象优先检查no configuration file provided是否位于项目目录可显式指定-f compose.yaml配置验证通过但启动失败验证只解析配置继续查端口、镜像与日志页面 403 / 404主机文件存在且可读、挂载路径正确、访问路径正确修改 ports 后地址没变执行up -d应用配置不只restart本地网页能开远程打不开核对 daemon 所在主机、回环绑定与 SSH 转发下一个项目可以在这份基础上增加应用服务与数据库。只有需要持续在线、定时运行或远程共享时再考虑云端部署并保留配置、备份和费用记录。
返回列表