Docker compose/swarm 3: docker 文件路径、构建、容器名称、链接、迁移
Docker compose/swarm 3: docker file path , build, container name, links, migration
我有一个包含 docker-compose 文件的项目,想迁移到 V3,但是当使用
部署时
docker stack deploy --compose-file=docker-compose.yml vertx
它不理解构建路径、链接、容器名称...
我的文件位于此处
https://github.com/armdev/vertx-spring/blob/master/docker-compose.yml
version: '3'
services:
eureka-node:
image: eureka-node
build: ./eureka-node
container_name: eureka-node
ports:
- '8761:8761'
networks:
- vertx-network
postgres-node:
image: postgres-node
build: ./postgres-node
container_name: postgres-node
ports:
- '5432:5432'
networks:
- vertx-network
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: socnet
POSTGRES_DB: socnet
vertx-node:
image: vertx-node
build: ./vertx-node
container_name: vertx-node
links:
- postgres-node
- eureka-node
ports:
- '8585:8585'
networks:
- vertx-network
networks:
vertx-network:
driver: overlay
当我 运行 docker-compose 时,它正在工作,但是
堆栈未部署。
如何定义 docker 文件的路径?
docker stack deploy
仅适用于图像,不适用于构建。
这意味着您必须将图像推送到图像注册表(在构建过程中创建),稍后 docker stack deploy
将下载图像并执行它们。
here 您有一个 php 应用程序如何完成的示例。
您必须注意第 1、3 和 4 部分。
这些文章是关于 php,但可以轻松应用于任何其他语言。
swarm 模式 "docker service" 界面在管理容器的方式上有一些根本的区别。您不再像 "docker run" 那样直接 运行 容器,并且假定您将经常在分布式环境中执行此操作。
我将根据您列出的这些具体内容分解答案。
It does not understand build path, links, container names...
链接
link 选项已被弃用很长一段时间,以支持与 "docker network" 功能一起引入的网络服务发现功能。您不再需要指定特定的 links to/from 容器。相反,您只需要确保所有容器都在同一网络上,然后它们就可以通过容器名称或 "network alias"
发现彼此
docker-compose
会默认将所有容器放入同一个网络中,并将 compose 服务名称设置为别名。这意味着如果您有一个名为 'postgres-node' 的服务,您可以通过名称 'postgres-node'.
通过 dns 访问它
容器名称
"docker service" 界面允许您声明所需的状态。 "I want x number of identical services"。由于接口必须支持 x 个服务实例,因此不允许您选择特定的容器名称。相反,您可以选择服务名称。在 'docker stack deploy' 的情况下,将使用 docker-compose.yml 文件中服务键下定义的服务名称,但它还会将堆栈名称添加到服务名称之前。
在大多数情况下,我认为覆盖 docker-compose.yml 文件中的容器名称是不必要的,即使通过 docker-compose up
.[=17= 使用常规容器也是如此。 ]
如果您需要不同的名称用于网络服务发现,请添加不同的别名或使用您在使用 docker-compose
或 docker stack deploy
.
时获得的服务名称别名
构建路径
因为 swarm 模式被构建为一个分布式系统,所以在本地构建图像并不是 "docker stack deploy" 的本意。相反,您应该构建映像并将其推送到集群中所有节点都可以访问的注册表。
如果你使用单节点群 "cluster",你应该可以使用 docker-compose build
选项在本地构建镜像,然后使用 docker stack deploy
.
我有一个包含 docker-compose 文件的项目,想迁移到 V3,但是当使用
部署时docker stack deploy --compose-file=docker-compose.yml vertx
它不理解构建路径、链接、容器名称...
我的文件位于此处 https://github.com/armdev/vertx-spring/blob/master/docker-compose.yml
version: '3'
services:
eureka-node:
image: eureka-node
build: ./eureka-node
container_name: eureka-node
ports:
- '8761:8761'
networks:
- vertx-network
postgres-node:
image: postgres-node
build: ./postgres-node
container_name: postgres-node
ports:
- '5432:5432'
networks:
- vertx-network
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: socnet
POSTGRES_DB: socnet
vertx-node:
image: vertx-node
build: ./vertx-node
container_name: vertx-node
links:
- postgres-node
- eureka-node
ports:
- '8585:8585'
networks:
- vertx-network
networks:
vertx-network:
driver: overlay
当我 运行 docker-compose 时,它正在工作,但是 堆栈未部署。
如何定义 docker 文件的路径?
docker stack deploy
仅适用于图像,不适用于构建。
这意味着您必须将图像推送到图像注册表(在构建过程中创建),稍后 docker stack deploy
将下载图像并执行它们。
here 您有一个 php 应用程序如何完成的示例。 您必须注意第 1、3 和 4 部分。 这些文章是关于 php,但可以轻松应用于任何其他语言。
swarm 模式 "docker service" 界面在管理容器的方式上有一些根本的区别。您不再像 "docker run" 那样直接 运行 容器,并且假定您将经常在分布式环境中执行此操作。
我将根据您列出的这些具体内容分解答案。
It does not understand build path, links, container names...
链接
link 选项已被弃用很长一段时间,以支持与 "docker network" 功能一起引入的网络服务发现功能。您不再需要指定特定的 links to/from 容器。相反,您只需要确保所有容器都在同一网络上,然后它们就可以通过容器名称或 "network alias"
发现彼此docker-compose
会默认将所有容器放入同一个网络中,并将 compose 服务名称设置为别名。这意味着如果您有一个名为 'postgres-node' 的服务,您可以通过名称 'postgres-node'.
容器名称
"docker service" 界面允许您声明所需的状态。 "I want x number of identical services"。由于接口必须支持 x 个服务实例,因此不允许您选择特定的容器名称。相反,您可以选择服务名称。在 'docker stack deploy' 的情况下,将使用 docker-compose.yml 文件中服务键下定义的服务名称,但它还会将堆栈名称添加到服务名称之前。
在大多数情况下,我认为覆盖 docker-compose.yml 文件中的容器名称是不必要的,即使通过 docker-compose up
.[=17= 使用常规容器也是如此。 ]
如果您需要不同的名称用于网络服务发现,请添加不同的别名或使用您在使用 docker-compose
或 docker stack deploy
.
构建路径
因为 swarm 模式被构建为一个分布式系统,所以在本地构建图像并不是 "docker stack deploy" 的本意。相反,您应该构建映像并将其推送到集群中所有节点都可以访问的注册表。
如果你使用单节点群 "cluster",你应该可以使用 docker-compose build
选项在本地构建镜像,然后使用 docker stack deploy
.