毫不费力地管理一组 docker 个容器

Managing a group of docker containers without the sweat

我正在使用 bash 脚本启动一个带有两个 docker 容器的虚拟网络。这感觉史前。是否有某种工具可以上下旋转这样一个整体并显示其当前状态,还是必须自己处理?

docker-compose 的情况下,docker 文档中不清楚 docker-compose 是独立的还是绑定到 swarm,以及 compose 定义文件的权威示例,使用启动和停止集成的命令会非常有帮助。

例如这是 bash 脚本对 define/start 两个相互关联的容器的应用程序所做的事情,不用说这个脚本除了启动一次之外无助于管理其生命周期。

docker network create --driver bridge FooAppNet
docker run --rm --net=FooAppNet --name=component1 -p 9000:9000 component1-image
docker run --rm --net=FooAppNet --name=component2 component2-image

同样在此示例中,容器 component1 向主机公开端口 9000,其包含的应用程序已在其配置文件中硬连线,以按其名称使用 component2 的服务(以下常见的 docker 网络实践依赖于 docker networks' internal DNS)。

对于您给出的示例,以下 Docker Compose 文件将为您提供所需的内容:

component1:
  image: component1-image
  net: FooAppNet
  container_name: component1
  ports:
    - "9000:9000"
component2:
  image: component2-image
  net: FooAppNet
  container_name: component2

如果您将其存储在 docker-compose.yml 文件中,然后 运行 docker-compose up -d 它将 create/start/restart 您的容器并将它们分配给您的 FooAppNet 网络。

-d 标志 运行 使容器处于分离模式,并防止在启动容器时将日志输出打印到终端 window。您仍然可以像使用任何其他容器一样通过 docker logs -f ... 获取他们的日志。

然后您可以使用 docker-compose downdocker-compose restart 等来控制集成的生命周期。顺便说一句,using variables 可以使定义文件更加灵活。

请参阅下面关于使用 docker compose 自动启动的网络的评论。

TL;DR ― 请参阅 https://docs.docker.com/compose/networking/ 的开头部分以获取解决方案。它会引导您完成整个必要的配置。运行良好,需要掌握各种 docker-compose 命令行选项才能高效使用它。