我有一个带有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 回答
docker stack deploy
仅适用于图像,不适用于构建 .这意味着您必须将图像推送到图像注册表(使用构建过程创建),稍后
docker stack deploy
将下载图像并执行它们 .here你有一个如何为php应用程序完成的例子 . 你必须注意第1部分,第3部分和第4部分 . 文章是关于php的,但可以很容易地应用于任何其他语言 .
群集模式“docker service”界面在管理容器方面有一些根本区别 . 您不再直接运行像“docker run”这样的容器,并且假设您将在分布式环境中更频繁地执行此操作 .
我会通过你列出的这些具体事情来分解答案 .
链接
链接选项已被弃用了相当长的一段时间,支持与“docker network”功能一起引入的网络服务发现功能 . 您不再需要指定容器的特定链接 . 相反,您只需要确保所有容器都在同一网络上,然后他们可以通过容器名称或“网络别名”发现彼此
默认情况下,
docker-compose
会将所有容器放入同一网络,并将组合服务名称设置为别名 . 这意味着如果您有一个名为'postgres-node'的服务,您可以通过名称'postgres-node'的dns到达它 .容器名称
"docker service"接口允许您声明所需的状态 . “我想要x个相同的服务” . 由于接口必须支持x个服务实例,因此不会使用docker-compose.yml文件中服务密钥下定义的服务名称,但它也会将堆栈名称添加到服务名称 .
在大多数情况下,我认为在docker-compose.yml文件中覆盖容器名称是不必要的,即使通过
docker-compose up
使用常规容器也是如此 .如果您需要使用其他名称进行网络服务发现,请添加其他别名或使用在使用
docker-compose
或docker stack deploy
时获得的服务名称别名 .构建路径
因为swarm模式是构建为分布式系统的,所以在本地构建映像并不是“docker stack deploy”所要做的 . 相反,您应该构建映像并将其推送到集群中所有节点都可以访问的注册表 .
在您使用单节点群"cluster"的情况下,您应该能够使用
docker-compose build
选项来获取本地构建的图像,然后使用docker stack deploy
.