Docker/compose分析
2016-07-29 18:28
543 查看
博客源地址:http://blog.csdn.net/halcyonbaby
Compose是Docker公司提供的开源的编排部署工具。Compose的前身是Fig,使用Python代码编写。
License为Apache2.0,对商业友好。
因为用户的实际应用是复杂的,可能由多个容器组成,容器间存在关系,使用上可能需要重复多次部署。
因此,需要一定的编排部署能力来简化这个操作。
Compose目前只提供命令行工具,没有Daemon存在。Compose与Docker紧密结合,目前只支持Docker。
当然Compose也可以支持Swarm。
Compose运行需要有对应的yml文件以及Dockerfile。
通过调用Docker/Swarm的API进行容器应用的编排。
Compose目前版本为1.4。官方推荐在开发、测试、持续集成等非生成环境使用。并不适合生产环境使用。
service:实际上是一个包含某种功能的容器。
Compose的所有操作对象均为service。
build(构建yml中某个服务的镜像)
如上,web这个服务是依赖于镜像build的。在本地 也存在Dockerfile文件。
可以使用docker-compose build来构建服务的镜像。
ps(查看已经启动的服务状态)
kill(停止某个服务)
logs(可以查看某个服务的log)
port(打印绑定的public port)
pull(pull服务镜像)
up(启动yml定义的所有服务)
stop(停止yml中定义的所有服务)
start(启动被停止的yml中的所有服务)
kill(强行停止yml中定义的所有服务)
rm(删除yml中定义的所有服务)
restart(重启yml中定义的所有服务)
scale(扩展某个服务的个数,可以向上或向下)
migrate-to-labels(这个没有实际尝试。根据介绍是将服务从1.2迁移到1.3带labels的版本。docker之前不支持label)
version(查看compose的版本)
没有Deaemon,也就没有高可用、HA之说。
但是同时没有Deamon,所用动作需要用户自己触发。AutoScaling、self healing等也就没有办法提供。
模型相对简单,只有service。
缺乏诸如网络、存储之类的资源抽象和管理。
也缺乏诸如kubernetes中Pod、RC、service proxy之类的抽象,由于servie本身粒度太细,操作管理起来相对麻烦。
由于Docker社区大部分项目是Go编写的,Compose使用python不利于项目间代码共享。
所幸的是,Compose社区目前已经开始着手此事。
是优点也是缺点。一方面可以很好的支持Docker的最新特性,另一方面与Docker绑死。
目前社区已经开始着手使用Go语言重新Compose,并以lib方式提供。
Docker的理念是便于上层集成,也许未来会在kitematic中集成Compose的功能。
其他第三方也可以通过各种方式进行集成。
根据yml启动应用。
#### docker-compose scale 对应用的实例个数进行扩展。
强制终止某个服务。
正常停止某个服务。
启动已经定义的服务。
…其他命令不再赘述。
Compose文档
http://docs.docker.com/compose/
Github地址
https://github.com/docker/compose
Compose是什么?
Compose是Docker公司提供的开源的编排部署工具。Compose的前身是Fig,使用Python代码编写。License为Apache2.0,对商业友好。
为什么需要Compose?
因为用户的实际应用是复杂的,可能由多个容器组成,容器间存在关系,使用上可能需要重复多次部署。因此,需要一定的编排部署能力来简化这个操作。
Compose的架构
Compose目前只提供命令行工具,没有Daemon存在。Compose与Docker紧密结合,目前只支持Docker。当然Compose也可以支持Swarm。
Compose运行需要有对应的yml文件以及Dockerfile。
通过调用Docker/Swarm的API进行容器应用的编排。
Compose的现状
Compose目前版本为1.4。官方推荐在开发、测试、持续集成等非生成环境使用。并不适合生产环境使用。
Compose的模型
service:实际上是一个包含某种功能的容器。Compose的所有操作对象均为service。
Compose的功能
build(构建yml中某个服务的镜像)如上,web这个服务是依赖于镜像build的。在本地 也存在Dockerfile文件。
可以使用docker-compose build来构建服务的镜像。
ps(查看已经启动的服务状态)
kill(停止某个服务)
logs(可以查看某个服务的log)
port(打印绑定的public port)
pull(pull服务镜像)
up(启动yml定义的所有服务)
stop(停止yml中定义的所有服务)
start(启动被停止的yml中的所有服务)
kill(强行停止yml中定义的所有服务)
rm(删除yml中定义的所有服务)
restart(重启yml中定义的所有服务)
scale(扩展某个服务的个数,可以向上或向下)
migrate-to-labels(这个没有实际尝试。根据介绍是将服务从1.2迁移到1.3带labels的版本。docker之前不支持label)
version(查看compose的版本)
Compose的缺点
没有Daemon
没有Deaemon,也就没有高可用、HA之说。但是同时没有Deamon,所用动作需要用户自己触发。AutoScaling、self healing等也就没有办法提供。
模型不完整
模型相对简单,只有service。缺乏诸如网络、存储之类的资源抽象和管理。
也缺乏诸如kubernetes中Pod、RC、service proxy之类的抽象,由于servie本身粒度太细,操作管理起来相对麻烦。
使用Python代码编写
由于Docker社区大部分项目是Go编写的,Compose使用python不利于项目间代码共享。所幸的是,Compose社区目前已经开始着手此事。
与Docker紧密结合
是优点也是缺点。一方面可以很好的支持Docker的最新特性,另一方面与Docker绑死。
Compose 的未来发展
目前社区已经开始着手使用Go语言重新Compose,并以lib方式提供。Docker的理念是便于上层集成,也许未来会在kitematic中集成Compose的功能。
其他第三方也可以通过各种方式进行集成。
Compose演示
yml范例
[root@localhost sleep]# cat docker-compose.yml sleep1: command: sleep 8888888 image: busybox restart: always sleep2: command: sleep 9999999 image: busybox restart: always
docker-compose up
根据yml启动应用。[root@localhost sleep]# docker-compose up Creating sleep_sleep1_1... Creating sleep_sleep2_1... Attaching to sleep_sleep1_1, sleep_sleep2_1 [root@localhost sleep]# docker-compose ps Name Command State Ports '----------------------------------------------' sleep_sleep1_1 sleep 8888888 Up sleep_sleep2_1 sleep 9999999 Up
[/code]
#### docker-compose scale 对应用的实例个数进行扩展。
[root@localhost sleep]# docker-compose scale sleep1=2 Creating and starting 2... done [root@localhost sleep]# docker-compose ps Name Command State Ports '---------------------------------------------- sleep_sleep1_1 sleep 8888888 Up sleep_sleep1_2 sleep 8888888 Up sleep_sleep2_1 sleep 9999999 Up
docker-compose kill
强制终止某个服务。[root@localhost sleep]# docker-compose kill sleep1 Killing sleep_sleep1_2... done Killing sleep_sleep1_1... done [root@localhost sleep]# docker-compose ps Name Command State Ports '------------------------------------------------- sleep_sleep1_1 sleep 8888888 Exit 137 sleep_sleep1_2 sleep 8888888 Exit 137 sleep_sleep2_1 sleep 9999999 Up
docker-compose stop
正常停止某个服务。[root@localhost sleep]# docker-compose stop sleep2 [root@localhost sleep]# docker-compose ps Name Command State Ports '------------------------------------------------- sleep_sleep1_1 sleep 8888888 Exit 137 sleep_sleep1_2 sleep 8888888 Exit 137 sleep_sleep2_1 sleep 9999999 Exit 137
docker-compose start
启动已经定义的服务。[root@localhost sleep]# docker-compose stop sleep2 [root@localhost sleep]# docker-compose ps Name Command State Ports '------------------------------------------------- sleep_sleep1_1 sleep 8888888 Exit 137 sleep_sleep1_2 sleep 8888888 Exit 137 sleep_sleep2_1 sleep 9999999 Exit 137
…其他命令不再赘述。
Compose代码分析
Compose参考资料
Compose文档http://docs.docker.com/compose/
Github地址
https://github.com/docker/compose
相关文章推荐
- ubuntu下安装配置部署zabbix3.0――基于docker
- Docker 的步伐:DevOps 与 OS 化
- docker一
- 【Docker技术入门与实战】存出和载入镜像
- 基于Tag的Docker自动构建
- Docker
- Docker镜像的获取与删除
- ubuntu14.04安装Docker
- 简述Docker镜像、容器、仓库概念
- 1.什么是 Docker
- 2.Docker学习笔记
- docker根路径修改时不生效的问题
- Docker安装停止在:Setting up docker-engine (1.11.2-0~xenial)的解决方法
- docker 入门
- 在Docker和Kubernetes上运行MongoDB微服务
- docker4dotnet #3 .net猿和小鲸鱼的苹果山之旅
- docker管理shipyard中文版v3.0.2更新
- docker和shipyard使用问题
- Docker容器的数据管理
- Docker客户端与守护进程