Docker容器编排
docker-composecompose安装
Compose 简介
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
Compose 使用的三个步骤:
[*]使用 Dockerfile 定义应用程序的环境。
[*]使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
[*]最后,执行 docker-compose up 命令来启动并运行整个应用程序。
Linux 上我们可以从 Github 上下载它的二进制包来使用,最新发行的版本地址。运行以下命令以下载 Docker Compose 的当前稳定版本:
curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose要安装其他版本的 Compose,请替换 v2.20.2。
将可执行权限应用于二进制文件:
sudo chmod +x /usr/local/bin/docker-compose创建软链:
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose测试是否安装成功:
docker-compose versionhttps://cdn.nlark.com/yuque/0/2023/png/8364180/1691670172812-84b5ffcf-0e99-4e16-9005-9ba97dd4c77b.png#averageHue=%23000000&clientId=u1249e2b6-06ca-4&from=paste&height=131&id=u322345c6&originHeight=262&originWidth=844&originalType=binary&ratio=2&rotation=0&showTitle=false&size=34378&status=done&style=none&taskId=u2bc95c20-54b4-46ce-a727-a9f322722b1&title=&width=422
nginx示例
docker-compose.yml配置案例如下,官方文档
version: "3.8"
services:
nginx-demo:
image: nginx
restart: always
networks:
- network_test
volumes:
- /Users/wandaren/develop/docker-nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- /Users/wandaren/develop/docker-nginx/log:/var/log/nginx
- /Users/wandaren/develop/docker-nginx/html:/usr/share/nginx/html
environment:
APP_ENV: dev
dns: 114.114.115.115
ports:
- 80
networks:
network_test:
driver: bridge
ipam:
driver: default
config:
- subnet: 188.18.0.0/16启动:
# 创建
docker-compose create nginx-demo
# 加载配置并启动
docker-compose up -d nginx-demo
# 重新读取配置内容
docker-compose up -d
# 启动
docker-compose start nginx-demo
# 停止
docker-compose stop nginx-demo
# 停止并删除
docker-compose down nginx-demohttps://cdn.nlark.com/yuque/0/2023/png/8364180/1691670577762-eb1437ce-fdbb-4c22-b2e3-a7d7f796c234.png#averageHue=%230b0b0b&clientId=u1249e2b6-06ca-4&from=paste&height=101&id=ua64e9630&originHeight=202&originWidth=946&originalType=binary&ratio=2&rotation=0&showTitle=false&size=32959&status=done&style=none&taskId=ubb79cb1b-5222-40b4-b69a-3934c741092&title=&width=473
动态扩容
docker-compose up -d --scale nginx-demo=2https://cdn.nlark.com/yuque/0/2023/png/8364180/1691670594472-789b51c0-0185-4265-96bf-d50b74796b99.png#averageHue=%230b0b0b&clientId=u1249e2b6-06ca-4&from=paste&height=116&id=u432b6f59&originHeight=232&originWidth=1518&originalType=binary&ratio=2&rotation=0&showTitle=false&size=55793&status=done&style=none&taskId=uc3ef8b70-2daf-4446-838c-7735544ce51&title=&width=759
Swarm(分布式)
简介
Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。
支持的工具包括但不限于以下各项:
[*]Dokku
[*]Docker Compose
[*]Docker Machine
[*]Jenkins
原理
如下图所示,swarm 集群由管理节点(manager)和工作节点(work node)构成。
[*]swarm mananger:负责整个集群的管理工作包括集群配置、服务管理等所有跟集群有关的工作。
[*]work node:即图中的 available node,主要负责运行相应的服务来执行任务(task)。
https://cdn.nlark.com/yuque/0/2023/png/8364180/1691672586130-9e5104eb-4f2c-4707-bd51-95ebca272e07.png#averageHue=%23d1c8bf&clientId=u31369f42-051c-4&from=paste&id=uaa6c9774&originHeight=552&originWidth=800&originalType=binary&ratio=2&rotation=0&showTitle=false&size=110855&status=done&style=none&taskId=u59627966-a1f3-4c72-a1dd-c2bdfaeb5cb&title=
使用
1、创建 swarm 集群管理节点(manager)
初始化 swarm 集群,进行初始化的这台机器,就是集群的管理节点。
# 172.16.156.158为虚拟机本机ip
docker swarm init --advertise-addr 172.16.156.158https://cdn.nlark.com/yuque/0/2023/png/8364180/1691675228552-50fb0cf2-feb7-4ad9-bc3a-eb92e977c9a6.png#averageHue=%23040000&clientId=u31369f42-051c-4&from=paste&height=266&id=u312ff001&originHeight=532&originWidth=2206&originalType=binary&ratio=2&rotation=0&showTitle=false&size=117829&status=done&style=none&taskId=ubd566aaf-5e9c-4175-9b32-9659958b5a2&title=&width=1103
以上输出,证明已经初始化成功。需要把以下这行复制出来,在增加工作节点时会用到:
docker swarm join --token SWMTKN-1-4dq96unmcsz9v0m99vapdtegt5y0kym3ths69r6enlgofbgja7-7ml2skxa3y5x5cjly8uxfwoae 172.16.156.158:23772、创建 swarm 集群工作节点(worker)
分别进入两个机器里,指定添加至上一步中创建的集群,这里会用到上一步复制的内容。
https://cdn.nlark.com/yuque/0/2023/png/8364180/1691675907910-6b12725a-2ff1-4f3f-98a8-69c52b338e06.png#averageHue=%23000000&clientId=u31369f42-051c-4&from=paste&height=142&id=ueac2db74&originHeight=284&originWidth=2190&originalType=binary&ratio=2&rotation=0&showTitle=false&size=66278&status=done&style=none&taskId=uc15107d9-49b5-42a5-a1c0-fa4688c3508&title=&width=1095
https://cdn.nlark.com/yuque/0/2023/png/8364180/1691675894214-cccc59ed-a7e7-406b-8564-ff718d2993e5.png#averageHue=%23000000&clientId=u31369f42-051c-4&from=paste&height=141&id=u3275687c&originHeight=282&originWidth=2176&originalType=binary&ratio=2&rotation=0&showTitle=false&size=66567&status=done&style=none&taskId=u925ac073-d4e0-4aaa-a2e2-c3af9171663&title=&width=1088
3、查看集群信息
进入管理节点,执行:docker info 可以查看当前集群的信息。
docker infohttps://cdn.nlark.com/yuque/0/2023/png/8364180/1691675996794-df5c56cf-ad5a-482f-bb2e-669b1965d3a8.png#averageHue=%23010000&clientId=u31369f42-051c-4&from=paste&height=492&id=ub6be0743&originHeight=984&originWidth=1718&originalType=binary&ratio=2&rotation=0&showTitle=false&size=185007&status=done&style=none&taskId=ueb21a75b-ead0-49dd-8a5a-8ccc328664c&title=&width=859
通过画红圈的地方,可以知道当前运行的集群中,有三个节点,其中有一个是管理节点。
进入管理节点,执行:docker node ls 查看集群信息:
docker node lshttps://cdn.nlark.com/yuque/0/2023/png/8364180/1691676116324-c7cfd0ba-1332-420b-93d2-26e0f2adc7c3.png#averageHue=%23000000&clientId=u31369f42-051c-4&from=paste&height=170&id=u480855ea&originHeight=340&originWidth=2162&originalType=binary&ratio=2&rotation=0&showTitle=false&size=87090&status=done&style=none&taskId=u392a832b-76bb-42c9-ab4b-60659288789&title=&width=1081
4、部署服务到集群中
注意:跟集群管理有关的任何操作,都是在管理节点上操作的。
以下例子,在一个工作节点上创建一个名为 nginx_swarm 的nginx服务,这里是随机指派给一个工作节点:
docker service create --replicas 1 -p 80:80 --name nginx_swarm nginxhttps://cdn.nlark.com/yuque/0/2023/png/8364180/1691676895633-46ecad82-adb7-467f-86a5-ec8c66804d12.png#averageHue=%23000000&clientId=u31369f42-051c-4&from=paste&height=137&id=ubc4e434f&originHeight=274&originWidth=1632&originalType=binary&ratio=2&rotation=0&showTitle=false&size=57348&status=done&style=none&taskId=u3888657c-4532-4c38-9cbd-74d637d09cc&title=&width=816
https://cdn.nlark.com/yuque/0/2023/png/8364180/1691676881701-3cae74e4-5d04-44cc-b55d-4427802bd9b8.png#averageHue=%23000000&clientId=u31369f42-051c-4&from=paste&height=119&id=ua885effd&originHeight=238&originWidth=1666&originalType=binary&ratio=2&rotation=0&showTitle=false&size=50964&status=done&style=none&taskId=u2f617036-3362-45de-b2a1-711cee26d8f&title=&width=833
5、查看服务部署情况
查看 nginx_swarm 服务运行在哪个节点上,可以看到目前是在 wq 节点:
docker service ps nginx_swarmhttps://cdn.nlark.com/yuque/0/2023/png/8364180/1691676986052-1243f8f6-8e3d-4f53-9cc8-c043e6b82e82.png#averageHue=%23000000&clientId=u31369f42-051c-4&from=paste&height=158&id=ub3e233bf&originHeight=316&originWidth=2210&originalType=binary&ratio=2&rotation=0&showTitle=false&size=60602&status=done&style=none&taskId=u5182d6cc-eda4-41bc-be9a-b5b94c6b051&title=&width=1105
查看 nginx_swarm 部署的具体信息:
docker service inspect --pretty nginx_swarmhttps://cdn.nlark.com/yuque/0/2023/png/8364180/1691677043318-cfbea83b-8976-4e46-a324-5e08bdc4c3bc.png#averageHue=%23000000&clientId=u31369f42-051c-4&from=paste&height=671&id=u75570ace&originHeight=1342&originWidth=2046&originalType=binary&ratio=2&rotation=0&showTitle=false&size=236175&status=done&style=none&taskId=u4ddd0c0c-7c3a-4425-ac4a-9b92d1847a3&title=&width=1023
6、扩展集群服务
调整节点个数
# docker service update --replicas <num> <service id/name>
docker service update --replicas 2 nginx_swarmhttps://cdn.nlark.com/yuque/0/2023/png/8364180/1691678279905-3d205a69-b3de-47b1-ac5b-99a0a94cc922.png#averageHue=%23000000&clientId=u31369f42-051c-4&from=paste&height=256&id=u1fd42139&originHeight=512&originWidth=1724&originalType=binary&ratio=2&rotation=0&showTitle=false&size=99089&status=done&style=none&taskId=u1771908e-8c81-4401-8bf9-640bc9979f8&title=&width=862
服务扩展
docker service scale nginx_swarm=3https://cdn.nlark.com/yuque/0/2023/png/8364180/1691678467629-42fb0201-cf19-48bc-87e2-f70dd1e29248.png#averageHue=%23000000&clientId=u31369f42-051c-4&from=paste&height=282&id=uc2c4d354&originHeight=564&originWidth=1650&originalType=binary&ratio=2&rotation=0&showTitle=false&size=107071&status=done&style=none&taskId=ud0868da0-ab40-467d-bfd0-a7e6815216e&title=&width=825
7、滚动升级服务
以下实例,我们将介绍 redis 版本如何滚动升级至更高版本。
创建一个 3.0.6 版本的 redis。
docker service create --replicas 1 --name redis --update-delay 10s redis:3.0.6滚动升级 redis
docker service update --image redis:3.0.7 redishttps://cdn.nlark.com/yuque/0/2023/png/8364180/1691681191434-9019bece-7f01-4ae9-bd5d-c7846e44fa5d.png#averageHue=%23000000&clientId=u31369f42-051c-4&from=paste&height=419&id=u6f0210e2&originHeight=838&originWidth=2124&originalType=binary&ratio=2&rotation=0&showTitle=false&size=192558&status=done&style=none&taskId=u7a0cda2e-ae70-4f5f-9601-4eda01195dc&title=&width=1062
8、删除服务
docker service rm nginx_swarmhttps://cdn.nlark.com/yuque/0/2023/png/8364180/1691680480863-27bc57f6-a336-4aa4-8b57-3bd91abf1441.png#averageHue=%23000000&clientId=u31369f42-051c-4&from=paste&height=102&id=t0w5I&originHeight=204&originWidth=1246&originalType=binary&ratio=2&rotation=0&showTitle=false&size=33426&status=done&style=none&taskId=u968bde05-0e72-4274-bfe3-6fce12209b8&title=&width=623
9、停止某个节点接收新的任务
停止节点001
docker node update --availability drain 001https://cdn.nlark.com/yuque/0/2023/png/8364180/1691680711483-aa21721c-f66c-4094-8d75-54d2cc5a37b8.png#averageHue=%23000000&clientId=u31369f42-051c-4&from=paste&height=278&id=C832Z&originHeight=556&originWidth=2016&originalType=binary&ratio=2&rotation=0&showTitle=false&size=163026&status=done&style=none&taskId=u52150423-b016-4541-923e-2047d8f1a59&title=&width=1008
注意:001 状态变为 Drain。不会影响到集群的服务,只是 001 节点不再接收新的任务,集群的负载能力有所下降。
可以通过以下命令重新激活节点:
docker node update --availability active 001https://cdn.nlark.com/yuque/0/2023/png/8364180/1691680937470-e9cf37ef-0d03-4610-9d7c-2f2f09fb2c58.png#averageHue=%23000000&clientId=u31369f42-051c-4&from=paste&height=197&id=ud65f991c&originHeight=394&originWidth=2062&originalType=binary&ratio=2&rotation=0&showTitle=false&size=103988&status=done&style=none&taskId=ub5312c70-51df-4f22-8332-1f7b1bdc72f&title=&width=1031
10、节点退出集群
docker swarm leavehttps://cdn.nlark.com/yuque/0/2023/png/8364180/1691679822861-979fb3e9-5b37-4ec6-87d3-c2fea511ce9c.png#averageHue=%23000000&clientId=u31369f42-051c-4&from=paste&height=116&id=ud2b293db&originHeight=232&originWidth=746&originalType=binary&ratio=2&rotation=0&showTitle=false&size=31658&status=done&style=none&taskId=u08931752-1653-4ab1-ad5e-ffe2a3e80ce&title=&width=373
https://cdn.nlark.com/yuque/0/2023/png/8364180/1691679842279-48b9481b-2695-4bab-802b-5dd7013f571d.png#averageHue=%23000000&clientId=u31369f42-051c-4&from=paste&height=174&id=uf011f75c&originHeight=348&originWidth=1988&originalType=binary&ratio=2&rotation=0&showTitle=false&size=86456&status=done&style=none&taskId=uec81e047-8a41-4417-aa4d-7af6064cb94&title=&width=994
删除退出集群的节点
docker node rm sysn25urcm4elywoiexiov431https://cdn.nlark.com/yuque/0/2023/png/8364180/1691680019382-56d80149-0b66-4b6c-b37b-4ccb71e99c67.png#averageHue=%23000000&clientId=u31369f42-051c-4&from=paste&height=180&id=u02402b26&originHeight=360&originWidth=1996&originalType=binary&ratio=2&rotation=0&showTitle=false&size=96796&status=done&style=none&taskId=ub21a2925-b88a-4503-8fd4-01f583eb315&title=&width=998
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]