正在加载,请稍候…

将 docker run 转换为 docker-compose:实用指南

学习将 docker run 命令转换为 docker-compose.yml 文件,涵盖卷、端口、环境变量等关键概念,实现 Docker 容器编排。

将 docker run 转换为 docker-compose:实用指南

什么是 Docker Compose?

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个 YAML 配置文件(docker-compose.yml),你可以在一个地方配置所有应用的服务、网络和卷,然后使用单个命令 docker compose up 启动所有内容。

将 docker run 转换为 docker-compose:实用指南 插图

docker run 与 docker-compose.yml

在使用 Docker 时,你通常从手动构建 docker run 命令开始。随着应用程序变得越来越复杂,这些命令变得难以管理。Docker Compose 提供了一种声明式替代方案。

docker run 命令

docker run -d \
  --name postgres \
  -e POSTGRES_USER=myuser \
  -e POSTGRES_PASSWORD=mypassword \
  -e POSTGRES_DB=mydb \
  -p 5432:5432 \
  -v postgres_data:/var/lib/postgresql/data \
  --restart unless-stopped \
  postgres:15

等效的 docker-compose.yml

version: '3.8'
services:
  postgres:
    image: postgres:15
    container_name: postgres
    environment:
      POSTGRES_USER: myuser
      POSTGRES_PASSWORD: mypassword
      POSTGRES_DB: mydb
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data
    restart: unless-stopped

volumes:
  postgres_data:

关键 Docker Compose 概念

将 docker run 转换为 docker-compose:实用指南 插图

服务(Services)

应用程序中的每个容器都被定义为一个服务。服务可以相互依赖、共享网络,并通过服务名称进行通信。

网络(Networks)

默认情况下,Compose 会为你的应用创建一个单一网络。所有服务可以使用服务名称作为主机名进行通信。你可以定义多个网络来隔离服务。

卷(Volumes)

命名卷(Named volumes)在容器生命周期之外持久化数据。绑定挂载(Bind mounts)将主机目录映射到容器中,用于开发。

环境变量(Environment Variables)

可以内联定义、从 .env 文件加载,或通过主机环境传递。

将 docker run 转换为 docker-compose:实用指南 插图

多服务应用示例

一个完整的 Web 应用栈:

version: '3.8'

services:
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - app

  app:
    build: .
    environment:
      DATABASE_URL: postgresql://user:pass@db:5432/mydb
      REDIS_URL: redis://redis:6379
    depends_on:
      - db
      - redis

  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: pass
    volumes:
      - db_data:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine

volumes:
  db_data:

常用 docker run 标志及其 Compose 等效项

docker run 标志 Compose 键
-d (默认后台运行)
--name container_name
-e VAR=val environment: VAR: val
-p 80:80 ports: - "80:80"
-v vol:/path volumes: - vol:/path
--restart restart: unless-stopped
--network networks:
--link depends_on: (改用服务名称)

Docker Compose 命令

docker compose up -d          # 后台启动所有服务
docker compose down           # 停止并移除容器
docker compose logs -f        # 跟踪服务日志
docker compose ps             # 列出运行中的服务
docker compose exec app bash  # 进入服务 shell
docker compose build          # 重建服务镜像
docker compose pull           # 拉取最新镜像

使用 Docker Run 到 Compose 转换器

我们的工具:

  1. 粘贴 docker run 命令 — 处理所有常见标志
  2. 生成 docker-compose.yml — 正确的 YAML 结构
  3. 多命令支持 — 将多个 run 命令转换为完整的 compose 文件
  4. 网络推断 — 根据链接的容器建议网络配置
  5. 复制 YAML — 准备好保存为 docker-compose.yml

在从手动 Docker 命令迁移到托管 Compose 工作流、记录现有容器配置或与队友共享服务配置时使用它。