容器编排部署

一、概述

容器编排部署的作用:

实现复杂容器应用架构之间的互联,减少大量容器部署的成本


Docker"三剑客"编排部署
工具︰
docker machine

用于创建和管理docker host

docker compose

通过一个文件定义复杂的容器应用之间的关系

容器与容器之间的依赖也可以在docker-compose.yml文件里面定义

容器编排部署_第1张图片

postgresql数据库容器容器编排部署_第2张图片

docker swarm

用于管理docker host
把docker host生成一个集群
可以使用YAML文件实现复杂容器应用编排
以上就是docker三剑客

kubernetes k8s  枯吧力死

归云原生计算基金会
能够实现复杂容器应用的编排部署

容器自动装箱功能
容器滚动更新及回滚

容器水平扩展
配置中心
密钥和存储管理
容器云平台使用kubernetes完成核心功能

mesos + marathon
mesos集群资源管理   每次都去请求 linux,容器一旦发生响应延迟就不行
marathon容器编排部署  这个可以进行容器的定时启动和运行时间的 控制

二、docker compose
 

2.1 docker compose 作用

在一个文件中定义复杂的容器应用之间的关系,用一个命令即可执行。

YAML,类似于htmI,xml  都是标记语言
. YAML格式文件
. docker-compose 使用yaml文件启动容器
start & stop   启动容器与关闭并删除容器
down & up        关闭容器与 开启新的容器

2.2 docker compose的定义方法

容器分三层:
工程project一个目录
服务service用于定义容器资源(镜像、网络、依赖、容器)

容器container 用于运行服务
使用Compose基本上分为三步∶

1.Dockerfile定义应用的运行环境
2.docker-compose.yml定义组成应用的各服务

3.docker-compose up启动整个应用
 

 2.3 docker compose的部署

先ping一下网络,需要外网下载yum

安装好epel-release和python2-pip之后才能安装docker-compose

容器编排部署_第3张图片

验证docker-compose命令是否存在

容器编排部署_第4张图片

 2.3.1 使用docker compose 部署应用的案例

第一步:创建一个project目录

第二步: 定义web服务

在web目录中创建一个Dockerfile文件,目的就是  创建容器镜像

容器编排部署_第5张图片

 再创建一个index.py 文件 可以在网上找一个python的web文件

第三步:定义haproxy服务

在project目录创建一个haproxy目录,在该目录下创建haproxy.cfg文件

 容器编排部署_第6张图片

第四步:创建docker-compose.yaml文件

容器编排部署_第7张图片

容器编排部署_第8张图片

如果ports的端口格式写错启动容器会报错,"80:80"

 第五步:用docker-compose 命令启动project项目工程

 注意:启动工程的命令必须在工程目录下  up启动新的容器  down关闭

-d 可以后台启动,后台启动就可以在docker compose服务器当前终端启动或关闭容器

不加-d就是当前终端启动,通过浏览器访问测试可以清楚的在终端看见报错问题

容器编排部署_第9张图片

python2.7和haproxy的容器镜像自动下载之后就可以通过网页访问服务器70端口查看haproxy的页面,80端口访问的是工程目录里面的index.py

一共三台web服务器容器+一个haproxy容器

容器编排部署_第10张图片

2.3.2 docker-compose编排应用案例 Flask redis

1、创建一个python应用目录,再创建一个 python文件

 vim app.py

容器编排部署_第11张图片

 

 2、创建安装的软件需求列表

vim requirements.txt  直接列出需求的软件,因为需要创建这些软件的容器镜像

 3、创建Dockerfile文件

通过python2.7镜像里面的pip安装需求软件清单requirements.txt

CMD运行python文件app.py

容器编排部署_第12张图片

4、创建编排 脚本

在同一目录(应用目录)下创建docker-compose.yml

yml文件2版本支持空格,3版本才可以tab,tab也是四个空格

web容器内的5000端口映射到主机的5000端口

将当前目录挂载到web容器内/code
web容器依赖于redis容器
redis容器从Docker Hub获取镜像

容器编排部署_第13张图片

 5、运行docker-compose up 终端启动项目工程

会自动下载需要的软件

容器编排部署_第14张图片

 6、通过访问服务器ip+5000端口号可以查看访问次数容器编排部署_第15张图片

 2.3.3 使用容器运行wordpress应用

第一步:创建一个工程目录

 第二步:创建docker-compose.yml文件

容器编排部署_第16张图片

 

 第三步:运行docker-compose启动项目工程

docker-compose up 建议不加-d 方便排错

容器编排部署_第17张图片

 最后就可以用服务器ip+8000端口访问服务了,这个应用是用容器来运行的,并且数据挂载到了本地服务器的工程目录 ,实现了数据的持久化

三、docker swarm

中文意思是码头人群,是docker host集群管理工具

docker官方提供的用来统一集群管理的,把整个集群资源做统一调度

比kubernetes要轻量化  哭吧力死
实现scaling 规模扩大或缩小  死给您 
实现rolling update滚动更新或版本回退

实现service discovery 服务发现(让容器中的服务被发现)

实现load balance负载均衡
实现route mesh路由网格,服务治理


3.1 docker swarm架构

容器编排部署_第18张图片

 


节点(node)就是一台docker host
管理节点(manager node)负责管理集群中的节点并向工作节点分配任务。

工作节点(worker node)接收管理节点分配的任务,运行任务
服务(services),在工作节点运行的,由多个任务共同组成
任务(task),运行在工作节点上的容器或容器中包含的应用,是集群调度中的最小管理单元

因为一个容器也算是任务

3.2 docker swarm部署环境准备


准备主机
3台主机

centos7.6
cpu、memory、disk

第一步:准备ip及主机名称

可以通过scp把网卡配置文件上传到其他主机之后再配置ip

容器编排部署_第19张图片

 第二步:安全准备

容器编排部署_第20张图片

 第三步:根据官方文档安装docker

yum -y install docker-ce

daemon.json文件不用改,但是如果要使用本地仓库可以修改

 就是删掉ExecStart后面的

systemctl enable docker

systemctl start docker

第四步:docker swarm 集群部署

 集群初始化docker swarm init --listen-addr manager node ip:2377

容器编排部署_第21张图片

 根据情况把命令复制到其他node节点   可以再添加一个manager节点

添加工作节点到swarm集群之后可以

用docker node ls 列出swarm集群中的所有node节点

包括节点的信息和节点安装的docker版本以及节点的状态

容器编排部署_第22张图片

 

3.3 docker swarm 应用

3.3.1制作发布服务的镜像

必须先部署好harbor

然后确保服务器能登录harbor

docker login 就能直接登录了

容器编排部署_第23张图片

 可以打包需要的容器镜像

容器编排部署_第24张图片

 

node1必须配置daemon.json 非安全仓库

 daemon.json文件必须配置ip,要不然上传镜像到harbor仓库时会报错

"insecure-registries":  ["http://ip"]

容器编排部署_第25张图片

Dockerfile文件内容容器编排部署_第26张图片

 最后访问harbor网页可以看到有两个版本的镜像 容器编排部署_第27张图片

 

3.3.2 发布服务

在这里需要注意的是在swarm mode中对外暴露的是服务( service )的概念,而不是容器。在swarm mode的设计中,为了保持高可用架构,它准许同时启动多个容器共同支撑一个服务,如果一个容器挂了,它会自动使用另一个容器。

容器编排部署_第28张图片

 第一步:在manager node 上创建服务容器编排部署_第29张图片

映射的端口是用于访问web页面的,也就是之前是80端口httpd服务,但是容器端口映射之后就是8090

 第二步:docker service ps 服务名称

查看服务运行在哪些节点上

容器编排部署_第30张图片

 扩展和缩小

multiple 多个  replicated 复制

docker service scale 服务名称 =容器数量容器编排部署_第31张图片

 缩小就是把容器数量3个变成1个就行,减少容器数量就是 缩小

删除服务   docker service rm 服务名称

滚动更新(版本回退)

更新服务  docker service update --image 新的镜像名称  服务名称

把v2改成v1就能变成版本回退

 间隔更新容器编排部署_第32张图片

 update-parallelism 1 间隔是1个容器

间隔延迟30s --update-delay 30s

docker stack


早期使用service发布,每次只能发布一个service
yaml可以发布多个服务,但是使用docker-compose只能在一台主机发布

docker stack借助docker swarm发布多服务
是docker生态service发布的最高层次

使用docker stack部署服务

 deploy 部署   -c 通过yml文件部署   stack-demo 是测试案例的意思

 docker stack ls 可以看到有3个服务  集群是swarm

docker stack  部署其实就是通过docker-compose.yml文件去安装应用镜像images

replicas就是代表安装的进度

容器编排部署_第33张图片

 docker swarm 发布服务挂载本地卷实现数据持久化存储

--mount "type=bind,source=$PWD,target=目标目录" --publish 端口映射

挂载的当前目录其实就是主机的/目录 挂载到容器的/abc容器编排部署_第34张图片

 如果创建服务的时候发现错了,可以docker service rm 服务名称

删掉服务 重新创建

可以通过docker ps 查看所有的容器信息

容器编排部署_第35张图片

可以根据服务的名称或镜像 的名称找到容器的名称

容器编排部署_第36张图片

 本地卷挂载到容器目录虽然实现了持久化存储,但是容器横向扩展的时候,每个node节点都会运行相同的容器,但是写入的统一的数据(例如/var/www/html/index/index.html)又必须重复操作,每台服务器都在本地写入一次,费时费力

容器编排部署_第37张图片

 docker service scale 扩展了3个服务在集群中随机分配,可能是每台服务器运行一个

容器编排部署_第38张图片

 docker swarm 发布服务挂载网络卷

实现跨docker host之间容器数据共享

持久化保存数据到网络服务器中

第一步:创建nfs服务

no_root_squash  注意别写错 

容器编排部署_第39张图片

nfs服务器端在node3 所以node3就必须创建共享目录 其他节点创建挂载目录

 exportfs -rv  输出共享目录

设置开机自启并 启动nfs服务  rpcbind nfs-server容器编排部署_第40张图片

 在集群中的其他服务器查看共享目录是否存在

容器编排部署_第41张图片

第二步:在docker host中创建volume

整个集群的所有主机都必须创建volume

查看volume本地卷列表容器编排部署_第42张图片

 docker volume inspect 卷名称    查看volume卷的详细信息容器编排部署_第43张图片

 o :指定哪个主机输出的什么权限

第三步:使用docker  service 发布服务时使用volume

手动启动service时挂载
前题条件是nfs服务已经被挂载到本地 其实就是共享目录是否都在服务器上

因为整个集群的volume卷都是靠共享目录的服务器ip挂载的


创建多副本时需要在每个容器运行的docker hosts上添加volume

创建服务时必须在manager node 管理节点上,因为可以分配任务给其他工作节点

容器编排部署_第44张图片

测试可以在nfs服务器上的共享目录中修改文件

 使用每个节点的 ip+81端口就能访问到AAAA的网页

因为其他节点把共享目录挂载到了nginx服务的项目目录,所以千万注意获取应用镜像之前先确认镜像里面的文件是否干净

启动容器的过程中会自动生成,所以需要干净的 应用镜像

 

 docker swarm 网络存储卷编排部署services

前提是必须删除之前所有节点创建的网络存储卷的挂载smartvolume1

docker volume rm 卷名

第一步:创建project工程目录

第二步:在工程目录中创建yaml文件

 yaml版本必须是3.3,其他的可能不支持

第三步:编排部署文件

千万注意:condition千万不能写错

容器编排部署_第45张图片

 第四步:使用docker stack 部署yaml文件

nginx-stack是自定义命名docker stack部署的服务名称

可以查看docker stack 里面的服务的信息

容器编排部署_第46张图片

 自动创建了网络 和服务

docker volume ls 查看smartvolume1卷是否挂载成功,因为是通过docker stack 部署的,所以卷的名称前缀就是nginx-stack

你可能感兴趣的:(docker,容器,运维)