正在加载,请稍候…

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

学习如何将 docker run 命令转换为 docker-compose.yml 文件,涵盖卷、端口、环境变量等配置。

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

从 docker run 到 Docker Compose

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。无需使用带有许多标志的长 docker run 命令,您可以在 docker-compose.yml 文件中描述服务,并通过简单的命令管理它们。

本指南展示了如何将 docker run 命令转换为 Docker Compose 格式。

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

基本转换示例

一个典型的 docker run 命令:

docker run -d \
  --name my-web-app \
  -p 8080:80 \
  -e NODE_ENV=production \
  -e DATABASE_URL=postgres://localhost:5432/mydb \
  -v /host/data:/app/data \
  --restart unless-stopped \
  my-web-app:latest

等效的 docker-compose.yml

version: '3.8'
services:
  my-web-app:
    image: my-web-app:latest
    container_name: my-web-app
    ports:
      - "8080:80"
    environment:
      - NODE_ENV=production
      - DATABASE_URL=postgres://localhost:5432/mydb
    volumes:
      - /host/data:/app/data
    restart: unless-stopped

将 docker run 标志映射到 Compose

docker run 标志 Compose 键 示例
--name container_name container_name: myapp
-p 8080:80 ports - "8080:80"
-e VAR=val environment - VAR=val
-v /host:/container volumes - /host:/container
--restart restart restart: unless-stopped
--network networks networks: [mynet]
--link depends_on depends_on: [db]
--memory 512m mem_limit mem_limit: 512m
--cpus 0.5 cpus cpus: 0.5
--health-cmd healthcheck.test test: ["CMD", "curl", "-f", "http://localhost"]
--user user user: "1000:1000"
--entrypoint entrypoint entrypoint: /app/start.sh
--command command command: npm start

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

多服务示例:Web + 数据库

version: '3.8'

services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgres://user:pass@db:5432/myapp
    depends_on:
      db:
        condition: service_healthy
    restart: unless-stopped

  db:
    image: postgres:15
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: myapp
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U user"]
      interval: 5s
      timeout: 5s
      retries: 5
    restart: unless-stopped

volumes:
  postgres_data:

Docker Compose 命令

# 启动所有服务(后台运行)
docker compose up -d

# 停止所有服务
docker compose down

# 停止并删除卷
docker compose down -v

# 查看日志
docker compose logs -f

# 查看特定服务的日志
docker compose logs -f web

# 在运行中的容器中执行命令
docker compose exec web bash

# 重新构建镜像
docker compose build

# 扩展服务
docker compose up -d --scale worker=3

# 查看运行中的服务
docker compose ps

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

Compose 中的环境变量

使用 .env 文件(Compose 自动加载)来管理密钥和环境特定配置:

# .env 文件
POSTGRES_PASSWORD=secretpassword
NODE_ENV=production
API_KEY=abc123
# docker-compose.yml
services:
  web:
    environment:
      - NODE_ENV=${NODE_ENV}
      - API_KEY=${API_KEY}
  db:
    environment:
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}

.env 文件应添加到 .gitignore 中。可以共享一个包含占位值的 .env.example 文件。

重启策略

策略 行为
no 从不重启(默认)
always 始终重启,包括 Docker 守护进程重启时
on-failure 仅在退出码非零时重启
unless-stopped 始终重启,除非手动停止

使用此工具

粘贴一个 docker run 命令,即可立即获得等效的 Docker Compose YAML。该工具会解析所有标志和选项,并生成格式正确的 Compose 服务定义。

-> 尝试 Docker Run 转 Compose 转换器