Docker Compose 入门 一个文件管好一组容器

举报
yd_218239968 发表于 2026/11/08 09:53:05 2026/11/08
【摘要】 一个网站很少只有一个容器,往往是程序本体加数据库再加缓存。用 docker run 一条条起,命令长、参数杂,起错顺序还互相连不上。Docker Compose 的做法是把这组容器的构成写进一个文件,一条命令整组拉起、一条命令整组停掉。本文讲清这份文件怎么写、日常四条命令怎么用,以及三条不能碰的红线。一个网站跑起来,通常不是一个容器能搞定的:程序本体一个、数据库一个、缓存可能还要一个。用最原...

一个网站很少只有一个容器,往往是程序本体加数据库再加缓存。用 docker run 一条条起,命令长、参数杂,起错顺序还互相连不上。Docker Compose 的做法是把这组容器的构成写进一个文件,一条命令整组拉起、一条命令整组停掉。本文讲清这份文件怎么写、日常四条命令怎么用,以及三条不能碰的红线。

一个网站跑起来,通常不是一个容器能搞定的:程序本体一个、数据库一个、缓存可能还要一个。用最原始的办法,你得 docker run 三次,每次带一长串参数,哪个端口映射哪个目录写错一位就起不来;更麻烦的是顺序,程序要连数据库,数据库还没起好它就直接报错退出。下次迁移或者重装,又要把这三条命令从头敲一遍。容器一多,这种手工活就成了负担。
Docker Compose 就是来收这个摊子的。它让你把一组容器的构成写进一份叫 docker-compose.yml 的文件里:每个服务用哪个镜像、映射哪个端口、数据存到哪里、谁先谁后,全是白纸黑字的声明。写完之后,docker compose up -d 一条命令,整组按声明拉起;docker compose down 一条命令,整组停掉删除。这份文件既是说明书,又是遥控器,换台机器把文件拷过去,up 一次就能原样复活整组服务。
这份文件怎么读,拿最常见的网站加数据库举例。services 下面并列着服务名,比如 web 和 db。每个服务底下几行固定套路:image 是镜像名;ports 是端口映射,冒号左边是宿主机端口、右边是容器端口;volumes 是数据卷,把容器里的数据目录挂到宿主机上存着;environment 写环境变量,数据库的账号密码就放这里;depends_on 声明依赖,web 写上依赖 db,Compose 就会先起数据库再起 web。还有一条要专门提醒:这份文件是 YAML 格式,层级全靠空格缩进对齐,错一格就直接报错,新手翻车十有八九翻在这里,改完先检查缩进再运行。
日常操作其实只有四条命令打转。docker compose up -d 在后台拉起整组,中途改了文件,再执行一次它只会重建改动的那个服务,没改的碰都不碰。docker compose ps 看这组容器都在不在跑、端口对不对。docker compose logs -f 后面跟服务名,实时追某个服务的日志,排故障全靠它。docker compose restart 后面跟服务名,只重启其中一个,不惊动其他服务。把这四条和文件放一起记,Compose 就算入门了。
最后说三条红线。第一,数据库密码这类敏感信息不要明文写死在 yml 里,单独放一个 .env 文件再引用,这样 yml 拿去分享或者存进仓库也不会泄密。第二,down 命令后面不要乱加 -v,那个参数会连数据卷一起删除,数据库的数据会真没了,排故障时手一抖就是事故。第三,这份 yml 文件本身要当重要资料备份,它丢了,整组服务是怎么拼起来的就没人能完整说清,重建全靠猜。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。