Docker/compose分析

本文介绍了Docker Compose这一编排部署工具的基本概念、功能、使用场景及限制,并通过示例展示了如何使用Compose来管理多容器应用。

博客源地址:http://blog.youkuaiyun.com/halcyonbaby 

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   
#### 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参考资料

  1. Compose文档 
    http://docs.docker.com/compose/
  2. Github地址 
    https://github.com/docker/compose



在Linux系统中,使用`curl`命令从GitHub下载指定版本的`docker-compose`并保存到`/usr/local/bin`路径,可使用如下命令: ```bash sudo curl -L "https://github.com/docker/compose/releases/download/1.21.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose ``` ### 命令解释 - `curl`:是一个用于传输数据的工具,支持多种协议,这里用于从网络上下载文件。 - `-L`:当服务器返回重定向响应时,`curl`会自动跟随重定向,继续访问新的URL。 - `"https://github.com/docker/compose/releases/download/1.21.1/docker-compose-$(uname -s)-$(uname -m)"`:此为要下载文件的URL。`$(uname -s)`会被替换为当前操作系统的名称(如Linux),`$(uname -m)`会被替换为当前系统的硬件架构(如x86_64),这样能确保下载的是适合当前系统的`docker-compose`版本。 - `-o /usr/local/bin/docker-compose`:`-o`指定将下载的文件保存到本地的路径和文件名,即把下载的文件保存为`/usr/local/bin/docker-compose`。 - `sudo`:由于`/usr/local/bin`通常需要管理员权限才能写入,所以使用`sudo`以管理员身份执行该命令。 ### 优化建议 - **添加错误处理**:在下载前可以先检查网络连接,同时在下载完成后检查文件是否存在,以确保下载成功。 ```bash # 检查网络连接 ping -c 3 github.com > /dev/null 2>&1 if [ $? -ne 0 ]; then echo "无法连接到GitHub,请检查网络。" exit 1 fi # 下载文件 sudo curl -L "https://github.com/docker/compose/releases/download/1.21.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 检查文件是否下载成功 if [ -f /usr/local/bin/docker-compose ]; then sudo chmod +x /usr/local/bin/docker-compose echo "docker-compose 1.21.1 下载并设置执行权限成功。" else echo "docker-compose 下载失败,请重试。" fi ``` - **指定下载进度显示**:使用`-#`参数可以显示下载进度条,让用户了解下载的实时情况。 ```bash sudo curl -L -# "https://github.com/docker/compose/releases/download/1.21.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值