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 文件本身要当重要资料备份,它丢了,整组服务是怎么拼起来的就没人能完整说清,重建全靠猜。
- 点赞
- 收藏
- 关注作者
评论(0)