1、Docker编排工具 Docker平台及周边生态系统提供了很多工具来管理容器的生命周期。容器编排工具将生命周期管理能力扩展到可在集群上部署复杂的、多容器的工作负载。本项目通过两个任务介绍了Compose编排工具和Swarm编排工具的使用方法。知识目标n 了解容器编排的管理方法。n 了解容器编排的基本使用方法。n 了解容器集群的管理方法。n 了解容器集群的基本使用方法。能力目标n 掌握Compose编排工具的使用方法。n 掌握Swarm编排工具的使用方法Compose编排工具的使用5.1任务Swarm编排工具的使用5.2任务5.1Docker编排工具工程师小王在对Docker技术进行学习后,发现
2、当有大量Docker容器需要手动部署时效率较低,通过查阅相关资料,小王发现可利用Compose工具来更高效地部署容器,于是公司安排小王编写Compose工具的安装及使用手册,以供公司相关技术人员学习,并在公司内部推广该技术。任务5.1 Compose编排工具的使用任务要求5.15.1.1 Compose工具微服务架构的应用系统通常包括若干个微服务,每个微服务又会部署多个实例,如果每个微服务都要手动启停,则会带来效率低、维护量大的问题。而使用Compose工具可以轻松、高效地管理容器。Compose是Docker官方的开源项目,定位是“定义和运行多个Docker容器应用的工具”,其前身是Fig,
3、负责实现对Docker容器集群的快速编排。Compose通过YMAL配置文件来创建和运行所有服务。Compose使用的模板文件是一个YAML格式文件,它允许用户通过一个docker-compose.yml模板文件来定义一组相关联的应用容器为一个 项目。任务5.1 Compose编排工具的使用相关知识5.1Compose有以下两个重要概念。(1)服务(Service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。每个服务都有自己的名称、使用的镜像、挂载的数据卷、所属的网络、依赖的服务等。(2)项目(Project):由一组关联的应用容器组成的一个完整业务单元,在docker- co
4、mpose.yml中定义,即Compose的一个配置文件可以解析为一个项目,Compose通过分析指定配置文件,得出配置文件所需完成的所有容器管理与部署操作Compose的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷的生命周期管理。任务5.1 Compose编排工具的使用相关知识5.15.1.2 Compose的常用命令Compose的常用命令常跟在docker-compose主命令后面。docker-compose主命令的格式如下。docker-compose -f . options COMMAND ARGS.其常用选项说明如下。(1)-f:指定Compose配置文件,默认为d
5、ocker-compose.yml。(2)-p:指定项目名称,默认为目录名。(3)-verbose:显示更多的输出。任务5.1 Compose编排工具的使用相关知识5.11列出容器ps命令用于列出所有运行的容器,其命令格式如下。ps options SERVICE.其常用选项说明如下。-q:只显示ID。例如,列出所有运行容器的代码如下。docker-compose ps任务5.1 Compose编排工具的使用相关知识5.12查看服务日志输出logs命令用于查看服务日志输出,其命令格式如下。logs options SERVICE.其常用选项说明如下。(1)-f, -follow:实时输出日志。
6、(2)-t, -timestamps:显示时间戳。(3)-tail=all:从日志末尾显示行。例如,查看nginx的实时日志的代码如下。docker-compose logs -f nginx任务5.1 Compose编排工具的使用相关知识5.13输出绑定的公共端口port命令用于输出绑定的公共端口,其命令格式如下。port options SERVICE PRIVATE_PORT其常用选项说明如下。(1)-protocol=proto:TCP或UDP,默认为TCP。(2)-index=index:多个容器时的索引数字,默认为1。例如,输出 eureka 服务 8761 端口所绑定的公共端口,
7、其代码如下。docker-compose port eureka 8761任务5.1 Compose编排工具的使用相关知识5.14重新构建服务build命令用于构建或重新构建服务,其命令格式如下。build options -build-arg key=val. SERVICE.其常用选项说明如下。(1)-no-cache:不使用缓存构建镜像。(2)-build-arg key=val:设置构建时变量。例如,构建镜像的代码如下。docker-compose build任务5.1 Compose编排工具的使用相关知识5.15启动服务start命令用于启动指定服务已存在的容器,其命令格式如下。st
8、art SERVICE.例如,启动nginx容器的代码如下。docker-compose start nginx任务5.1 Compose编排工具的使用相关知识5.16停止服务stop命令用于停止已运行服务的容器,其命令格式如下。stop SERVICE.例如,停止nginx容器的代码如下。docker-compose stop nginx任务5.1 Compose编排工具的使用相关知识5.17删除已停止服务的容器rm命令用于删除指定服务的容器,其命令格式如下。rm options SERVICE.其常用选项说明如下。(1)-f, -force:强制删除。(2)-s, -stop:删除容器时需
9、要先停止容器。(3)-v:删除与容器相关的任何匿名卷。例如,删除已停止的nginx容器的代码如下。docker-compose rm nginx任务5.1 Compose编排工具的使用相关知识5.18创建和启动容器up命令用于创建和启动容器,其命令格式如下。up options -scale SERVICE=NUM. SERVICE.其常用选项说明如下。(1)-d:在后台运行容器。(2)-t:指定超时时间。(3)-no-deps:不启动连接服务。(4)-no-recreate:如果容器存在,则不重建容器。任务5.1 Compose编排工具的使用相关知识5.1(5)-no-build:不构建镜像
10、,即使其会丢失。(6)-build:启动容器并构建镜像。(7)-scale SERVICE=NUM:指定一个服务(容器)的启动数量。例如,创建并启动nginx容器的代码如下。docker-compose up -d nginx任务5.1 Compose编排工具的使用相关知识5.19在运行的容器中执行命令exec命令用于在支持的容器中执行命令,其命令格式如下。exec options SERVICE COMMAND ARGS.其常用选项说明如下。(1)-d:在后台运行命令。(2)-privileged:给这个进程赋予特殊权限。(3)-u, -user USER:作为该用户运行该命令。任务5.1
11、Compose编排工具的使用相关知识5.1(4)-T:禁用分配伪终端,默认分配一个终端。(5)-index=index:多个容器时的索引数字,默认1。例如,登录到nginx容器中的代码如下。docker-compose exec nginx bash任务5.1 Compose编排工具的使用相关知识5.110指定一个服务启动容器的个数scale命令用于指定服务启动容器的个数,其命令格式如下。scale options SERVICE=NUM.例如,设置指定服务运行容器的个数,以service=num的形式指定。docker-compose scale user=3 movie=3任务5.1 Co
12、mpose编排工具的使用相关知识5.111其他管理命令(1)restart命令用于重启服务。(2)kill命令通过发送SIGKILL信号来停止指定服务的容器。(3)pause命令用于挂起容器。(4)image命令用于列出本地Docker的镜像。(5)down命令用于停止容器和删除容器、网络、数据卷及镜像。(6)create命令用于创建一个服务。(7)pull命令用于下载镜像。(8)push命令用于推送镜像。(9)help命令用于查看帮助信息。任务5.1 Compose编排工具的使用相关知识5.15.1.3 docker-compose.yml文件docker-compose.yml文件包含ve
13、rsion、services、networks三部分,其中,services和networks是关键部分。任务5.1 Compose编排工具的使用相关知识5.1常见的services书写规则如下。1image标签image标签用于指定基础镜像。services: web: image:nginx在services标签下的web为第二级标签,标签名可由用户自定义,它也是服务名称。image可以指定服务的镜像名称或镜像ID,如果镜像在本地不存在,则Compose会尝试获取这个镜像。任务5.1 Compose编排工具的使用相关知识5.12build标签 build标签用于指定Dockerfile所在
14、文件夹的路径。该值可以是一个路径,也可以是一个对象。Compose会利用它自动构建镜像,并使用构建的镜像启动容器。build: /path/to/build/dir也可以使用相对路径,即build: ./dir任务5.1 Compose编排工具的使用相关知识5.1可以设置上下文根目录,并以该目录指定Dockerfile。build: context: ./ dockerfile: path/of/Dockerfile可指定arg标签,与Dockerfile中的ARG指令一样,arg标签可以在构建过程中指定环境变量,并在构建成功后取消。build: context: ./dir dockerfi
15、le: Dockerfile args: buildno: 1任务5.1 Compose编排工具的使用相关知识5.13command标签command标签用于覆盖容器启动后默认执行的命令。command: bundle exec thin -p 3000也可以写为类似Dockerfile中的格式,例如:command: bundle, exec, thin, -p, 3000任务5.1 Compose编排工具的使用相关知识5.14dns标签dns标签用于配置DNS服务器,其可以是一个具体值。dns: 114.114.114.114也可以是一个列表。dns: - 114.114.114.114
16、- 115.115.115.115任务5.1 Compose编排工具的使用相关知识5.15environment标签environment标签用于设置镜像变量,与arg标签不同的是,arg标签设置的变量仅用于构建过程中,而environment标签设置的变量会一直保存在镜像和容器中。environment: RACK_ENV: development SHOW: true SESSION_SECRET:任务5.1 Compose编排工具的使用相关知识5.1或者environment: - RACK_ENV=development - SHOW=true - SESSION_SECRET任务5.
17、1 Compose编排工具的使用相关知识5.16env_file标签env_file标签用于设置从env文件中获取的环境变量,可以指定一个文件路径或路径列表,其优先级低于environment指定的环境变量,即当其设置的变量名称与environment标签设置的变量名称冲突时,以environment标签设置的变量名称为主。env_file: .env可以根据docker-compose.yml设置路径列表。env_file: - ./common.env - ./apps/web.env - /opt/secrets.env任务5.1 Compose编排工具的使用相关知识5.17expose
18、标签expose标签用于设置暴露端口,只将端口暴露给连接的服务,而不暴露给主机。expose: - 8000 - 8010任务5.1 Compose编排工具的使用相关知识5.18port标签port标签用于对外暴露端口定义,使用host:container格式,或者只指定容器的端口号,宿主机会随机映射端口。ports: - 3000 - 8763:8763 - 8763:8763任务5.1 Compose编排工具的使用相关知识5.19network_mode标签network_mode标签用于设置网络模式。network_mode: bridgenetwork_mode: hostnetwor
19、k_mode: nonenetwork_mode: service:service namenetwork_mode: container:container name/id任务5.1 Compose编排工具的使用相关知识5.110depends_on标签depends_on标签用于指定容器服务的启动顺序。任务5.1 Compose编排工具的使用相关知识5.111links标签links标签用于指定容器连接到当前连接,可以设置别名。links: - db - db:database - redis任务5.1 Compose编排工具的使用相关知识5.112volumes标签volumes标签用于
20、指定卷挂载路径,可以挂载一个目录或者一个已存在的数据卷容器。可以直接使用“host:container”格式,或者使用“host:container:ro”格式,对于容器来说,后者的数据卷是只读的,这样可以有效保护宿主机的文件系统。任务5.1 Compose编排工具的使用相关知识5.1volumes: / 只是指定一个路径,Docker 会自动创建一个数据卷(该路径是容器内部的) - /var/lib/mysql / 使用绝对路径挂载数据卷 - /opt/data:/var/lib/mysql / 以 Compose 配置文件为中心的相对路径作为数据卷挂载到容器 - ./cache:/tmp/
21、cache / 使用用户的相对路径(/ 表示的目录是 /home/ 或者 /root/) - /configs:/etc/configs/:ro / 已经存在的命名的数据卷 - datavolume:/var/lib/mysql任务5.1 Compose编排工具的使用相关知识5.113volumes_from标签volumes_from标签用于设置从其他容器或服务挂载数据卷,可选的参数是:ro或者:rw,前者表示容器只读,后者表示容器对数据卷是可读可写的,默认情况下是可读可写的。volumes_from: - service_name - service_name:ro - container
22、:container_name - container:container_name:rw任务5.1 Compose编排工具的使用相关知识5.114logs标签logs标签用于设置日志输出信息。logging: driver: syslog options: syslog-address: tcp:/192.168.0.42:123任务5.1 Compose编排工具的使用相关知识5.11. Compose工具的安装与卸载2. Compose应用案例任务5.1 Compose编排工具的使用任务实现5.1实训目的(1)掌握Compose工具的安装方法。(2)掌握Compose工具的使用方法。 实训
23、内容(1)在CentOS 7操作系统中安装Compose工具。(2)验证Compose工具是否正确安装。(3)使用WordPress搭建一个博客系统。(4)测试博客系统。任务5.1 Compose编排工具的使用项目实现 多容器搭建WordPress5.1Compose编排工具的使用5.1任务Swarm编排工具的使用5.2任务5.2Docker编排工具工程师小王在对Docker技术进行学习后发现,当有大量Docker容器需要跨主机部署时,Swarm工具能够更高效地完成部署工作,于是公司安排小王编写Swarm工具的安装及使用手册,以供公司相关技术人员学习,并在公司内部推广该技术。任务5.2 Swa
24、rm编排工具的使用任务要求5.25.2.1 swarm工具 Swarm是Docker公司在2014年12月初发布的一套用于管理Docker集群的较为简单的工具,由于Swarm使用标准的Docker API作为其前端访问入口,所以各种形式的Docker Client(Docker Client in Go、docker_py、Docker等)均可以直接与Swarm通信。旧版本的Docker Swarm使用独立的外部KV存储(如Consul、etcd、ZooKeeper),搭建了独立运行的Docker主机集群,用户可以像操作单台Docker主机一样操作整个集群,Docker Swarm可将多台Do
25、cker主机当作一台Docker主机来管理。任务5.2 Swarm编排工具的使用相关知识5.2新的Swarm Mode是在Docker 1.12中被集成到Docker引擎中的,引入了服务的概念,提供了众多的新特性,如具有容错能力的去中心化设计,内置服务发现、负载均衡、路由网格、动态伸缩、滚动更新、安全传输等功能。Swarm和Kubernetes比较类似,但是更加轻量,具有的功能比Kubernetes少一些。任务5.2 Swarm编排工具的使用相关知识5.25.2.2 swarm架构 Swarm作为一个管理Docker集群的工具使用时,需要先对其进行部署,可以单独将Swarm部署于一个节点。另外
26、,Swarm需要一个Docker集群,集群上每一个节点均安装有Docker。 Swarm架构中最主要的处理部分是Swarm节点,Swarm管理的对象是Docker Cluster,Docker Cluster由多个Docker Node组成,而负责给Swarm发送请求的是Docker Client。任务5.2 Swarm编排工具的使用相关知识5.25.2.3 Swarm相关概念1Swarm 集群的管理和编排使用了嵌入到Docker引擎中的SwarmKit,可以在Docker初始化时启动Swarm模式或者加入已存在的Swarm。任务5.2 Swarm编排工具的使用相关知识5.22节点 Node是
27、加入到Swarm集群中的一个Docker引擎实体,可以在一台物理机上运行多个Node,Node可以分为管理节点(manager节点)和工作节点(worker节点)两类。 当一个节点作为Swarm的Docker引擎实体,部署应用到集群中时,会提交服务到管理节点,管理节点调度任务到工作节点,管理节点还要执行维护集群状态的编排和集群管理的功能,工作节点接收并执行来自管理节点的任务。通常,管理节点也可以是工作节点,工作节点会报告当前状态给管理节点。任务5.2 Swarm编排工具的使用相关知识5.23服务 服务是在工作节点上执行任务的定义,在工作节点上执行,创建服务时,需要指定容器镜像。4任务 任务是指
28、在Docker容器中执行的命令,管理节点根据指定数量的任务副本来分配任务给工作节点。任务5.2 Swarm编排工具的使用相关知识5.25.2.4 Swarm常用命令 Swarm的常用命令有docker swarm、docker service和docker node。 docker swarm命令用于管理Swarm集群 docker service命令用于管理服务 docker node命令用于管理Swarm集群中的节点任务5.2 Swarm编排工具的使用相关知识5.2docker swarm常用命令任务5.2 Swarm编排工具的使用相关知识5.2命令描述docker swarm init初
29、始化一个Swarm集群docker swarm join加入集群作为工作节点或管理节点docker swarm join-token管理用于加入集群的令牌docker swarm leave离开Swarm集群docker swarm unlock解锁Swarm集群docker swarm unlock-key管理解锁钥匙docker swam update更新Swarm集群docker service常用命令任务5.2 Swarm编排工具的使用相关知识5.2命令描述docker service create创建服务docker service inspect显示一个或多个服务的详细信息dock
30、er service logs获取服务的日志docker service ls列出服务docker service rm删除一个或多个服务docker service scale设置服务的实例数量docker service update更新服务docker service rollback恢复服务到更新之前的配置Docker node常用命令任务5.2 Swarm编排工具的使用相关知识5.2命令描述docker node demote从Swarm集群管理器中降级一个或多个节点docker node inspect显示一个或多个节点的详细信息docker node ls列出Swarm集群中的节
31、点docker node promote将一个或多个节点加入到集群管理器中docker node ps列出一个或多个在节点上运行的任务,默认为当前节点docker node rm从Swarm集群中删除一个或多个节点docker node update更新一个节点Swarm编排工具的使用任务5.2 Swarm编排工具的使用任务实现5.2实训目的(1)掌握Docker Swarm在CentOS 7操作系统中的安装方法。(2)掌握Swarm集群的在线和离线创建方法。(3)掌握Swarm集群的自动编排方法。 实训内容(1)在CentOS 7操作系统中安装Swarm工具。(2)在线创建Swarm集群并自动编排。(3)离线创建Swarm集群并自动编排。任务5.2 Swarm编排工具的使用项目实训 使用Swarm集群和自动编排功能5.2ThankYOU!