我有几个由经典Docker命令启动的运行容器。这些容器使用的是Docker网络,也是手工创建的#34;
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来运行这些容器,因为它更容易管理。
是否可以将这些容器迁移到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:
- [...]
答案 0 :(得分:5)
要重新使用现有网络,您可以使用
networks:
default:
external:
name: simple-network
要重新使用卷,它取决于它们的卷类型。如果它们是命名卷,您可以执行类似的操作:
volumes:
data:
external:
name: the_name_of_the_volume
然后,您可以在服务中使用volumes: [data]
来使用它。
如果它们是主机卷,那么它非常简单,只需使用相同的配置。
如果它们是未命名的卷,则可以将卷ID用作外部卷(与使用命名卷的方式相同)。
不可能重新使用容器。您可以让Compose接管由docker创建的容器,但是他们需要在它们上面使用正确的labels
。查找标签的最简单方法是docker inspect
通过撰写创建的容器来查看键/值。由于您无论如何都必须重新创建容器以应用标签,因此可能更容易阻止它们并up
撰写。
答案 1 :(得分:1)
我相信撰写的目的是运行多容器应用程序。虽然你可能会得到类似外观的设置,但你似乎不太可能在docker compose环境中拉出正在运行的docker容器。
答案 2 :(得分:1)
更新为dnephin's示例的一部分,以重用命名卷,以防它有助于下一个人:
在docker-compose.yml的“卷”部分中,您似乎不再使用name: name_of_the_volume
,只需使用名称来定义它们,例如
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是让我使用
引用我的应用程序数据库的 app-db:27017
因为compose包括列出的服务的名称解析器,并且端口已暴露给此compose启动的所有服务。