Docker 1.13引入了新版本的Docker Compose。 该版本的主要功能是,它允许将使用Docker Compose文件定义的服务直接部署到启用了Swarm模式的Docker引擎。 这样可以简化多容器应用程序在多主机上的部署。
该博客将使用一个简单的Docker Compose文件显示如何在Docker 1.13中创建和部署服务。
这是用于启动Couchbase数据库节点的Docker Compose v2定义:
version: "2"
services:
db:
image: arungupta/couchbase:latest
ports:
- 8091:8091
- 8092:8092
- 8093:8093
- 11210:11210
可以在没有Swarm模式的Docker引擎上启动此定义,如下所示:
docker-compose up
这将启动Compose文件中服务定义的单个副本。 该服务可以扩展为:
docker-compose scale db=2
这将在单个主机上正常工作。 如果在Docker Engine上启用了swarm模式,那么它将显示以下消息:
WARNING: The Docker Engine you're using is running in swarm mode.
Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node.
To deploy your application across the swarm, use `docker stack deploy`.
Docker Compose为我们提供了多容器应用程序,但这些应用程序仍仅限于单个主机。 那就是单点故障。
Swarm模式允许创建Docker引擎集群。 在1.13版本中,可以使用docker stack deploy
命令将Compose文件部署到Swarm模式。
这是Docker Compose v3的定义:
version: "3"
services:
db:
image: arungupta/couchbase:latest
ports:
- 8091:8091
- 8092:8092
- 8093:8093
- 11210:11210
如您所见,唯一的变化是version
属性的值。 Docker Compose v3中还有其他更改 。 此外,请阅读有关不同的Docker Compose版本以及如何从v2升级到v3的信息。
启用群模式:
docker swarm init
其他节点可以加入该群集集群,这也很容易允许将多容器应用程序部署到多主机。
将Compose文件中定义的服务部署为:
docker stack deploy --compose-file=docker-compose.yml couchbase
此处的Compose文件的默认值会使命令短一些。 #30352应该注意这一点。
可以使用docker service ls
命令验证正在运行的服务列表:
ID NAME MODE REPLICAS IMAGE
05wa4y2he9w5 couchbase_db replicated 1/1 arungupta/couchbase:latest
可以使用docker service ps
命令查看服务中运行的容器的列表:
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
rchu2uykeuuj couchbase_db.1 arungupta/couchbase:latest moby Running Running 52 seconds ago
在这种情况下,单个容器将作为服务的一部分运行。 该节点被列为moby
,这是使用Docker for Mac运行的Docker Engine的默认名称。
现在可以将该服务扩展为:
docker service scale couchbase_db=2
然后可以再次将容器列表视为:
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
rchu2uykeuuj couchbase_db.1 arungupta/couchbase:latest moby Running Running 3 minutes ago
kjy7l14weao8 couchbase_db.2 arungupta/couchbase:latest moby Running Running 23 seconds ago
请注意,使用格式
为容器
。 两个容器都在同一主机上运行。
还要注意,这两个容器是独立的Couchbase节点,尚未在群集中配置。 使用Docker在Couchbase Cluster中已经对此进行了解释,并且即将更新这些步骤。
一个服务通常将有多个运行在多个主机上的容器。 Docker 1.13引入了一个新命令docker service logs
以跨所有主机上的所有容器将服务日志流式传输到您的控制台。 在我们的例子中,这可以通过使用命令docker service logs couchbase_db
看到,如下所示:
couchbase_db.1.rchu2uykeuuj@moby | ++ set -m
couchbase_db.1.rchu2uykeuuj@moby | ++ sleep 15
couchbase_db.1.rchu2uykeuuj@moby | ++ /entrypoint.sh couchbase-server
couchbase_db.2.kjy7l14weao8@moby | ++ set -m
couchbase_db.2.kjy7l14weao8@moby | ++ sleep 15
couchbase_db.1.rchu2uykeuuj@moby | Starting Couchbase Server -- Web UI available at http://:8091 and logs available in /opt/couchbase/var/lib/couchbase/logs
couchbase_db.1.rchu2uykeuuj@moby | ++ curl -v -X POST http://127.0.0.1:8091/pools/default -d memoryQuota=300 -d indexMemoryQuota=300
couchbase_db.2.kjy7l14weao8@moby | ++ /entrypoint.sh couchbase-server
couchbase_db.2.kjy7l14weao8@moby | Starting Couchbase Server -- Web UI available at http://:8091 and logs available in /opt/couchbase/var/lib/couchbase/logs
. . .
couchbase_db.1.rchu2uykeuuj@moby | ++ '[' '' = WORKER ']'
couchbase_db.2.kjy7l14weao8@moby | Content-Type: application/json
couchbase_db.1.rchu2uykeuuj@moby | ++ fg 1
couchbase_db.2.kjy7l14weao8@moby | Content-Length: 152
couchbase_db.1.rchu2uykeuuj@moby | /entrypoint.sh couchbase-server
couchbase_db.2.kjy7l14weao8@moby | Cache-Control: no-cache
couchbase_db.2.kjy7l14weao8@moby |
couchbase_db.2.kjy7l14weao8@moby | ++ echo 'Type: '
couchbase_db.2.kjy7l14weao8@moby | ++ '[' '' = WORKER ']'
couchbase_db.2.kjy7l14weao8@moby | ++ fg 1
couchbase_db.2.kjy7l14weao8@moby | {"storageMode":"memory_optimized","indexerThreads":0,"memorySnapshotInterval":200,"stableSnapshotInterval":5000,"maxRollbackPoints":5,"logLevel":"info"}Type:
couchbase_db.2.kjy7l14weao8@moby | /entrypoint.sh couchbase-server
log语句的前导使用格式
。 然后显示来自容器的实际日志消息。
乍一看,附加容器ID似乎是多余的。 但是Docker服务是自我修复的。 这意味着,如果容器死亡,则Docker引擎将启动另一个容器以确保在给定时间指定数量的副本。 这个新的容器将有一个新的ID。 因此,它允许从正确的容器附加日志消息。
所以快速比较一下命令:
Docker Compose v2 | Docker Compose v3 | |
---|---|---|
启动服务 | docker-compose up -d |
docker stack deploy --compose-file=docker-compose.yml |
规模服务 | docker-compose scale |
docker service scale |
关掉 | docker-compose down |
docker stack rm |
多主机 | 没有 | 是 |
想要开始使用Couchbase吗? 查看Couchbase入门套件 。
想更多地了解如何在容器中运行Couchbase?
- 容器上的Couchbase
- Couchbase论坛
- Couchbase开发人员门户
- @couchhasedev和@couchbase
翻译自: https://www.javacodegeeks.com/2017/01/deploy-docker-compose-services-swarm.html