将现有的Docker容器迁移到Docker Compose

我有几个运行的容器是由经典的Docker命令启动的。 这些容器正在使用也是“手动”创build的Dockernetworking:

docker network create simple-network docker run -d \ --name docker-registry \ --net=simple-network \ -p 5000:5000 \ -v [...] \ registry:2.3.0 docker run -d \ --name docker-registry-web \ --net=simple-network \ -p 8080 \ -v [...] \ hyper/docker-registry-web docker run -d \ --name nginx \ --net=simple-network \ -p 80:80 \ -p 443:443 \ -v [...] \ nginx:1.9.8 

我想使用Docker Compose来运行这些容器,因为它会更容易pipe理。

是否有可能像下面那样将这些容器迁移到Docker Compose,或者只能使用新的容器来组合?

我希望在迁移过程中使用相同的卷。 停机时间不是问题。

泊坞窗,compose.yml

 version: '2' docker-registry: image: registry:2.3.0 ports: - "5000:5000" volumes: - [...] docker-registry-web: image: hyper/docker-registry-web expose: - "8080" volumes: - [...] nginx: image: nginx:1.9.8 ports: - "80:80" - "443:443" volumes: - [...] 

重新使用您可以使用的现有networking

 networks: default: external: name: simple-network 

要重新使用卷,这取决于它们是什么样的卷。 如果他们被命名为卷,你可以做类似的事情:

 volumes: data: external: name: the_name_of_the_volume 

然后,您可以在服务中使用volumes: [data]来使用它。

如果他们是主机卷,那么这很容易,只需使用相同的configuration。

如果它们是未命名的卷,则可以使用卷ID作为外部卷(与使用命名卷相同的方式)。

重新使用容器是不可能的。 你可以让Compose接pipe由docker创build的容器,但是他们需要在它们上面有正确的labels 。 查找标签的最简单方法是通过docker inspect由compose创build的容器以查看键/值。 既然你不得不重新创build一个容器来应用标签,那么阻止它们就可能变得更容易。

我相信撰写的目的是运行多容器应用程序。 而您可能会得到类似的外观设置,但是您似乎不太可能在Docker撰写环境中实际拖放正在运行的Docker容器。