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

时间:2017-10-31 06:50:19

标签: docker docker-compose dockerfile docker-swarm

我有一个带有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文件的路径?

2 个答案:

答案 0 :(得分:3)

docker stack deploy仅适用于图片,不适用于版本。

这意味着您必须将图像推送到图像注册表(使用构建过程创建),稍后docker stack deploy将下载图像并执行它们。

here你有一个如何为php应用程序完成的例子。 你必须注意第1,3和4部分。 文章是关于php的,但可以很容易地应用于任何其他语言。

答案 1 :(得分:1)

群集模式“docker service”界面在管理容器方面有一些根本区别。您不再像“docker run”那样直接运行容器,并且假设您将在分布式环境中更频繁地执行此操作。

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

  

它不了解构建路径,链接,容器名称......

链接

链接选项已被弃用了一段时间,支持与“docker network”功能一起引入的网络服务发现功能。您不再需要指定容器的特定链接。相反,您只需要确保所有容器都在同一网络上,然后他们可以通过容器名称或“网络别名”发现彼此

默认情况下,

docker-compose会将您的所有容器放入同一网络,并将撰写服务名称设置为别名。这意味着如果你有一个名为'postgres-node'的服务,你可以通过名为'postgres-node'的dns来访问它。

容器名称

“docker service”界面允许您声明所需的状态。 “我想要 x 相同数量的服务”。由于接口必须支持 x 数量的服务实例,因此不允许您选择特定的容器名称。相反,您可以选择服务名称。对于“docker stack deploy”,将使用docker-compose.yml文件中services键下定义的服务名称,但它也会将堆栈名称添加到服务名称中。

在大多数情况下,我认为在docker-compose.yml文件中覆盖容器名称是不必要的,即使通过docker-compose up使用常规容器也是如此。

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

构建路径

因为swarm模式是作为一个分布式系统而构建的,所以在本地构建映像并不是“docker stack deploy”所要做的。相反,您应该构建映像并将其推送到集群中所有节点都可以访问的注册表。

如果您使用的是单节点群集“群集”,则应该能够使用docker-compose build选项获取本地构建的图像,然后使用docker stack deploy