Fig是Docker的应用编排工具,主要用来跟 Docker 一起来构建基于 Docker 的复杂应用,Fig 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景。

说明:目前Fig已经升级并更名为Compose。Compose向下兼容Fig。 所以学完fig再去看compose也是可以的。

应用编排工具使得Docker应用管理更为方便快捷。 Fig网站:http://www.fig.sh/

安装Fig:

# 方法一:
curl -L https://github.com/docker/fig/releases/download/1.0.1/fig-`uname
-s`-`uname -m` > /usr/local/bin/fig; chmod +x /usr/local/bin/fig # Linux下等效于
curl -L https://github.com/docker/fig/releases/download/1.0.1/fig-Linux-x86_64 > /usr/local/bin/fig; chmod +x /usr/local/bin/fig # 方法二:
yum install python-pip python-dev
pip install -U fig

安装完成后可以查看版本:

# fig --version
fig 1.0.1

入门示例

准备工作:提前下载好镜像:

docker pull mysql
docker pull wordpress

需要新建一个空白目录,例如figtest。新建一个fig.yml

wordpress:
image: wordpress:latest
links:
- db:mysql
ports:
- "8002:80"
db:
image: mysql
environment:
- MYSQL_ROOT_PASSWORD=123456

以上命令的意思是新建db和wordpress容器。等同于:

$ docker run --name db -e MYSQL_ROOT_PASSWORD=123456 -d mysql
$ docker run --name some-wordpress --link db:mysql -p 8002:80 -d wordpress

好,我们启动应用:

# fig up
Creating figtest_db_1...
Creating figtest_wordpress_1...
Attaching to figtest_db_1, figtest_wordpress_1
wordpress_1 | Complete! WordPress has been successfully copied to /var/www/html

就成功了。浏览器访问 http://localhost:8002(或 http://host-ip:8002)即可。

默认是前台运行并打印日志到控制台。如果想后台运行,可以:

fig up -d

应用后台后,可以使用下列命令查看状态:

# fig ps
Name Command State Ports
-----------------------------------------------------------------------------------
figtest_db_1 docker-entrypoint.sh mysqld Up 3306/tcp
figtest_wordpress_1 docker-entrypoint.sh apach ... Up 0.0.0.0:8002->80/tcp # fig logs
Attaching to figtest_wordpress_1, figtest_db_1
db_1 | 2016-10-14T14:38:46.498030Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
db_1 | 2016-10-14T14:38:46.499974Z 0 [Note] mysqld (mysqld 5.7.15) starting as process 1 ...
db_1 | 2016-10-14T14:38:46.727191Z 0 [Note] InnoDB: PUNCH HOLE support available

停止应用:

# fig stop
Stopping figtest_wordpress_1...
Stopping figtest_db_1...

重新启动应用:

fig restart

scale

该命令可以设置一次性启动的容器数目:

fig.yml

wordpress:
image: daocloud.io/daocloud/dao-wordpress:latest
environment:
- WORDPRESS_DB_HOST=119.119.112.246
- WORDPRESS_DB_USER=root
- WORDPRESS_DB_PASSWORD=123456
ports:
- "80"

注意端口ports不要指定本机的。

然后:

fig scale wordpress=2

将启动两个容器:

Starting wordpresstest2_wordpress_1...
Starting wordpresstest2_wordpress_2... fig ps
Name Command State Ports
-------------------------------------------------------------------------------------------
wordpresstest2_wordpress_1 /opt/adapter.sh /entrypoin ... Up 0.0.0.0:32768->80/tcp
wordpresstest2_wordpress_2 /opt/adapter.sh /entrypoin ... Up 0.0.0.0:32769->80/tcp

fig.yml参考

每个fig.yml必须定义image或者build中的一个,其它的是可选的。

image

指定镜像tag或者ID。示例:

image: ubuntu
image: orchardup/postgresql
image: a4bc65fd

build

用来指定一个包含Dockerfile文件的路径。一般是当前目录.。Fig将build并生成一个随机命名的镜像。

command

用来覆盖缺省命令。示例:

command: python app.py

links

用于链接另一容器服务,如需要使用到另一容器的mysql服务。可以给出服务名和别名;也可以仅给出服务名,这样别名将和服务名相同。同docker run --link。示例:

links:
- db
- db:mysql
- redis

使用了别名将自动会在容器的/etc/hosts文件里创建相应记录:

172.17.2.186  db
172.17.2.186 mysql
172.17.2.187 redis

所以我们在容器里就可以直接使用别名作为服务的主机名。

ports

用于暴露端口。同docker run -p。示例:

ports:
- "3000"
- "8000:8000"
- "49100:22"
- "127.0.0.1:8001:8001"

expose

expose提供container之间的端口访问,不会暴露给主机使用。同docker run --expose

expose:
- "3000"
- "8000"

volumes

挂载数据卷。同docker run -v。示例:

volumes:
- /var/lib/mysql
- cache/:/tmp/cache
- ~/configs:/etc/configs/:ro

volumes_from

挂载数据卷容器,挂载是容器。同docker run --volumes-from。示例:

volumes:
volumes_from:
- service_name
- container_name

environment

添加环境变量。同docker run -e。可以是数组或者字典格式:

environment:
RACK_ENV: development
SESSION_SECRET: environment:
- RACK_ENV=development
- SESSION_SECRET

字典格式键值对以冒号隔开,冒号后必须有空格。

net

设置网络模式。同docker的--net参数。

net: "bridge"
net: "none"
net: "container:[name or id]"
net: "host"

dns

自定义dns服务器。

dns: 8.8.8.8
dns:
- 8.8.8.8
- 9.9.9.9

working_dir, entrypoint, user, hostname, domainname, mem_limit, privileged

这些命令都是单个值,含义请参考[docker run](Docker run reference - Docker

https://docs.docker.com/engine/reference/run/)。

working_dir: /code
entrypoint: /code/entrypoint.sh
user: postgresql hostname: foo
domainname: foo.com mem_limit: 1000000000
privileged: true

关于mem_limit实际测试发现无效果,升级到docker-compose才可以。

命令行参考

$ fig
Fast, isolated development environments using Docker. Usage:
fig [options] [COMMAND] [ARGS...]
fig -h|--help Options:
--verbose Show more output
--version Print version and exit
-f, --file FILE Specify an alternate fig file (default: fig.yml)
-p, --project-name NAME Specify an alternate project name (default: directory name) Commands:
build Build or rebuild services
help Get help on a command
kill Kill containers
logs View output from containers
port Print the public port for a port binding
ps List containers
pull Pulls service images
rm Remove stopped containers
run Run a one-off command
scale Set number of containers for a service
start Start services
stop Stop services
restart Restart services
up Create and start containers

批处理脚本

# 关闭所有正在运行容器
docker ps | awk '{print $1}' | xargs docker stop # 删除所有容器应用
docker ps -a | awk '{print $1}' | xargs docker rm
# 或者
docker rm $(docker ps -a -q)

参考:

1、Fig | Fast, isolated development environments using Docker

http://www.fig.sh

2、library/mysql - Docker Hub

https://hub.docker.com//mysql/

3、library/wordpress - Docker Hub

https://hub.docker.com/
/wordpress/

Fig 应用编排的更多相关文章

  1. Docker学习总结

    本文作为总结性文章,不会详细讲解Docker.但会把已学习的.了解的内容按照由易到难的顺序串起来,更多的是帮助Docker新手快速的了解Docker,知道目前处在哪个阶段,接下来该学些什么,避免碰太多 ...

  2. Docker实践:安装wordpress

    本文将示例如何使用Docker来安装wordpress.使用三种方法: 1.基于官方的wordpress镜像使用docker run实现: 2.基于官方的wordpress镜像使用fig命令编排工具实 ...

  3. Docker实践:运行Python应用

    本文将使用fig应用编排实现一个python的计数器,并使用web展示. 阅读本文您需要具备以下知识: 1.了解Python 2.熟练Docker基础知识(包括Dockerfile语法) 3.了解Do ...

  4. Docker之Compose服务编排

    Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景. 说明:Comp ...

  5. (转)Docker之Compose服务编排

    转自:https://www.cnblogs.com/52fhy/p/5991344.html Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过 ...

  6. Docker Compose集成式应用组合及service编排

    Compose简介 Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排.其代码目前在 https://github.com/docker/compose 开源.C ...

  7. docker compose 编排

    Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景. 说明:Comp ...

  8. 01 . 容器编排简介及Kubernetes核心概念

    Kubernetes简介 Kubernetes是谷歌严格保密十几年的秘密武器-Borg的一个开源版本,是Docker分布式系统解决方案.2014年由Google公司启动. Kubernetes提供了面 ...

  9. Docker 容器编排利器 Docker Compose

    Compose 简介 通过前面几篇文章的学习,我们可以通过 Dockerfile 文件让用户很方便的定义一个单独的应用容器.然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况,例如 ...

随机推荐

  1. 修改redhat 源

    关于免费解决RedHat6.5的:This system is not registered to Red Hat Subscription Managemenredhat默认自带的yum源需要注册, ...

  2. 【刷题记录】首师附NOIP练习20160820

    [由于老师不让发题目,So只能发考点喽!!!!噜噜噜] [题目(嘘~~~~~)]:百度云下载 [T1]:好像是DP,路径压缩+排序+分情况处理100分(噜噜噜) [T2]:正解好难的样子,DFS乱搞了 ...

  3. Code Complete 笔记—— 第二章 用隐喻来更充分理解软件开发

    在这章里面,提到的隐喻,类同于比喻(建模)的方法的去理解软件开发. 隐喻的优点在于其可预期的效果能被所有人所理解.不必要的沟通和误解也因此大为减低,学习与教授更为快速,实际上,隐喻是对概念进行内在化和 ...

  4. BZOJ1527 : [POI2005]Pun-point

    求出重心,然后把所有点关于重心极角排序,极角相同的按到重心距离从大到小排序. 按极角序依次扫描,得到相邻两个向量的夹角以及长度之比,看成字符串. 若两个字符串循环同构,则两个点集相似,KMP判断即可. ...

  5. 聊一聊 JSONP

    JSONP 说到 JSONP 就要说到同源策略(Same Origin Policy), 同源策略是浏览器最核心的也是最基本的安全功能. 浏览器的同源策略,限制了来自不同源的 “document” 或 ...

  6. 谷歌浏览器如何查看或获取Cookie字符串

    注:此博客仅供非web开发人员查看,以下内容都基于谷歌浏览器. 在网页空白处点击鼠标右键,在弹出菜单中选择[审查元素],可以看到网页下方出现审查元素相关界面. 在审查元素相关界面,点击[Network ...

  7. 一个简便的方法,获取某个页面元素的Xpath值

    今天了解到一个比较方便获取页面元素Xpath的方法,以下是获取步骤. 1:使用chrome浏览器打开百度:http://www.baidu.com 2:点击邮件,检查. 3:定位到某个页面的元素:点击 ...

  8. C# 完整List例子

    C# List Following examples show how to create and manipulate with .NET strongly typed list List<T ...

  9. JSON数据和对象

    在js中像数字类型.字符串类型.布尔类型这些都不能再被拆分,属于基本类型.与之相对有一种复杂类型:对象类型,它是本身由多个其他类型组合而成的. 创建对象有两种方法,一.new Object()创建一个 ...

  10. android 通过uri获取bitmap图片并压缩

    很多人在调用图库选择图片时会在onActivityResult中用Media.getBitmap来获取返回的图片,如下: Uri mImageCaptureUri = data.getData(); ...