不喜欢广告? 无广告 今天

停止编写 docker run 命令——改用 Docker Compose

发布日期

大多数 docker run 命令会变成难以维护的参数堆叠。本指南将展示如何将 docker run 转换为 docker compose——并附带参数参考表、实际转换示例以及一个免费的转换工具。

停止编写docker run命令——改用Docker Compose
广告 移除?

每个Docker工作流都从相同的方式开始: docker run一个标志,两个标志——可以管理。但当你运行一个容器,包含端口、环境变量、卷、重启策略和自定义网络时,这条命令会达到400个字符,没有人能记住,也无法通过版本控制或在没有Slack线程满是羞愧的情况下交给队友。

Docker Compose是解决方案。一个YAML文件替代了整个命令——并且你可以将其提交到Git中。

为什么docker run无法扩展

以下是一个典型的 docker run Node.js应用的命令:

docker run -d \
  --name my-app \
  -p 3000:3000 \
  -e NODE_ENV=production \
  -e DATABASE_URL=postgres://user:pass@db:5432/mydb \
  -v ./data:/app/data \
  --network app-network \
  --restart always \
  my-app:latest

这可以工作。只一次。然后你关闭终端,三天后打开一个新的终端,却完全不知道你用了哪些标志。没有东西可以 git diff。没有东西可以分享给新员工。无法验证预发布环境与生产环境是否一致。

Docker Compose能为你提供什么

Docker Compose将之前那个 docker run 命令中所有内容都放入一个名为 docker-compose.yml的YAML文件中。

  • 该文件位于你的代码仓库中,与代码并列存放
  • 通过一个单一命令运行 docker compose up -d
  • 在每台机器和每个环境中运行效果完全一致
  • 可扩展到多服务设置(应用+数据库+缓存),无需复杂的标志操作

如何将docker run命令转换为Docker Compose

上面那个命令现在变成这样 docker-compose.yml:

version: "3.9"
services:
  my-app:
    image: my-app:latest
    container_name: my-app
    ports:
      - "3000:3000"
    environment:
      NODE_ENV: production
      DATABASE_URL: postgres://user:pass@db:5432/mydb
    volumes:
      - ./data:/app/data
    networks:
      - app-network
    restart: always

networks:
  app-network:

相同行为。但现在它可读、可提交、可重现。

启动它:

docker compose up -d

停止它:

docker compose down

docker run标志转换为docker-compose.yml键值

最常遇到标志的参考列表:

docker run标志docker-compose.yml键值例子
-p 8080:80ports:- "8080:80"
-e FOO=barenvironment:FOO: bar
-v ./data:/datavolumes:- ./data:/data
--network mynetnetworks:mynet
--restart alwaysrestart:always
--name mycontainercontainer_name:mycontainer
--memory 512mmem_limit:512m
--cpus 1.5deploy.resources.limits.cpuscpus: "1.5"
-d使用 -d 运行时标志docker compose up -d

自动转换

如果你有一个很长的现有 docker run 命令——特别是从README或一个CI脚本继承而来的,该脚本已经两年未被任何人修改——你不需要手动映射每个标志。使用 Docker Run 转 Compose 工具:将命令粘贴进去,得到一个有效的 docker-compose.yml 输出。

它能处理端口、环境变量、卷、网络、重启策略等。在迁移旧的单行命令时非常有用,避免在转换过程中引入拼写错误。

如果你在Compose文件中配置资源限制, Docker 容器资源计算器 将帮助你根据工作负载选择合理的内存和CPU值——在你提交那些凭空想象的数值之前。

顺便检查Dockerfile

一旦你的Compose文件整理完毕,检查它所构建的Dockerfile。未锁定的基础镜像、缺失的 WORKDIR、冗余的 RUN 分层——这些很容易被忽略,而且后期调试会很麻烦。通过 Dockerfile检查工具 可以在这些问题变成生产问题之前就发现它们。

想要享受无广告的体验吗? 立即无广告

安装我们的扩展

将 IO 工具添加到您最喜欢的浏览器,以便即时访问和更快地搜索

添加 Chrome 扩展程序 添加 边缘延伸 添加 Firefox 扩展 添加 Opera 扩展

记分板已到达!

记分板 是一种有趣的跟踪您游戏的方式,所有数据都存储在您的浏览器中。更多功能即将推出!

广告 移除?
广告 移除?
广告 移除?

新闻角 包含技术亮点

参与其中

帮助我们继续提供有价值的免费工具

给我买杯咖啡
广告 移除?