将现有Docker容器迁移到Docker Compose
我有几个由经典Docker命令启动的运行容器。这些容器使用的Docker网络也是“手工”创建的: 我想使用Docker Compose来运行这些容器,因为这样更易于管理 是否可以像下面那样将这些容器迁移到Docker Compose,或者只可以将Compose与新容器一起使用 我希望在此迁移期间使用相同的卷!停机不是问题 docker compose.yml将现有Docker容器迁移到Docker Compose,docker,docker-compose,Docker,Docker Compose,我有几个由经典Docker命令启动的运行容器。这些容器使用的Docker网络也是“手工”创建的: 我想使用Docker Compose来运行这些容器,因为这样更易于管理 是否可以像下面那样将这些容器迁移到Docker Compose,或者只可以将Compose与新容器一起使用 我希望在此迁移期间使用相同的卷!停机不是问题 docker compose.yml version: '2' docker-registry: image: registry:2.3.0 ports: -
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:
- [...]
我相信撰写的目的是运行多容器应用程序。尽管您可能会得到类似的设置,但您似乎不太可能在docker compose环境中实际拉动正在运行的docker容器。要重新使用您可以使用的现有网络
networks:
default:
external:
name: simple-network
要重用卷,这取决于卷的类型。如果它们是命名卷,则可以执行类似操作:
volumes:
data:
external:
name: the_name_of_the_volume
然后在服务中使用卷:[data]
如果它们是主机卷,那么就很容易了,只需使用相同的配置即可
如果它们是未命名卷,则可以将卷id用作外部卷(与使用命名卷的方式相同)
重复使用容器是不可能的。您可以让docker创建Compose接管容器,但它们需要有正确的标签。查找标签的最简单方法是docker检查由compose创建的容器,以查看键/值。由于您必须重新创建一个容器来应用标签,因此可能更容易停止它们并编写。更新重用命名卷的部分示例,以防对下一个人有所帮助:
看起来在docker-compose.yml的卷部分,您不应该再使用name:name\u of_卷
,只需使用名称定义它们,例如
volumes:
app-mongo-data:
external: true
app-mongo-config:
external: true
然后(在本例中)通过app mongo data
或app mongo config
在您的服务中引用它们,如下所示:
version:'3'
services:
app-db:
image: mongo:latest
expose:
- "27017"
volumes:
- app-mongo-data:/data/db
- app-mongo-config:/data/configdb
可能有助于解决这个问题的网络方面(尽管不是问什么):docker-compose.yml上面的行来自于允许我使用
appdb:27017
因为compose包含一个列表服务的名称解析程序,并且端口已向此compose启动的所有服务公开
有趣的问题。请注意,如果执行docker kill container1 container2…,停机时间将是最小的。。。;docker compose up-d
。然而,容器将与该方法不完全相同。
version:'3'
services:
app-db:
image: mongo:latest
expose:
- "27017"
volumes:
- app-mongo-data:/data/db
- app-mongo-config:/data/configdb