Docker撰写/ swarm 3:docker文件path,构build,容器名称,链接,迁移

我有docker-compose文件的项目,想迁移到V3,但部署时

docker stack deploy --compose-file=docker-compose.yml vertx 

它不理解构buildpath,链接,容器名称…

我的文件在这里findhttps://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组成,它正在工作,但与堆栈部署不。

如何定义docker文件的path?

群模式“docker服务”界面在pipe理容器方面有一些根本性的差异。 你不再像“docker run”那样直接运行容器,并且假定你会在分布式环境中更频繁地执行这个操作。

我将通过你列出的这些具体事情来分解答案。

它不理解构buildpath,链接,容器名称…

链接

链接选项已被弃用了相当长的一段时间,有利于与“dockernetworking”function一起引入的networking服务发现function。 您不再需要指定到容器的特定链接。 相反,你只需要确保所有的容器都在同一个networking上,然后他们可以通过容器名称或“networking别名”

docker-compose会默认将所有的容器放到同一个networking中,并将compose服务名称设置为别名。 这意味着如果您有一个名为“postgres-node”的服务,您可以通过名称为“postgres-node”的dns来访问它。

容器名称

“docker服务”界面允许您声明所需的状态。 “我想要x个相同的服务”。 由于接口必须支持x个服务实例,因此不允许您select特定的容器名称。 相反,您可以select服务名称。 在“docker stack deploy”的情况下,将使用docker-compose.yml文件中服务密钥下定义的服务名称,但也会将堆栈名称预先添加到服务名称中。

在大多数情况下,我认为在docker-compose.yml文件中重写容器名是不必要的,即使通过docker使用常规容器docker-compose up

如果您需要使用不同的名称进行networking服务发现,请添加其他别名或使用在使用docker-composedocker stack deploy时获得的服务名称别名。

build立path

因为swarm模式是build立在分布式系统之上的,所以在本地build立映像并不是“docker stack deploy”所要做的。 相反,您应该构build映像并将其映射到群集中的所有节点都可以访问的registry。

在使用单个节点swarm“cluster”的情况下,您应该能够使用docker-compose build选项来获取本地docker-compose build的映像,然后使用docker stack deploy

docker stack deploy只适用于图像,而不是构build。

这意味着您将不得不将图像推送到图像registry(使用构build过程创build),稍后, docker stack deploy将下载图像并执行它们。

在这里你有一个如何做一个PHP应用程序的例子。 你必须注意的部分1,3和4.这些文章是关于PHP,但可以很容易地适用于任何其他语言。