将现有Docker容器迁移到Docker Compose

Ced*_*ult 7 docker docker-compose

我有几个由经典Docker命令启动的运行容器.这些容器使用的是Docker网络,也是"手动"创建的:

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
Run Code Online (Sandbox Code Playgroud)

我想使用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: 
    - [...]
Run Code Online (Sandbox Code Playgroud)

dne*_*hin 5

要重新使用现有网络,您可以使用

networks:
  default:
    external:
      name: simple-network
Run Code Online (Sandbox Code Playgroud)

要重新使用卷,它取决于它们的卷类型.如果它们是命名卷,您可以执行类似的操作:

volumes:
  data:
    external:
      name: the_name_of_the_volume
Run Code Online (Sandbox Code Playgroud)

然后volumes: [data],您将在服务中使用它.

如果它们是主机卷,那么它非常简单,只需使用相同的配置即可.

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

不可能重新使用容器.您可以让Compose接管由docker创建的容器,但是他们需要正确labels使用它们.查找标签的最简单方法是docker inspect通过compose创建的容器来查看键/值.由于您无论如何都必须重新创建容器以应用标签,因此可能更容易停止它们并up撰写.