Docker-Compose编排与部署

一:docker-compose 简介

     Docker Compose的前身是Fig,它是一个定义及运行多个Docker 容器的工具。可以使用YAML文件来配置应用程序的服务。然后,使用单个命令,您可以创建并启动配置中的所有服务。Docker Compose 会通过解析容器间的依赖关系( link,网络容器-net-from或数据容器-volume-from)按先后顺序启动所定义的容器。

     Compose是Docker 的服务编排工具,主要用来构建基于Docker的复杂应用,Compose通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景。

     Compose适用于所有环境:生产,开发,测试以及CI工作流程。使用Compose基本上是个三步过程:

1:使用Dockerfile定义应用程序的环境,以便在任何地方进行复制。e

2:在docker-compose.yml.中定义组成应用程序的服务,以便它们可以在隔离的环境中一起运行。

3:运行docker-compose开始并运行整个应用程序。

    docker-compose官方文档: https://docs.docker.com/compose/overview/e

     docker-compose是用来做docker的多容器控制,有了docker-compose 你可以把所有繁复的 docker操作全都用一条命令自动化完成。从上图可以看到,这位compose非常开心的把N多个容器抓在一起,根据自己的心情来编排部署。

      Docker对于运维或开发者来说, Docker最大的优点在于它提供了一种全新的发布机制。这种发布机制,指的是我们使用Docker镜像作为统一的软件制品载体,使用Docker容器提供独立的软件运行上下文环境,使用Docker Hub提供镜像统一协作,最重要的是该机制使用Dockerfile.定义容器内部行为和容器关键属性来支撑软件运行。

       Dockerfile,作为整个机制的核心。在Dockerfile .中不但能够定义使用者在容器中需要进行的操作,而且能够定义容器中运行软件需要的配置,于是软件开发和运维终于能够在一个配置文件上达成统一。运维人员使用同一个Dockerfile能在不同的场合下“重现”与开发者环境中一模一样的运行单元(Docker容器)出来。

二:compose的优点

  先来了解一下我们平时是怎么样使用docker的?把它进行拆分一下

1、docker search镜像,是不是先查找一个镜像;

2、docker run -itd镜像名称,然后在运行这个镜像;

3、然后如果你要在运行第二个镜像、第三个镜像.....等等,你是不是乂要docker search, dockerrun运行。

      上面" docker run -itd镜像名称“这只是最小的动作,如果你要映射硬盘,设置nat,网络或者映射端口等等。就要做更多的docker操作,这显然是非常没有效率的,况且如果你要大规模部署,是不是觉得就很麻烦了。

     但是我们写在 docker-compose里面就很好了。你只需要写好后只运行一句;edocker-compose up -d

三:编排和部署

      编排,即 orchestration,它根据被部署的对象之间的耦合关系,以及被部署对象环境的依赖,制定部署流程中各个动作的执行顺序,部署过程所需要的依赖文件的存储位置和获取方式,以及如何验证部署成功。这些信息都会在编排工具中以指定的格式(比如配置文件或者特定的代码)来要求运维人员定义并保存起来,从而保证这个流程能够随时在全新的环境中可靠有序地重现出来。

     部署,即 deployment,它是指按照编排所指定的内容和流程﹐在日标机器上执行编排指定环境初始化,存放指定的依赖和文件,运行指定的部署动作,最终按照编排中的规则米确认联署成功。<

      这么来解释吧,编排是一个指挥家,他的大脑里存储了整个乐曲的演奏流程,对于每一个小节每一段音乐的演奏方式、开始、结束他都了然于胸;部署就是整个乐队,他们严格按照指挥家的意图用乐器来完成乐谱的执行,在需要时开始演奏,又在适当的时机停止演奏。最终,两者通过协作就能把每一位演奏者独立的演奏通过组合、重叠、衔接来形成高品位的交响乐。

四:compose原理

 docker-compose的调用过程扁平的像一张纸,仅用一张简单的模块图就足够解释明白,如下图所示:

    首先,用户执行的docker-compose up指令调用了命令行中的启动方法。功能很简单明了,一个docker-compose.yml定义了一个docker-compose的 project,docker-compose操作提供的命令行参数则作为这个project的启动参数交由 project模块去处理。

     其次,如果当前宿主机已经存在与该应用对应的容器,docker-compose将进行行为逻辑判断。如果用户指定可以重新启动已有服务,docker-compose就会执行service模块的容器重启方法,否则就将直接启动已有容器。这两种操作的区别在于前者会停止旧的容器,创建启动新的容器,并把旧容器移除掉。在这个过程中创建容器的各项定义参数都是从docker-compose up指令和 docker-compose.yml中传入的。

    接下来,启动容器的方法也很简洁,这个方法中完成了一个Docker容器启动所需的主要参数的封装,并在 container模块执行启动。该方法所支持的参数我想大多数朋友过是有所了解的。

    最后,container模块会调用docker-py..客户端执行向Docker daemon发起创建容器的POST请求,再往后就是Docker处理的范畴了,相信看过我这篇文章Docker:架构拆解请的朋友就明白了。

    为了能够说明compose 如何实现上述编排与部署的原理,下面和大家分享一个通过compose来编排部署LNMP服务来更好的理解它。

五:compose 应用案例

1:安装docker-compose

《1》:rz

《2》:mv docker-compose /usr/bin/

《3》:chmod +x /usr/bin/docker-compose

《4》: docker-compose version

2docker-compose用法

docker-compose [-f <arg> …] [options][COMMAND][ARGS…]

docker-compose 常用选项

  • --verbose  输出更多调试信息
  • --version   打印版本并推迟
  • -f,--file FILE 使用特定的compose版本文件,默认为docker-compose.yml
  • -p,--project-name NAME 指定项目名称,默认使用目录名称

 docker-compose 常用命令

  •  build       构建或重建服务
  •  kill           杀掉容器
  •  logs         显示容器的输出内容
  •  port         打印绑定的开发端口
  •  PS            显示容器
  •  pull           拉取服务镜像
  •  restart       充气服务
  •  rm             删除停止的容器
  •  run            运行一个一次性命令
  •  scale          设置服务的容器数目
  •  exec          切换到容器内
  •  start          开发服务
  •  stop           停止服务
  •  up              创建并启动容器

其实这些常用命令跟docker的命令功能是一样的 。

3Yaml 简介

     YAML是一种标记语言,可读性很强。类似于XML 数据描述语言,语法比 XML简单的多。YAML数据结构通过缩进来表示,连续的项目通过减号来表示,键值对用冒号分割,数组用括号插起来,hash 用花括号插起来。

YAML文件格式注意事项:

         在缩排中空白字符的数日并不是非常重要,只要相同阶层的元素左侧对齐就可以了(不过不能使用TAB字符);

  • 通常开头缩进2个空格;c
  • 字符的后面缩进1个空格,比如冒号、逗号、横杆;
  • <支持#注释;
  • 允许在文件中加入选择性的空行,以增加可读性;

《1》:rz

《2》:unzip compose_lnmp-190606.zip

《3》:cd compose_lnmp/

《4》: ls

《5》:cat nginx/run.sh

《6》:rz
《7》:docker load < mysql_5.6.tar

《8》:cd compose_lnmp/

《9》:docker-compose up -d

《10》:验证

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BK_小小关

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值