Docker Compose集成式应用组合及service编排
Compose简介
Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。其代码目前在 https://github.com/docker/compose 开源。
Compose定位是定义和运行多个Docker容器的应用,其前身是开源项目Fig。
使用一个Dockerfile模板文件,可以很方便的定义一个单独的应用容器,然而在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务。例如要实现一个Web项目,除了Web服务器本身,通常还需要后端的数据库服务容器,甚至负载均衡容器等。
Compose恰好满足了这样的需求。它可以通过一个单独的docker-compose.yml模板文件来定义一组相关联的应用容器项目(project)。
Compose中有两个重要的概念:
- 服务(service):一个应用的容器,实际上可以包含若干个运行相同镜像的容器实例
- 项目(project):由一组关联的应用容器组成一个完整的业务单元
Compose的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷的生命周期管理。
Compose项目由Python编写,实际上调用了Docker服务提供的API来对容器进行管理
Compose的安装与卸载
Compose可以通过Python的包管理工具pip进行安装,也可以直接下载编译好的二进制文件使用,甚至能够直接在Docker容器中运行。
Docker for Mac,Docker for Windows自带docker-compose二进制文件,安装Docker之后可以直接使用,Linux系统需要单独的二进制文件或pip进行安装。
查看compose的安装版本:
docker-compose --versino
Linux下的二进制安装:
curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
pip安装:
sudo pip install -U docker-compose
Compose使用示例
应用场景:一般Web网站都会依赖第三方的提供的服务,如DB,cache,以compose编排运行dubbo-admin为例
- 获取源码
从github上获取dubbo-admin的master分支源码git clone -b master https://github.com/apache/incubator-dubbo-ops.git
修改admin中的application配置,把zookeeper地址改为zookeeper://zookeeper:2181
在项目根目录下使用maven进行打包
mvn clean package -Dmaven.test.skip=true
构建镜像
在dubbo-admin目录下编写Dockerfile文件,写入以下内容:FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD ./target/dubbo-admin-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]
使用以下命令构建镜像
docker build -t dubbo-admin:1.0 .
编写docker-compose.yml文件
在项目根目录下编写docker-compose.yml文件写入以下内容version: '3.4'
services:
zk_server:
image: zookeeper:3.4
ports:
- 2181:2181
dubbo-admin:
image: dubbo-admin:1.0
links:
- zk_server:zookeeper
depends_on:
- zk_server
ports:
- 7001:7001
运行compose项目
在docker-compose.yml文件所在目录执行:docker-compose up
在浏览器中访问http://ip:7001 登录验证,默认用户名密码:root/root,guest/guest
Compose命令说明
执行docker-compose [COMMAND] —help 或者docker-compose help [COMMAND]可以产看命令的使用帮助。
docker-compose命令的基本使用格式是:
docker-compose [-f=<arg>...][options][COMMAND][ARG...]
选项说明:
-f, —file 指定模板文件,默认为docker-compose.yml,可以多次指定
-p, —project-name 指定项目命称,默认使用所在目录名称作为项目名
—x-networking 使用Docker的可插拔网络后端特性
—x-networking-driver 指定网络后端的驱动,默认为bridge
—verbose 输出更多调试信息
-v, —version 打印版本并退出
| 命令 | 说明 |
|---|---|
| build | 格式为docker-compose build [option] [SERVIVE] 构建项目中的服务容器 可随时在项目目录下运行docker-compose build来重新构建服务 选项包括: —force-rm 删除构建过程中的临时容器 —no-cache 构建镜像过程中不使用cache —pull 始终尝试通过pull来获取更新版本的镜像 |
| version | 打印版本信息,格式位:docker-compose version |
| config | 验证compose yml文件的格式是否正确,若正确则显示配置,若格式错误显示错误原因 |
| exec | 进入指定的容器 |
| images | 累出compose yml文件中包含的镜像 |
| logs | 查看服务容器的输出,默认情况下,会将不同服务的输出使用不同的颜色来区分,可以通过—no-color来关闭颜色 |
| down | 停止up命令所启动的容器,并移除网络 |
| help | 获得一个命令的帮助 |
| kill | 通过发送SIGKILL信号来强制停止服务器容器 |
| pause | 暂停一个服务容器 |
| port | 打印某个容器端口所映射的公共端口 |
| ps | 列出项目中目前所有的容器 |
| push | 推送服务依赖的镜像到Docker仓库 |
| pull | 拉取服务依赖的镜像 |
| restart | 容器项目中的服务 |
| rm | 删除所有停止状态的服务容器,推荐先执行docker-compose stop命令来停止容器 |
| run | 在指定服务上执行一个命令, 如:docker-compose run ubuntu ping docker.com |
| scale | 设置指定服务运行的容器数bi,如:docker-compose scale web=3 db=2将启动3容器运行web服务,2个容器运行db服务 |
| start | 启动已存在的服务容器 |
| stop | 停止已存在的服务容器 |
| top | 查看各个服务容器内运行的进程 |
| unpause | 恢复处于暂停中的服务 |
| up | 该命令会尝试自动完成包括构建镜像,创建服务,启动服务,并关联服务相关容器的一系列操作,链接的未被启动的服务都将被自动启动。 选项说明: -d 在后台运行服务容器 —no-color 不使用颜色来区分不同的服务的控制台输出 —no-deps 不启动服务所连接的容器 —force-recreate 强制重新创建容器,不能与—no-recrate同时使用 —no-recreate 如果容器已经存在了,则不重新创建,不能与—force-recreate同时使用 —no-build 不自动构建缺失的服务镜像 -t,—timeout 停止容器时的超时时间,默认为10秒 |
Compose模板文件
模板文件是Compose的核心,其涉及的指令关键字也比较多,大部分指令跟docker run相关的参数含义类似。默认的模板文件名称为docker-compose.yml,格式为YAML格式。
每个服务都必须通过image指令指定镜像或build指令(需要Dockerfile)等来自动构建镜像。如果使用build指令,在Dockerfile中设置的选项(如:CMD,ENV 等)将会自动被获取,无需在docker-compose.yml文件中再次设置。
常用指令介绍
build
指定Dockerfile所在文件夹的路径(可以是绝对路径,也可以是相对于docker-compose.yml文件的路径),Compose将会利用它自动构建镜像,然后使用这个镜像。
使用context指令指定Dockerfile文件所在文件夹的路径
使用dockerfile指令指定Dockerfile的文件名
使用args令指定构建镜像时的变量
version: '3'
services:
webapp:
build:
context:./dir
dockerfile:Dockerfile
args:
buildno:1
command
覆盖容器启动后默认执行的命令
command:echo "hello word"
container_name
指定容器名称,默认会使用 项目名称服务名称序号 这样的格式
devices
指定设备映射关系
devices:
- "/dev/ttyUSB1:/dev/ttyUSB0"
depends_on
解决容器的依赖,启动先后的问题
dns
自定义DNS服务器,可以是一个值,也可以是一个列表
environment
设置环境变量,可以使用数组或字典两种格式,指给定名称的变量会自动获取Compose主机上对应变量的值,可以用来防止泄露不必要的数据。
expose
暴露端口,但不映射到宿主机,只被连接的服务访问,仅可以指定内部端口为参数。
extra_hosts
类似Docker中的—add-host参数,指定额外的host名称映射信息
extra_hosts:
- "googledns:8.8.8.8"
会在启动启动后的服务容器中 /etc/hosts 文件中添加“8.8.8.8 googledns”
healthcheck
通过命令检查容器是否健康运行
image
指定镜像名称或镜像ID,如果镜像在本地不存在会尝试拉取这个镜像。
labels
为容器添加Docker元数据信息,如可以添加辅助说明信息
network_mode
设置网络模式,使用和docker run 的—network参数一样的值
networks
配置容器连接的网络
ports
暴露端口信息,使用 宿主端口:容器端口 的格式,只指定容器端口的时候,宿主端口会随机映射。
volumes
数据卷挂载的路径设置,可以设置宿主机路径,同时支持相对路径
ulimits
指定容器的ulimits限制值,如指定最大进程数为66635,指定文件句柄数位20000(软限制,应用可以随时修改,不能超过硬限制)和40000(系统硬限制,只能root用户提高)
ulimits:
nproc:65535
nofile:
soft:20000
hard:40000
entrypoint
指定服务容器启动后执行的文件入口
user
指定容器中运行应用的用户名
working_dir
指定容器中的工作目录
读取变量
Compose模板文件支持动态读取主机的系统环境变量和当前目录下的 .env 文件中的变量。
如,Compose文件将从运行它的环境中读取${MONGO_VERSION}的值,并写入执行命令
version:'3'
services:
db:
image:"mongo:${MONGO_VERSION}"
如果执行MONGO_VERSION=3.4,docker-compose up则会启动一个mongo:3.4镜像的容器
若当前目录下存在 .env 文件,则优先从该文件中读取变量的值

Docker Compose集成式应用组合及service编排的更多相关文章
- grpc gateway 使用以及docker compose 集成
1. grpc gateway 安装 参考,比较简单,有需要的依赖可以参考相资料 mkdir tmp cd tmp git clone https://github.com/google/protob ...
- Docker 三剑客之 Docker Compose
Docker Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排,开源地址:https://github.com/docker/compose Dock ...
- 基于Docker Compose构建的MySQL MHA集群
Docker MySQL MHA 基于Docker 1.13.1之上构建的MySQL MHA Docker Compose Project 可快速启动GTID模式下的MasterHA集群, 主用于My ...
- Docker从入门到精通(八)——Docker Compose
恭喜大家,学到这里,对于 docker 的基础玩法大家应该都会了,下面会介绍 docker的一些编排工具. 1.为什么需要 Docker Compose? 官网镇楼:https://www.runoo ...
- Istio入门实战与架构原理——使用Docker Compose搭建Service Mesh
本文将介绍如何使用Docker Compose搭建Istio.Istio号称支持多种平台(不仅仅Kubernetes).然而,官网上非基于Kubernetes的教程仿佛不是亲儿子,写得非常随便,不仅缺 ...
- 通过 Docker Compose 组合 ASP NET Core 和 SQL Server
目录 Docker Compose 简介 安装 WebApi 项目 创建项目 编写Dockfile Web MVC 项目 创建项目 编写Dockfile 编写 docker-compose.yml文件 ...
- 使用Docker Compose搭建Service Mesh
使用Docker Compose搭建Service Mesh 本文将介绍如何使用Docker Compose搭建Istio.Istio号称支持多种平台(不仅仅Kubernetes).然而,官网上非基于 ...
- .NET遇上Docker - 使用Docker Compose组织Ngnix和.NETCore运行
本文工具准备: Docker for Windows Visual Studio 2015 与 Visual Studio Tools for Docker 或 Visual Studio 2017 ...
- Docker Compose 原理
Docker 的优势非常明显,尤其是对于开发者来说,它提供了一种全新的软件发布机制.也就是说使用 docker 镜像作为软件产品的载体,使用 docker 容器提供独立的软件运行上下文环境,使用 do ...
随机推荐
- 『题解』LibreOJ6277 数列分块入门 1
更好的阅读体验 Portal Portal1: LibreOJ Description 给出一个长为\(n\)的数列,以及\(n\)个操作,操作涉及区间加法,单点查值. Input 第一行输入一个数字 ...
- 腾讯正式开源图计算框架Plato,十亿级节点图计算进入分钟级时代
腾讯开源再次迎来重磅项目,14日,腾讯正式宣布开源高性能图计算框架Plato,这是在短短一周之内,开源的第五个重大项目. 相对于目前全球范围内其它的图计算框架,Plato可满足十亿级节点的超大规模图计 ...
- 映客直播软开校招岗(go语言)
问题: 笔试: 比较简单,有一道题比较深刻: 内存1G,需要计算1G的数据排序,哪种排序方法效率最低,当时选的是冒泡,因为涉及到频繁的数据交换,其实应该是归并,因为归并不是原地排序,多占用的内存空间, ...
- linux No module named yum错误的解决办法
linux No module named yum错误的解决办法 肯定是yum的版本与当前python的版本不一致造成的 <pre>所以修改yum的配置,修改文件: vim /usr/bi ...
- Web前端JS实现轮播图原理
实现轮播图有很多方式,但是html的结构都是一样的.本文使用了Jquery框架,Dom操作更加方便灵活 html部分: <div class="banner"> < ...
- MySql——创建数据表,查询数据,排序查询数据
参考资料:<Mysql必知必会> 创建数据表 在学习前首先创建数据表和插入数据.如何安装mysql可以看看上个博客https://www.cnblogs.com/lbhym/p/11675 ...
- go中的关键字-defer
1. defer的使用 defer 延迟调用.我们先来看一下,有defer关键字的代码执行顺序: func main() { defer func() { fmt.Println("1号输出 ...
- opencv 6 图像轮廓与图像分割修复 2 使用多边形将轮廓包围
使用多边形将轮廓包围 返回外部矩阵边界(boundingRect()函数) 寻找最小包围矩形(minAreaRect()函数) 寻找最小包围圆形(minEnclosingCircle函数) 用椭圆拟合 ...
- 2019-10-16:渗透测试,基础学习,burpsuit学习,爆破的四种方式学习
Burp Suite 是用于攻击web 应用程序的集成平台,包含了许多工具.Burp Suite为这些工具设计了许多接口,以加快攻击应用程序的过程.所有工具都共享一个请求,并能处理对应的HTTP 消息 ...
- 记一次net/net core delete 方法报404 解决方案
今天一个net core的delete方法 执行的时候 报404 网上查阅资料后发现是IIS 默认只允许get/post方法接入 网上查找资料后 在web.config添加如下代码: 意为移除WebD ...