Docker Compose—简化复杂容器应用的利器
Compose是用于定义和运行复杂Docker应用的工具。你可以在一个文件中定义一个多容器的应用,然后使用一条命令来启动你的应用,然后所有相关的操作都会被自动完成。
1. 安装Docker和Compose
# 当前最新的Docker是1.6.2,Compose为1.2.0
curl -s https://get.docker.io/ubuntu/ | sudo sh
sudo apt-get update
sudo apt-get install lxc-docker
# 参考http://docs.docker.com/compose/install/#install-compose
curl -L https://github.com/docker/compose/releases/download/1.2.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose上面这个方法真的慢出翔,可以通过Python pip安装。
apt-get install python-pip python-dev
pip install -U docker-compose
这样compose就安装好了,查看一下compose的版本信息:
chmod +x /usr/local/bin/docker-compose
docker-compose -version
docker-compose 1.2.0
2. 使用Compose
使用Compose只需要简单的三个步骤:首先,使用Dockerfile来定义你的应用环境:
FROM python:2.7
ADD ./code
WORKDIR /code
RUN pip install -r requirements.txt
其中,requirements.txt中的内容包括:
flask
redis
再用Python写一个简单的app.py
from flask importFlaskfrom redis importRedisimport os
app =Flask(__name__)
redis =Redis(host='redis', port=6379)@app.route('/')def hello():
redis.incr('hits')return'Hello World! I have been seen %s times.'% redis.get('hits')if __name__ =="__main__":
app.run(host="0.0.0.0", debug=True)
第二步,用一个compose.yaml来定义你的应用,他们可以在下个互隔离的容器中组成你的应用。
web:
build:.
command: python app.py
ports:-"5000:5000"
volumes:-.:/code
links:- redis
redis:
image: redis
第三步,执行docker-compose up来启动你的应用,它会根据compose.yaml的设置来pull/run这俩个容器。
Creating myapp_redis_1...
Creating myapp_web_1...
Building web...
Step 0 : FROM python:2.7
2.7: Pulling from python
...
Status: Downloaded newer image for python:2.7
---> d833e0b23482
Step 1 : ADD . /code
---> 1c04b1b15808
Removing intermediate container 9dab91b4410d
Step 2 : WORKDIR /code
---> Running in f495a62feac9
---> ffea89a7b090
Attaching to myapp_redis_1, myapp_web_1
......
redis_1 | [1] 17 May 10:42:38.147 * The server is now ready to accept connections on port 6379
web_1 | * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
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 : 导出端口。格式可以是:
ports:-"3000"-"8000:8000"-"127.0.0.1:8001:8001"
expose :导出端口,但不映射到宿主机的端口上。它仅对links的容器开放。格式直接指定端口号即可。
volumes :加载路径作为卷,可以指定只读模式:
volumes:-/var/lib/mysql
- cache/:/tmp/cache
-~/configs:/etc/configs/:ro
volumes_from :加载其他容器或者服务的所有卷
environment:- RACK_ENV=development
- SESSION_SECRET
env_file :从一个文件中导入环境变量,文件的格式为RACK_ENV=development
extends :扩展另一个服务,可以覆盖其中的一些选项。一个sample如下:
common.yml
webapp:
build:./webapp
environment:- DEBUG=false- SEND_EMAILS=false
development.yml
web:extends:
file: common.yml
service: webapp
ports:-"8000:8000"
links:- db
environment:- DEBUG=true
db:
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 命令是一样的,这些命令都是单行的命令。例如:
cpu_shares:73
working_dir:/code
entrypoint: /code/entrypoint.sh
user: postgresql
hostname: foo
domainname: foo.com
mem_limit:1000000000
privileged:true
restart: always
stdin_open:true
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
参考:
Docker Compose—简化复杂容器应用的利器的更多相关文章
- Docker | Compose创建mysql容器
本文通过Docker Compose来创建mysql容器 在linux服务器上创建文件,用于管理容器 mkdir docker-mysql cd docker-mysql vim docker-com ...
- Docker学习笔记4: Docker-Compose—简化复杂容器应用的利器
本文转载自http://www.tuicool.com/articles/AnIVJn. 因Python语言,个人也没学过,不是太熟悉,这篇文章的代码格式排版不准确爆了很多错,让我走了好多坑,不过还是 ...
- Docker 三剑客之 Docker Compose
Docker Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排,开源地址:https://github.com/docker/compose Dock ...
- Docker学习笔记之编写 Docker Compose 项目
0x00 概述 通过阅读之前的小节,相信大家对 Docker 在开发中的应用已经有了一定的了解.作为一款实用的软件,我们必须回归到实践中来,这样才能更好地理解 Docker 的实用逻辑和背后的原理.在 ...
- 009.Docker Compose部署及基础使用
一 Docker Compose概述 Compose是一个用于定义和运行多容器Docker应用程序的工具.使用Compose,您可以使用YAML文件来配置应用程序的服务.然后,使用单个命令,您可以从配 ...
- 阿里云上Docker Compose部署wordpress
先上官方文档: https://docs.docker.com/compose/wordpress/ 我的环境: [root@xyjk1002 ~]# cat /etc/redhat-release ...
- Docker:Docker Compose 详解
Docker Compose 概述与安装? 前面我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build.docker run 等命令操作容器.然而微服务架 ...
- 使用docker compose部署服务
谈到微服务的话题,技术上我们往往会涉及到多服务.多容器的部署与管理. Docker 有三个主要的作用:Build, Ship和Run.使用docker compose我们可以在Run的层面解决很多实际 ...
- 基于Docker Compose的.NET Core微服务持续发布
是不是现在每个团队都需要上K8s才够潮流,不用K8s是不是就落伍了.今天,我就通过这篇文章来回答一下. 一.先给出我的看法和建议 我想说的是,对于很多的微小团队来说,可能都不是一定要上K8s,毕竟上K ...
随机推荐
- 【转】】Android ADB命令大全
ADB很强大,记住一些ADB命令有助于提高工作效率. 获取序列号: adb get-serialno 查看连接计算机的设备: adb devices 重启机器: adb reboot 重启到bootl ...
- asp.net正则表达式提取网页网址、标题、图片实例以及过滤所有HTML标签实例
无论你用什么语言,正则表达式的处理方法都是非常灵活.高效的,尤其是对某些字符串的抓取.过滤方面,更显其优势. 正则表达式的写法通常比较简单,几行短代码便能轻松完成看似很复杂的事情,更值得称赞的是,它的 ...
- EntityFramework Code First 手写代码实现生成数据库
第一步:写实体类 第二步:写一个实体操作类,此类必须继承Dbcontext,此处的属性,将会在初始化时(第一次作,增,删,改的时候),生成相应的表. 第三步:运行程序,会自动建表 注意: 若实体类发生 ...
- Docker搭建便捷的开发者环境
你可能遇到这样的场景:开发软件时,需要像数据库(mysql,mongodb).消息系统(rabbitmq).缓存服务(redis)等其它依赖服务.当然我们可以找台机器,一步步安装依赖,然后把所有依赖的 ...
- HTML DOM Document
Document 对象 每个载入浏览器的 HTML 文档都会成为 Document 对象. Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问. 提示:Document 对 ...
- js 对象(Object)
一.对象 除了字符串.数字.true.false.null和undefined之外,javascript中的值都是对象. javascript对象属性包括名字和值,属性名可以是包含空字符串在内的任意字 ...
- ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 G. Garden Gathering
Problem G. Garden Gathering Input file: standard input Output file: standard output Time limit: 3 se ...
- 03_Swift2基础之基本数据类型+相互转换
1. 整数 整数就是没有小数部分的数字,比如`42`和`-23`.整数可以是`有符号`(正.负.零)或者`无符号`(正.零). Swift 提供了,,和位的有符号和无符号整数类型.这些整数类型和 C语 ...
- [linux]unixODBC的安装配置说明
什么是unixODBC: ODBC(Open Database Connect)是由Microsoft 公司于1991 年提出的一个开放的,用于访问数据库的统一接口规范. unixODBC的是为非Wi ...
- 内存和flash存储的区别
http://bbs.21ic.com/icview-202550-1-1.html 一.内存 我们一般说的内存指的是DRAM,其主要特点是断电会丢失数据,可读写 二.ROM 断电不会丢失数据,数据只 ...