在以前的文章中咱们介绍了Docker相关的基础知识以及如何建立一个镜像并以一个容器实例来运行这个镜像;众所周知,目前微服务的开发模式逐渐成为主流的开发模式,在咱们的实际开发流程中,大概开发流程是这样的,首先咱们针对特定业务需求完成一个微服务的开发工做,而后咱们利用docker将微服务打包成一个镜像(image), 而后将镜像发布到咱们的私有镜像仓库中,最后咱们能够在多个环境中以容器的形式来运行这个镜像。若是针对一个微服务的部署这种方式看起来还算不错,可是现实开发中咱们开发的绝对不是一个微服务,所以咱们将面对的多是多个微服务的部署工做,针对多个微服务的部署若是咱们还按照以上的方式来进行,那对于运维人员来讲会有不少重复性的工做,针对这种状况,Docker内置的Compose组件为咱们解决了这个问题。在实际动手操做以前让咱们先了解一下compose的定义。html
compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。Docker官方给Compose的定位是:Defining and running multi-container Docker applications,其前身是开源项目Fig。在以前的介绍中,咱们能够经过Dockerfile模板文件来定义一个单独的应用容器。可是在咱们实际的开发过程当中,咱们常常会碰到须要多容器相互配合来完成某项任务,针对这种状况compose应运而生。它容许用户经过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)。前端
在Compose中有一个很是重要的概念:服务。git
在分布式应用中,应用的不一样部分称为"服务"。例如,假设有一个视频共享网站,它可能提供用于在数据库中存储应用程序数据的服务,用于在用户上传一些内容后在后台进行视频转码的服务,用于前端的服务等。在Compose中一项服务仅运行一个镜像,但它会编制镜像的运行方式:例如使用的端口,容器的多少个从节点应运行才能使服务的容量知足其需求等。扩展服务就是更改运行该软件的容器实例数,并将多个计算资源分配给进程中的服务。全部以上这些设置咱们均可以经过定义一个docker-compose.yml(该文件与Dockerfile文件不一样,Dockerfile文件必须命名为Dockerfile,而该文件的文件名能够自行定义,官方给的命名为docker-compose,咱们就用官方的命名规则来命名)文件来实现。web
Docker Desktop for Windows 和 Docker Toolbox已经包含了对Compose组件的安装,所以咱们没必要再单独进行安装,咱们能够经过使用docker-compose --version指令来查看当前机器上的compose版本,如图所示:docker
该部分会用到以前文章中已经push到docker hub镜像仓库中的镜像文件。让咱们来建立第一个docker-compose.yml文件,文件内容以下图所示:数据库
该文件中主要定义了如下几项:json
version定义了咱们当前compose文件格式的版本。浏览器
Services是服务的根节点,下方定义的就是咱们要包含在这个compose中的全部的服务,本次示例咱们只包含一个服务,web表示的是咱们定义的服务的名称,你们能够根据本身service的含义来命名。网络
image表示的是当前service的镜像仓库地址app
ports表示的是将容器的80端口与主机的5000端口mapping
networks表示的是配置容器链接的网络
HOST:CONTAINER
格式来映射端口时,若是你使用的容器端口小于 60 而且没放到引号里,可能会获得错误结果,由于 YAML
会自动解析 xx:yy
这种数字格式为 60 进制。为避免出现这种问题,建议数字串都采用引号包括起来的字符串格式。
咱们进入到该文件所在的目录,并在cmd中经过docker指令docker-compose up来执行该文件,如图所示:
咱们经过浏览器访问http://localhost:5000,如图所示:
这样咱们就经过compose发布并运行了咱们的一个service(一个镜像的容器实例)
你们可能已经意识到目前咱们在compose文件中定义的内容和单独执行docker run指令实际上是没有太大区别的,确实在compose中定义的单个服务的相关指令关键字和docker run指令中包含的关键字在含以上都是相似的,可是经过执行docker run指令一次只能建立出来一个image的一个容器实例,经过compose咱们能够建立出来一组容器实例,咱们管每个容器实例叫作一个service,而compose正是对这一个个service进行了编排,包括service之间的依赖关系,启动顺序,所须要消耗的资源等等。在本篇咱们只是单独的介绍了compose的基本用法和基本指令,你们能够经过地址对更多的compose关键字进行学习。
但愿本篇文章可以更好的帮助你们理解docker compose的概念。若是有任何问题均可以给我留言。
注意: 因为google对定义的yml文件格式要求的十分严格,所以你们在编写本身的yml文件时必定要格外当心注意,这里给你们提供一个在线的yml文件格式校验器,你们能够对本身的yml文件进行校验。
相关资料:
yeasy.gitbooks.io/docker_prac…