UDN-企业互联网技术人气社区

板块导航

浏览  : 1184
回复  : 0

[教程技巧] Docker Compose—简化复杂容器应用的利器

[复制链接]
cat77的头像 楼主
发表于 2016-6-23 10:53:40 | 显示全部楼层 |阅读模式
  Compose是用于定义和运行复杂Docker应用的工具。你可以在一个文件中定义一个多容器的应用,然后使用一条命令来启动你的应用,然后所有相关的操作都会被自动完成。

  1. 安装Docker和Compose
  1. # 当前最新的Docker是1.6.2,Compose为1.2.0
  2. curl -s https://get.Docker.io/ubuntu/ | sudo sh
  3. sudo apt-get update
  4. sudo apt-get install lxc-Docker
  5. # 参考http://docs.Docker.com/compose/install/#install-compose
  6. curl -L https://github.com/Docker/compose/releases/download/1.2.0/Docker-compose-`uname -s`-`uname -m` > /usr/local/bin/Docker-compose
  7. chmod +x /usr/local/bin/Docker-compose上面这个方法真的慢出翔,可以通过Python pip安装。
  8. apt-get install python-pip python-dev
  9. pip install -U Docker-compose
复制代码

  这样compose就安装好了,查看一下compose的版本信息:
  1. chmod +x /usr/local/bin/Docker-compose
  2. Docker-compose -version
  3. Docker-compose 1.2.0
复制代码

  2. 使用Compose

  使用Compose只需要简单的三个步骤:首先,使用Dockerfile来定义你的应用环境:
  1. FROM python:2.7
  2. ADD ./code
  3. WORKDIR /code
  4. RUN pip install -r requirements.txt
复制代码

  其中,requirements.txt中的内容包括:
  1. flask
  2. redis
复制代码

  再用Python写一个简单的app.py
  1. from flask importFlaskfrom redis importRedisimport os
  2. app =Flask(__name__)
  3. redis =Redis(host='redis', port=6379)@app.route('/')def hello():
  4.     redis.incr('hits')return'Hello World! I have been seen %s times.'% redis.get('hits')if __name__ =="__main__":
  5.     app.run(host="0.0.0.0", debug=True)
复制代码

   第二步,用一个compose.yaml来定义你的应用,他们可以在下个互隔离的容器中组成你的应用。
复制代码

  第三步,执行Docker-compose up来启动你的应用,它会根据compose.yaml的设置来pull/run这俩个容器。
  1. Creating myapp_redis_1...
  2. Creating myapp_web_1...
  3. Building web...
  4. Step 0 : FROM python:2.7
  5. 2.7: Pulling from python
  6. ...
  7. Status: Downloaded newer image for python:2.7
  8. ---> d833e0b23482
  9. Step 1 : ADD . /code
  10. ---> 1c04b1b15808
  11. Removing intermediate container 9dab91b4410d
  12. Step 2 : WORKDIR /code
  13. ---> Running in f495a62feac9
  14. ---> ffea89a7b090
  15. Attaching to myapp_redis_1, myapp_web_1
  16. ......
  17. redis_1 | [1] 17 May 10:42:38.147 * The server is now ready to accept connections on port 6379
  18. web_1   |  * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
  19. web_1   |  * Restarting with stat
复制代码

  3. Yaml文件参考

  在上面的yaml文件中,我们可以看到compose文件的基本结构。首先是定义一个服务名,下面是yaml服务中的一些选项条目:

  image :镜像的ID

  build :直接从pwd的Dockerfile来build,而非通过image选项来pull

  links :连接到那些容器。每个占一行,格式为SERVICE[:ALIAS],例如 – db[:database]

  external_links :连接到该compose.yaml文件之外的容器中,比如是提供共享或者通用服务的容器服务。格式同links

  command :替换默认的command命令

  ports : 导出端口。格式可以是:
  1. ports:-"3000"-"8000:8000"-"127.0.0.1:8001:8001"
复制代码

  expose :导出端口,但不映射到宿主机的端口上。它仅对links的容器开放。格式直接指定端口号即可。

  volumes :加载路径作为卷,可以指定只读模式:
  1. volumes:-/var/lib/mysql
  2. - cache/:/tmp/cache
  3. -~/configs:/etc/configs/:ro
复制代码

  volumes_from :加载其他容器或者服务的所有卷
  1. environment:- RACK_ENV=development
  2.   - SESSION_SECRET
复制代码

  env_file :从一个文件中导入环境变量,文件的格式为RACK_ENV=development

  extends :扩展另一个服务,可以覆盖其中的一些选项。一个sample如下:
  1. common.yml
  2. webapp:
  3.   build:./webapp
  4.   environment:- DEBUG=false- SEND_EMAILS=false
  5. development.yml
  6. web:extends:
  7.     file: common.yml
  8.     service: webapp
  9.   ports:-"8000:8000"
  10.   links:- db
  11.   environment:- DEBUG=true
  12. db:
  13.   image: postgres
复制代码

  net :容器的网络模式,可以为”bridge”, “none”, “container:[name or id]”, “host”中的一个。

  dns :可以设置一个或多个自定义的DNS地址。

  dns_search :可以设置一个或多个DNS的扫描域。

  其他的 working_dir, entrypoint, user, hostname, domainname, mem_limit, privileged, restart, stdin_open, tty, cpu_shares ,和 Docker run 命令是一样的,这些命令都是单行的命令。例如:
  1. cpu_shares:73
  2. working_dir:/code
  3. entrypoint: /code/entrypoint.sh
  4. user: postgresql
  5. hostname: foo
  6. domainname: foo.com
  7. mem_limit:1000000000
  8. privileged:true
  9. restart: always
  10. stdin_open:true
  11. tty:true
复制代码

  4. Docker-compose常用命令

  在第二节中的 Docker-compose up ,这两个容器都是在前台运行的。我们可以指定-d命令以daemon的方式启动容器。除此之外,Docker-compose还支持下面参数:

  --verbose :输出详细信息

  -f 制定一个非Docker-compose.yml命名的yaml文件

  -p 设置一个项目名称(默认是directory名)

  Docker-compose的动作包括:

  • build :构建服务
  • kill -s SIGINT :给服务发送特定的信号。
  • logs :输出日志
  • port :输出绑定的端口
  • ps :输出运行的容器
  • pull :pull服务的image
  • rm :删除停止的容器
  • run : 运行某个服务,例如Docker-compose run web python manage.py shell
  • start :运行某个服务中存在的容器。
  • stop :停止某个服务中存在的容器。
  • up :create + run + attach容器到服务。
  • scale :设置服务运行的容器数量。例如:Docker-compose scale web=2 worker=3

  参考:

  Compose Document

相关帖子

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部