基础概念
是什么?
容器编排:针对容器生命周期的管理,对容器的生命周期进行更快速方便的方式进行管理。
为什么需要
- 依赖管理,当一个容器必须在另一个容器运行完成后,才能运行时,就需要进行依赖管理。
- 副本数控制,容器有时候也需要集群,快速的对容器进行弹性伸缩。
- 配置共享,通过配置文件统一描述需要运行 的服务相关信息,自动化的解析配置内容,并构建对应的服务。
Docker Compose(单机)
Compose 简介
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
有时候我们需要涉及到在一台机器部署多个容器,那么此时再手动的每次输入相关的一堆配置命令再来启动服务器,还是产生了很多无意义的重复性劳作。针对单机的多容器部署情况,Docker为我们提供了一个单机版本的服务器编排工具 docker-compose。
Docker-Compose 可以高效便捷的管理单机上运行的所有容器,它通过yaml配置文件的方式完成之前执行docker run 命令所设置的所有参数,你可以先针对单机上的所有容器进行相关配置,配置完成后即可使用docker-compose对单机多容器进行高效管理。
Compose 安装
sudo curl -L "http://mirrors.aliyun.com/docker-toolbox/linux/compose/1.21.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
将可执行权限应用于二进制文件:
sudo chmod +x /usr/local/bin/docker-compose
创建软链:
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
测试是否安装成功:
docker-compose --version
注意: 对于 alpine,需要以下依赖包: py-pip,python-dev,libffi-dev,openssl-dev,gcc,libc-dev,和 make。
配置文件
版本简述
docker-compose的api版本与大版本一致,compose版本与docker版本之间存在一定关联
服务services
需要运行的容器配置,可以理解为原先用docker run 命令后面跟的一系列的配置信息,都配置在这个下面
网络networks
docker-compose 公共自定义网络管理,配置好以后,可以直接在servise中引用该网络配置,这个配置可以多个services
数据卷 volumes
docker-compose下的统一数据卷管理,可以给多个services使用
常用命令
构建服务
可以选择基于已有的镜像或者 Dockerfile 进行重新构建,利用 docker-compose build 可进行构建操作,也可以指定 docker-compose build 来构建指定服务
创建服务
配置好 yml 文件后,通过 docker-compose create 创建配置文件中的所有服务,通过指定服务名来创建具体服务
拉取镜像
docker-compose pull 服务名,可以拉取指定服务的镜像
容器的运行/启动/停止
docker-compose run 服务名:运行服务
docker-compose start 服务名:启动服务
docker-compose stop 服务名:停止服务
docker-compose restart 服务名:重启服务
查看管理的容器列表
docker-compose ps 查看服务列表
###查看日志 docker-compose logs 服务名:查看指定服务的日志信息
Swarm (分布式)
关键概念
Swarm
集群的管理和编排是使用嵌入 docker 引擎的 SwarmKit,可以在docker 初始化时启动 swarm 模式或者加入已存在的 swarm
Node
运行 Docker 的主机可以主动初始化一个 Swarm 集群或者加入一个已存在的 Swarm 集群,这样这个运行 Docker 的主机就成为一个 Swarm 集群的节点 (node) 。
节点分为管理 (manager) 节点和工作 (worker) 节点。
管理节点用于 Swarm 集群的管理,docker swarm 命令基本只能在管理节点执行(节点退出集群命令 docker swarm leave 可以在工作节点执行)。一个 Swarm 集群可以有多个管理节点,但只有一个管理节点可以成为 leader,leader 通过 raft 协议实现。通常,第一个启用docker swarm的节点将成为leader,后来加入的都是follower。当前的leader如果挂掉,剩余的节点将重新选举出一个新的leader。每一个manager都有一个完整的当前集群状态的副本,可以保证manager的高可用。
工作节点是任务执行节点,管理节点将服务 (service) 下发至工作节点执行。管理节点默认也作为工作节点。你也可以通过配置让服务只运行在管理节点。worker节点之间,通过control plane进行通信,这种通信使用gossip协议,并且是异步的。
Task
任务 (Task)是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器。
Service
服务 (Services) 是指一组任务的集合,服务定义了任务的属性。服务有两种模式:
replicated services 按照一定规则在各个工作节点上运行指定个数的任务。
global services 每个工作节点上运行一个任务
两种模式通过 docker service create 的 --mode 参数指定。
实战应用
集群搭建
初始化集群
登陆管理节点,并执行如下命令:
docker swarm init --advertise-addr managerIP
使用docker info 可以查看swarm集群状态
docker node ls 可以查看集群节点信息
增加工作节点
在其他工作节点执行下面的命令(在管理节点执行docker swarm init --advertise-addr managerIP会生成下面的命令)
docker swarm join --token myToken managerIP:2377
查看集群
进入主节点,输入如下命令查看集群节点信息 docker node ls
部署服务
新建服务
进入主节点,创建一个 helloworld 服务 docker service create --replicas 1 -p 80:80 --name nginx_swarm nginx
命令结束:
docker service create 创建一个服务
--name 设置服务名称
--replicas 设置启动多少个实例
通过 docker service ps 可以查看服务信息 通过 docker service ls 可以查看 Swarm 集群下运行的所有服务
监控集群状态
查看服务信息:
docker service inspect --pretty
--pretty 参数可以简化输出内容
docker service ps 可以查看运行中的服务信息
进入工作节点通过 docker ps 可以查看容器运行状态
弹性收缩
调整实例个数
更新服务的实例个数: docker service update --replicas <service id/name>
调整集群大小
添加新的 Docker 节点,执行 docker swarm join 命令可以加入集群
执行 docker swarm leave 可以退出集群,也可以带上 --force 参数强制退出集群