Docker容器编排
docker-compose
compose安装
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 version
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-demo
动态扩容
docker-compose up -d --scale nginx-demo=2
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)。
使用
1、创建 swarm 集群管理节点(manager)
初始化 swarm 集群,进行初始化的这台机器,就是集群的管理节点。
# 172.16.156.158为虚拟机本机ip
docker swarm init --advertise-addr 172.16.156.158
以上输出,证明已经初始化成功。需要把以下这行复制出来,在增加工作节点时会用到:
docker swarm join --token SWMTKN-1-4dq96unmcsz9v0m99vapdtegt5y0kym3ths69r6enlgofbgja7-7ml2skxa3y5x5cjly8uxfwoae 172.16.156.158:2377
2、创建 swarm 集群工作节点(worker)
分别进入两个机器里,指定添加至上一步中创建的集群,这里会用到上一步复制的内容。
3、查看集群信息
进入管理节点,执行:docker info 可以查看当前集群的信息。
docker info
通过画红圈的地方,可以知道当前运行的集群中,有三个节点,其中有一个是管理节点。
进入管理节点,执行:docker node ls 查看集群信息:
docker node ls
4、部署服务到集群中
注意:跟集群管理有关的任何操作,都是在管理节点上操作的。
以下例子,在一个工作节点上创建一个名为 nginx_swarm 的nginx服务,这里是随机指派给一个工作节点:
docker service create --replicas 1 -p 80:80 --name nginx_swarm nginx
5、查看服务部署情况
查看 nginx_swarm 服务运行在哪个节点上,可以看到目前是在 wq 节点:
docker service ps nginx_swarm
查看 nginx_swarm 部署的具体信息:
docker service inspect --pretty nginx_swarm
6、扩展集群服务
调整节点个数
# docker service update --replicas <num> <service id/name>
docker service update --replicas 2 nginx_swarm
服务扩展
docker service scale nginx_swarm=3
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 redis
8、删除服务
docker service rm nginx_swarm
9、停止某个节点接收新的任务
停止节点001
docker node update --availability drain 001
注意:001 状态变为 Drain。不会影响到集群的服务,只是 001 节点不再接收新的任务,集群的负载能力有所下降。
可以通过以下命令重新激活节点:
docker node update --availability active 001
10、节点退出集群
docker swarm leave
删除退出集群的节点
docker node rm sysn25urcm4elywoiexiov431
portainer可视化
# 集群方式
docker service create -p 9000:9000 --name portainer --replicas 1 --mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock --mount type=volume,src=portainer_data,dst=/data portainer/portainer
# 单机方式
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
访问任意节点ip:端口即可打开管理面板
http://172.16.156.158:9000