一个docker-compose.yml管全部服务——Docker Compose进阶编排实战

一个YAML文件管全部容器,依赖顺序/环境变量/网络通信全编排
发布于
1

上一篇Docker入门讲了docker run跑单个容器。但实际场景里一个应用往往需要多个容器配合——比如WordPress需要MySQL容器、Nextcloud需要Redis+数据库。Docker Compose就是用一个YAML文件编排多容器协同工作的工具。

Compose文件结构

一个典型的docker-compose.yml:

version: "3"
services:
  app:
    image: nginx:alpine
    ports: ["80:80"]
    volumes: ["./html:/usr/share/nginx/html"]
    restart: unless-stopped
  db:
    image: mariadb:latest
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
    volumes: ["./db:/var/lib/mysql"]

services定义多个服务(容器),docker compose up -d全部启动,docker compose down全部停止删除。volumes把容器目录挂载到宿主机,数据持久化。

网络和依赖

Compose自动创建内部网络,容器之间用服务名互相访问(比如app容器里ping db就能连到数据库容器)。如果服务有启动顺序要求用depends_on:app容器依赖db先启动。但depends_on仅保证启动顺序,数据库ready还需要额外处理(wait-for-it脚本或healthcheck)。

环境变量管理

用.env文件统一管理敏感配置:

# .env
DB_PASSWORD=你的密码
APP_PORT=8080

# docker-compose.yml中引用
db:
  environment:
    MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}

常用命令

docker compose up -d启动、docker compose ps查看状态、docker compose logs -f查看日志、docker compose restart重启全部、docker compose pull拉取最新镜像、docker compose exec 服务名 bash进入容器内部。

管理多容器应用,Compose比一行行docker run优雅太多了。我在雨云(rain.jiyueip.com,优惠码admin01)上所有服务都用Compose管理,一个文件夹一个应用,备份就是把文件夹打包。

常见问题(FAQ)

Docker Compose和docker run有什么区别?
docker run跑单个容器,Compose用一个YAML文件编排多个容器协同工作(如WordPress+MySQL)。docker compose up -d一条命令启动所有服务。适合管理多容器应用。
Docker Compose怎么让容器之间有启动顺序?
用depends_on:app依赖db先启动。但depends_on只控制启动顺序不保证数据库ready。需要额外用wait-for-it脚本或healthcheck确保数据库真正可用了再启动应用容器。

本文由作者原创/授权发布于极跃圈(jiyueip.com)未经许可,禁止转载。题图来自Unsplash,基于CC0协议。

声明:极跃圈(JIYUEIP.com)内网友所发表的所有内容及言论仅代表其本人,并不反映任何极跃圈(JIYUEIP.com)之意见及观点。

0 / 600
0 讨论
热门最新
总结
暂无总结

暂无数据