编排
编排是一个没有严格定义的概念,大致描述的就是自动配置,协作和管理服务的过程,在Docker的世界里,编排用来描述一组实践过程,这个过程运行多个多个容器里的应用,通过将这些容器链接起来,快速构建出生产环境与开发环境。
Fig
简单的容器编排,目前Fig团队已经加入了Docker公司,Fig通过配置fig.yml来快速构建基于Docker的复杂应用,容器间通过某些方法指定一些运行的属性来和其他容器的产生交互。
安装Fig
Fig由python编写,所以我门可以通过PYPI源来安装fig。
1 | ~]# pip install fig |
构建应用
构建镜像
1~]# mkdir figapp2~]# cd figapp3~]# vim Dockerfile4FROM python:latest5MAINTAINER Jusene67RUN pip install flask redis89~]# docker build -t flask:v1 .提供web服务程序
1~]# vim app.py2#-*- coding=utf8 -*-34from flask import Flask5from redis import Redis67app=Flask(__app__)8redis=Redis(host="db",port=6379)910@app.route('/')11def hello():12redis.incr('hits')13return "Hello Docker Reader,You had Hit {0} times!".format(int(redis.get('hits')))1415if __name__ == "__main__":16app.run(host="0.0.0.0",debug=True)编写fig.yml
1~]# vim fig.yml2---3web:4image: flask:v15command: python /figapp/app.py6ports:7- "5000:5000"8volumes:9- .:/figapp10links:11- redis:db12redis:13image: redis:latest14environment:启动fig
1~]# fig up 注意必须在fig.yml下运行2Recreating figapp_redis_1...3Recreating figapp_web_1...4Attaching to figapp_redis_1, figapp_web_15redis_1 | 1:C 31 Aug 16:22:04.209 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo6redis_1 | 1:C 31 Aug 16:22:04.210 # Redis version=4.0.1, bits=64, commit=00000000, modified=0, pid=1, just started7redis_1 | 1:C 31 Aug 16:22:04.210 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf8redis_1 | 1:M 31 Aug 16:22:04.214 * Running mode=standalone, port=6379.9redis_1 | 1:M 31 Aug 16:22:04.214 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.10redis_1 | 1:M 31 Aug 16:22:04.214 # Server initialized11redis_1 | 1:M 31 Aug 16:22:04.214 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.12redis_1 | 1:M 31 Aug 16:22:04.215 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.13redis_1 | 1:M 31 Aug 16:22:04.215 * DB loaded from disk: 0.000 seconds14redis_1 | 1:M 31 Aug 16:22:04.215 * Ready to accept connections15web_1 | * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)16web_1 | * Restarting with stat17web_1 | * Debugger is active!18web_1 | * Debugger PIN: 264-973-2931920~]# fig up -d #守护模式测试应用
1~]# curl 10.211.55.6:50002Hello Docker Reader,You had Hit 1 times!3~]# curl 10.211.55.6:50004Hello Docker Reader,You had Hit 2 times!因为在flask启动的时候启用debug,所以在修改代码后会自动重载代码,一个快速docker开发环境。
查看docker
1~]# docker ps2CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES3745acf95b6cb flask "python /figapp/app.p" 4 minutes ago Up 4 minutes 0.0.0.0:5000->5000/tcp figapp_web_1496cb74bd5f45 redis:latest "docker-entrypoint.sh" 4 minutes ago Up 4 minutes 6379/tcp figapp_redis_15~]# fig ps6Name Command State Ports7--------------------------------------------------------------------------------8figapp_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp9figapp_web_1 python /figapp/app.py Up 0.0.0.0:5000->5000/tcp10~]# fig -h11Fast, isolated development environments using Docker.1213Usage:14fig [options] [COMMAND] [ARGS...]15fig -h|--help1617Options:18--verbose Show more output19--version Print version and exit20-f, --file FILE Specify an alternate fig file (default: fig.yml)21-p, --project-name NAME Specify an alternate project name (default: directory name)2223Commands:24build Build or rebuild services25help Get help on a command26kill Kill containers27logs View output from containers28port Print the public port for a port binding29ps List containers30pull Pulls service images31rm Remove stopped containers32run Run a one-off command33scale Set number of containers for a service34start Start services35stop Stop services36restart Restart services37up Create and start containers
整个过程类似:
1 | ~]# docker run -d --name figapp_redis_1 redis:latest |
2 | ~]# docker run -d --name figapp_web_1 -v .:/figapp/ -p 5000:5000 --link redis:db flask:v1 python /figapp/app.py |
还有fig.yml可以与Dockfile一起使用来构建应用:
1 | ~]# vim fig.yml |
2 | --- |
3 | web: |
4 | build: /root/figapp/ #指定Dockerfile所在的目录 |
5 | command: python /figapp/app.py |
6 | ports: |
7 | - "5000:5000" |
8 | volumes: |
9 | - .:/figapp |
10 | links: |
11 | - redis:db |
12 | redis: |
13 | image: redis:latest |
14 | environment: #指定redis的环境变量 |
Fig官网链接:http://www.fig.sh/index.html