Docker 容器编排 - 个人笔记

184 阅读6分钟

基础概念

是什么?

容器编排:针对容器生命周期的管理,对容器的生命周期进行更快速方便的方式进行管理。

为什么需要

  • 依赖管理,当一个容器必须在另一个容器运行完成后,才能运行时,就需要进行依赖管理。
  • 副本数控制,容器有时候也需要集群,快速的对容器进行弹性伸缩。
  • 配置共享,通过配置文件统一描述需要运行 的服务相关信息,自动化的解析配置内容,并构建对应的服务。

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版本之间存在一定关联

docs.docker.com/compose/com…

服务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 参数强制退出集群