我试图理解D-Compose和D-Swarm之间的差异或相似之处.
通过阅读文档,我了解到docker-compose提供了一种机制,可以将不同的容器绑定在一起并协同工作,作为单个服务(我猜它使用与用于链接两个容器的--link命令相同的功能)
另外,我对docker-swarm的理解是它允许你管理不同docker-hosts的集群,每个docker-hosts都运行一些docker-images的几个容器实例.我们可以将连接定义为群中不同容器之间的覆盖网络(即使它们跨越群中的两个泊坞主机)将它们作为一个单元连接起来.
我想要了解的是docker-swarm成功的docker-compose和覆盖网络是连接容器的新(推荐)方式吗?
或者,docker-compose仍然是整个docker系列中不可或缺的一部分,并且可以使用它来连接容器以协同工作.如果是这样,docker-compose在群中的不同节点上使用容器?
或者是覆盖网络用于连接群集中不同主机的容器,而docker-compose用于创建内部链接?
此外,我还看到在docker文档中提到 -不再推荐链接,很快就会过时.
我有点困惑???
非常感谢!
我正在学习如何使用Docker Compose在多个主机上的多个容器中部署应用程序.我遇到了两个配置文件 - 堆栈文件和Compose文件.
从云堆栈文件YAML引用中,它指出堆栈文件是YAML格式的文件,它定义一个或多个服务,类似于docker-compose.yml文件但具有一些扩展名.
从这篇文章中,它指出堆栈与docker-compose非常相似,除了它们定义服务而docker-compose定义容器.
它们看起来非常相似,所以我想知道何时使用堆栈文件,何时使用Compose文件?
我是Dockers和容器的新手.我正在浏览docker的教程,并发现了这些信息. https://docs.docker.com/get-started/part3/#docker-composeyml
networks:
- webnet
networks:
webnet:
Run Code Online (Sandbox Code Playgroud)
什么是网络?该文件说
指示Web容器通过称为webnet的负载平衡网络共享端口80.(在内部,容器本身将在短暂的端口发布到Web的端口80.)
那么,默认情况下,覆盖网络在docker集群中是负载均衡的?什么是负载平衡算法使用?
实际上,我不清楚为什么我们在覆盖网络上进行负载平衡.
我正在开发一个使用docker-swarm建立云架构的项目.我知道使用swarm我可以部署服务的副本,这意味着该图像的多个容器将运行以服务请求.
我还读到docker有一个内部负载均衡器来管理这个请求分配.
但是,我需要帮助理解以下内容:
假设我有一个容器,将服务公开为REST API或说它是一个Web应用程序.如果我在swarm中部署了多个容器(副本),并且我有其他容器(运行一些应用程序)与此HTTP/REST服务通信.
然后,当我写那些IP:PORT组合的应用程序时,我会使用吗?是否有任何工作节点IP运行这些服务?即使在运行相同服务的其他工作人员/经理之间,这样做是否会适当地分配负载?
或者我应该调用管理器,而管理器又适当地处理路由(即使管理器节点没有运行此特定服务的容器)?
谢谢.
我有一个v3的撰写文件,其中有3个服务共享/使用相同的卷.在使用swarm模式时,我们需要创建额外的容器和卷来管理整个群集中的服务.
我打算使用NFS服务器,以便将单个NFS共享直接挂载到群集中的所有主机上.
我在下面找到了两种方法,但它需要在docker主机上执行额外的步骤 -
在主机上使用"fstab"或"mount"命令挂载NFS共享,然后将其用作docker服务的主机卷.
使用Netshare插件 - https://github.com/ContainX/docker-volume-netshare
有没有一种标准的方法,我可以使用docker compose v3直接使用/挂载NFS共享,只需执行少量/无步骤(我知道无论如何都需要"nfs-common"包)在docker主机上?
我已经启用了docker swarm进行本地测试.现在,无论何时尝试部署使用,docker-compose up我都会看到以下警告:
警告:您正在使用的Docker Engine正在以群集模式运行.
Compose不使用swarm模式将服务部署到swarm中的多个节点.将在当前节点上安排所有容器.
要跨群集部署应用程序,请使用
docker stack deploy.
如何禁用docker swarm模式?
我们可以在docker engine swarm模式下跨多个主机共享一个公共/单个命名卷,这是最简单的方法吗?
我想找到一种方法将etcd集群部署为Docker Swarm服务,该服务将自动配置而无需任何交互.基本上,我想到了这个命令的精神:
docker service create --name etcd --replicas 3 my-custom-image/etcd
Run Code Online (Sandbox Code Playgroud)
我假设覆盖网络配置为安全并提供加密和身份验证,所以我相信我不需要TLS,甚至不需要--auto-tls.当这可以在另一层上解决时,不希望额外的头痛找到提供证书的方法.
我需要--name为每个实例都有一个唯一的,但是我可以从一个可以使用的入口点脚本中获得它export ETCD_NAME=$(hostname --short).
问题是,我坚持初始配置.根据聚类指南,有三个选项,但似乎都不适合:
etcd,我将获得节点容器的所有IP,但没有_etcd-server._tcp记录.ETCD_INITIAL_CLUSTER因为虽然我知道IP,但我不知道其他节点的名称,我不知道有任何方法可以解决这些问题.(我不打算将Docker API套接字暴露给etcd容器.)docker-compose.yml,它就会自动做正确的事情,没有问题就是这样".有什么技巧可以拉吗?
我无法mongodb从docker swarm群集连接到外部服务器.
据我了解这是因为集群使用覆盖网络驱动程序.我对吗?
如果没有,docker overlay驱动程序如何工作以及如何mongodb从群集连接到外部服务器?
我在设置一个有两个工人和一个经理的Docker Swarm时遇到了困难.一切正常,直到我添加第二个工人.添加第二个worker后,第一个worker的守护进程会进入某种错误状态,其中一个简单的docker version收益
另外,我使用Stack YAML启动三个Redis服务.
Stack.yaml
version: '3.4'
services:
redis-master:
image: 'bitnami/redis:5.0.2'
ports:
- '6379:6379'
environment:
- REDIS_REPLICATION_MODE=master
- REDIS_PASSWORD=f7paul12-d571-4701-9c55-64vanacecDyK
deploy:
mode: global
restart_policy:
condition: any
volumes:
- 'redis:/opt/bitnami/redis/etc/'
redis-replica:
image: 'bitnami/redis:5.0.2'
ports:
- '6379'
depends_on:
- redis-master
environment:
- REDIS_REPLICATION_MODE=slave
- REDIS_MASTER_HOST=redis-master
- REDIS_MASTER_PORT_NUMBER=6379
- REDIS_MASTER_PASSWORD=f7paul12-d571-4701-9c55-64vanacecDyK
- REDIS_PASSWORD=f7paul12-d571-4701-9c55-64vanacecDyK
deploy:
mode: replicated
replicas: 6
update_config:
parallelism: 1
delay: 20s
restart_policy:
condition: any
redis-sentinel:
image: 'bitnami/redis:5.0.2'
ports:
- '16379'
depends_on:
- redis-master
- redis-replica
entrypoint: |
bash -c 'bash …Run Code Online (Sandbox Code Playgroud) docker docker-swarm docker-machine docker-swarm-mode docker-stack