容器编排部署

news2024/12/23 7:04:23

一、概述

容器编排部署的作用:

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


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

用于创建和管理docker host

docker compose

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

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

postgresql数据库容器

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

验证docker-compose命令是否存在

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

第一步:创建一个project目录

第二步: 定义web服务

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

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

第三步:定义haproxy服务

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

 

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

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

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

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

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

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

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

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

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

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

 vim app.py

 

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

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

 3、创建Dockerfile文件

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

CMD运行python文件app.py

4、创建编排 脚本

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

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

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

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

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

会自动下载需要的软件

 6、通过访问服务器ip+5000端口号可以查看访问次数

 2.3.3 使用容器运行wordpress应用

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

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

 

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

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

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

三、docker swarm

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

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

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

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

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


3.1 docker swarm架构

 


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

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

因为一个容器也算是任务

3.2 docker swarm部署环境准备


准备主机
3台主机

centos7.6
cpu、memory、disk

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

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

 第二步:安全准备

 第三步:根据官方文档安装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

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

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

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

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

 

3.3 docker swarm 应用

3.3.1制作发布服务的镜像

必须先部署好harbor

然后确保服务器能登录harbor

docker login 就能直接登录了

 可以打包需要的容器镜像

 

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

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

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

Dockerfile文件内容

 最后访问harbor网页可以看到有两个版本的镜像 

 

3.3.2 发布服务

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

 第一步:在manager node 上创建服务

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

 第二步:docker service ps 服务名称

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

 扩展和缩小

multiple 多个  replicated 复制

docker service scale 服务名称 =容器数量

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

删除服务   docker service rm 服务名称

滚动更新(版本回退)

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

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

 间隔更新

 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就是代表安装的进度

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

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

挂载的当前目录其实就是主机的/目录 挂载到容器的/abc

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

删掉服务 重新创建

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

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

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

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

 docker swarm 发布服务挂载网络卷

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

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

第一步:创建nfs服务

no_root_squash  注意别写错 

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

 exportfs -rv  输出共享目录

设置开机自启并 启动nfs服务  rpcbind nfs-server

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

第二步:在docker host中创建volume

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

查看volume本地卷列表

 docker volume inspect 卷名称    查看volume卷的详细信息

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

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

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

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


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

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

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

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

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

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

 

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

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

docker volume rm 卷名

第一步:创建project工程目录

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

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

第三步:编排部署文件

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

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

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

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

 自动创建了网络 和服务

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/422531.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【FMCW系统性能参数之测量精度公式推导】

本文编辑:调皮哥的小助理 连续多篇文章都在说FMCW雷达系统性能参数这个事儿,如: (1)从奈奎斯特采样定理推导FMCW雷达系统性能参数 (2)从FMCW毫米波雷达系统的性能参数理解4D成像毫米波雷达的设…

深度学习语义分割篇——FCN原理详解篇

🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题 🍊往期回顾:目标检测系列——开山之作RCNN原理详解    目标检测系列——Fast R-CNN原理详解    目标检测系列——Faster R-CNN原理详解 🍊近期目标&…

Unity --- 3d数学 --- 坐标系统

1.世界坐标系是固定不动的 2.每一个游戏物体在世界坐标系中都有对应的坐标和方向 1.轴心点的位置不是固定的,是可以人为设定的 1.Screen Space --- 屏幕坐标 2.我们看到的屏幕其实就是相机所在的平面的位置 --- 而屏幕坐标系的Z其实就是游戏中的物体到相机平面的…

GDOUCTF

WEB hate eat snake 这是一个JS的题目,但是这个题目好像有点奇怪,不是很理解,当时我找到了我寝室JS的大哥,跟大哥说了一下我的思路,就是他根据这个time然后/1000转化为秒,就当作是我们玩游戏的一个分数&a…

速卖通韩国下载量再次登顶,7500万投资换来回报

韩国市场,还是一片蓝海。 速卖通终于等到了回报。 近日,数据平台 Data ai 显示,3 月 9 日以来,速卖通再次成为韩国购物 App 下载量第一名,超过当地电商平台 Coupang。 这或许和速卖通近日在韩国的布局有关。 前些天…

使用File System Access API 让浏览器可以操作文件

使用File System Access API 让浏览器可以操作文件 在早期我们开始学习前端三件套时,经常会听到这样的说法:浏览器是一个沙盒,它不允许我们操作本地文件,但是现在这个说法已经不再适用了,因为我们可以使用 File Syste…

2023接口自动化测试,完整入门篇

1. 什么是接口测试 顾名思义,接口测试是对系统或组件之间的接口进行测试,主要是校验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系。其中接口协议分为HTTP,WebService,Dubbo,Thrift,Socket等类型,测试类型又主…

BBR算法

BBR算法 简述 bbr算法为google在2016年提出,用于改善tcp的性能,提升稳定性,降低延迟,更好地应对网络损伤。在整个算法调节周期中,bbr算法都在尽力维持最大bw和最小rtt。 对比传统的tcp算法 传统算法不能区分是拥塞导…

【RabbitMQ】Java操作RabbitMQ之入门Demo

目录 一、项目创建 二、生产者 三、消费者 一、项目创建 我们先在idea里创建两个Maven项目一个项目作为生产者&#xff0c;另一个作为消费者。创建完成后&#xff0c;在各自的pom.xml文件里引入Java使用RabbitMQ的依赖 <dependency><groupId>com.rabbitmq</g…

Android 单位和尺寸 以及ViewPager的使用

一 px 和 pt 1 px pixels 像素点 2 pt point 一个标准的长度单位&#xff0c;1pt 1/72英寸&#xff0c;用于印刷业&#xff0c;非常简单易用。 二 dp 和 sp 1 dp 就是 dip device independent pixels(设备独立像素) 不同设备有不同的显示效果。这个和设备硬件有关系&…

【数学推导找规律】全排列的价值【蓝桥杯13届】

欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#xff1a;重难点★✔ 蓝色文字表示&#…

ChatGPT资讯—2023.4.14

一、 最新资讯 1. 国内大模型&#xff1a; 4月8日&#xff0c;华为云人工智能领域首席科学家田奇首次介绍了华为“盘古大模型”的进展及其应用。 紧接着4月10日&#xff0c;一天内三个大模型争相“官宣”&#xff0c;包括搜狗创始人王小川宣布即将投入创业的大模型产品名为“…

机器学习 day04(梯度下降算法,学习率,偏导数)

梯度下降 我们可以用一种更系统的方法&#xff0c;来找到一组w&#xff0c;b&#xff0c;使成本函数的值最小。这个方法叫梯度下降算法&#xff0c;它可用于最小化任何函数&#xff0c;不仅仅包括线性回归的成本函数&#xff0c;也包括两个以上参数的其他成本函数在线性回归中…

2023最新面试题-Java-4

Date相关 1. java8的Date相关API&#xff1a; 常用 api 1、 获取当前日期 LocalDate.now() 2、创建日期 LocalDate date LocalDate.of(2020, 9, 21) 3、获取年份 date.getYear()//通过 TemporalField 接口的实现枚举类 ChronoField.YEAR 获取年份 date.get(ChronoFie…

车载通信——J1939 DM1

诊断故障代码&#xff08;DTC&#xff09;由4 个独立域构成&#xff1a; a. 可疑参数的编号(SPN) 19位 b. 故障模式标志(FMI) 5位 c. 发生次数(OC) 7位 d. 可疑参数编号的转化方式(CM) 1 位 Byte1 – Lamp Status Bits1 – 2 Protection Lamp 保护灯状态 …

基于 NIOSII 软核的流水灯实验

文章目录一、硬件部分设计1、进行 Qsys 系统设计二、逻辑连接三、软件设计四、总结一、硬件部分设计 1、进行 Qsys 系统设计 新建kernel.qsys文件&#xff1a; 设置clk时钟&#xff1a; 添加 Nios II 其余选项保持默认 添加 jtag uart 接口 添加片上存储器 On-Chip Memory(R…

【C++高级】手写线程池项目-经典死锁问题分析-简历项目输出指导

作为五大池之一&#xff0c; 线程池的应用非常广 泛&#xff0c;不管是客户端程序&#xff0c;还是后台服务程序&#xff0c;掌握线程池&#xff0c;是提高业务处理能力的必备模块 本课程将带你从零开始&#xff0c;设计一个支持fixed和cached模式的线程池&#xff0c;玩转C11、…

使用FRP(快速反向代理)实现内网穿透——以腾讯云服务器为例

一、FRP简介 FRP&#xff0c;即快速反向代理技术&#xff08;fast reverse proxy&#xff09;。本文的FRP程序是基于github开源项目GitHub - fatedier/frp。当前&#xff0c;该程序可实现&#xff1a;“将位于 NAT 或防火墙后面的本地服务器暴露给互联网”。它目前支持 TCP 和…

金山衍生新软件,wps,excel用户已在用,Access用户:以后就它了

我们常会用到微软的办公软件Word、Excel、PPT、Outlook&#xff0c;但在数据处理方面还是得看Access。Access用简短的表述来说就是微软开发的一个关系数据库管理系统。★好用&#xff0c;可门槛高&#xff0c;够不着 为啥说数据处理得看Access呢&#xff1f;举个例子&#xff0…

如何实现视觉识别形状

1. 功能说明 通过摄像头识别圆形及矩形两种形状。 2. 电子硬件 本实验中采用了以下硬件&#xff1a; 主控板 Basra主控板&#xff08;兼容Arduino Uno&#xff09; 扩展板 Bigfish2.1 电池7.4V锂电池通信2510通信转接板WiFi路由器 其它 摄像头 配置OpenCV的Visual Studio 2015.…