Docker Compose 多容器编排实战

Docker 入门(五):Docker Compose 编排多容器应用

当一个应用包含数据库、缓存、后端和前端等多个服务时,逐个执行 docker run 很快会变得难以维护。Docker Compose 使用一个 YAML 文件描述服务、网络、端口、环境变量和数据卷,让整套环境可以一次启动和停止。

常用生命周期命令

compose.yamldocker-compose.yml 所在目录执行:

bash 复制代码
docker compose up -d       # 创建并后台启动
docker compose logs -f     # 查看实时日志
docker compose stop        # 停止容器,保留容器
docker compose start       # 启动已停止的容器
docker compose down        # 停止并删除容器、网络

新版 Docker 推荐使用 docker compose 子命令;旧环境也可能使用独立的 docker-compose 命令。

Compose 文件核心字段

  • services:定义应用服务。
  • image:使用已有镜像;build:从 Dockerfile 构建镜像。
  • command:覆盖镜像默认命令。
  • container_name:指定容器名称,团队协作时应谨慎使用以避免重名。
  • ports:将宿主机端口映射到容器端口。
  • depends_on:声明启动顺序,不代表依赖服务已经真正就绪。
  • environment:传入环境变量,敏感值应使用外部密钥管理。
  • expose:只在 Compose 网络内声明服务端口,不发布到宿主机。
  • restart:配置容器异常退出后的重启策略。
  • volumes:挂载命名卷或宿主机目录,持久化数据和配置。
  • networks:定义服务之间的通信网络。
  • working_dir:设置容器内的工作目录。

一个简单示例

yaml 复制代码
services:
  web:
    image: nginx:1.27-alpine
    ports:
      - "8080:80"
    depends_on:
      - api
    networks: [app]

  api:
    build: ./api
    environment:
      DB_HOST: db
    networks: [app]

  db:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: change-me
    volumes:
      - pgdata:/var/lib/postgresql/data
    networks: [app]

volumes:
  pgdata:

networks:
  app:

在同一个 Compose 网络中,服务可以直接使用服务名互相访问,例如 API 通过 db:5432 连接数据库。生产环境不要把示例密码直接提交到代码仓库,应改用 .env、Secrets 或外部配置中心。

Portainer:可选的图形化管理

Portainer 可以通过 Web 界面查看容器、镜像、网络和卷,适合学习和日常运维。部署时仍要为管理端设置强密码,并限制访问来源。

小结

Compose 的价值在于把多容器环境声明式地保存下来。掌握服务、网络、卷、端口和环境变量后,就可以用同一份配置复现开发环境,并进一步接入 CI/CD。

相关推荐
姚不倒1 小时前
负载均衡架构设计:F5 ↔ Nginx/HAProxy ↔ Keepalived 全链路映射
运维·网络·nginx
好评1241 小时前
【Linux】应用层自定义协议与序列化
linux·运维·网络
IT大白鼠1 小时前
Kubernetes 核心资源ReplicaSet 控制器详解
云原生·容器·kubernetes
fengyehongWorld2 小时前
Linux caddy的安装与配置
linux·运维·服务器
2401_862880822 小时前
Linux应用层开发 --- HTTP
linux·运维·http
可爱系程序猿2 小时前
libcrypto-3-x64.dll 加载失败排查:OpenSSL 3 版本、PATH 顺序与 x64 依赖如何对应
linux·运维·服务器·程序人生·电脑
zbyyd2 小时前
Linux 网络编程:IO 多路复用
linux·运维·c语言·网络
fengyehongWorld2 小时前
Linux 域名申请与DNS解析
linux·运维·服务器
CounterGlew5112 小时前
Vscode通过ssh链接autodl云服务器并配置codex
运维·服务器·vscode