使用Compose只需要简单的三个步骤:
第一步,使用Dockerfile来定义你的应用环境:
第二步,用一个docker-compose.yml来定义你的应用服务,他们可以把不同的服务生成不同的容器中组成你的应用。
第三步,执行docker-compose up
来启动你的应用,它会根据docker-compose.yml的设置来pull/run这俩个容器,然后再启动。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
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、yml文件参考(要注意有2个版本,推荐使用version2)
在上面的yml文件中,我们可以看到compose文件的基本结构。首先是定义一个服务名,下面是yml服务中的一些选项条目:
image
:镜像的ID
build
:直接从pwd的Dockerfile来build,而非通过image选项来pull
links
:连接到那些容器。每个占一行,格式为SERVICE[:ALIAS],例如 – db[:database]
external_links
:连接到该compose.yaml文件之外的容器中,比如是提供共享或者通用服务的容器服务。格式同links
command
:替换默认的command命令
ports
: 导出端口。格式可以是:
expose
:导出端口,但不映射到宿主机的端口上。它仅对links的容器开放。格式直接指定端口号即可。
volumes
:加载路径作为卷,可以指定只读模式:
volumes_from
:加载其他容器或者服务的所有卷
env_file
:从一个文件中导入环境变量,文件的格式为RACK_ENV=development
extends
:扩展另一个服务,可以覆盖其中的一些选项。一个sample如下:
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
2
3
4
5
6
7
8
9
10
11
|
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
|
大部分命令都可以运行在一个或多个服务上。如果没有特别的说明,命令则应用在项目所有的服务上。
执行 docker-compose [COMMAND] --help
查看具体某个命令的使用说明。
基本的使用格式是
docker-compose [options] [COMMAND] [ARGS...]
选项
--verbose
输出更多调试信息。--version
打印版本并退出。-f, --file FILE
使用特定的 compose 模板文件,默认为docker-compose.yml
。-p, --project-name NAME
指定项目名称,默认使用目录名称。
命令
build
构建或重新构建服务。
服务一旦构建后,将会带上一个标记名,例如 web_db。
可以随时在项目目录下运行 docker-compose build
来重新构建服务。
help
获得一个命令的帮助。
kill
通过发送 SIGKILL
信号来强制停止服务容器。支持通过参数来指定发送的信号,例如
$ docker-compose kill -s SIGINT
logs
查看服务的输出。
port
打印绑定的公共端口。
ps
列出所有容器。
pull
拉取服务镜像。
rm
删除停止的服务容器。
run
在一个服务上执行一个命令。
例如:
$ docker-compose run ubuntu ping docker.com
将会启动一个 ubuntu 服务,执行 ping docker.com
命令。
默认情况下,所有关联的服务将会自动被启动,除非这些服务已经在运行中。
该命令类似启动容器后运行指定的命令,相关卷、链接等等都将会按照期望创建。
两个不同点:
- 给定命令将会覆盖原有的自动运行命令;
- 不会自动创建端口,以避免冲突。
如果不希望自动启动关联的容器,可以使用 --no-deps
选项,例如
$ docker-compose run --no-deps web python manage.py shell
将不会启动 web 容器所关联的其它容器。
scale
设置同一个服务运行的容器个数。
通过 service=num
的参数来设置数量。例如:
$ docker-compose scale web=2 worker=3
start
启动一个已经存在的服务容器。
stop
停止一个已经运行的容器,但不删除它。通过 docker-compose start
可以再次启动这些容器。
up
构建,(重新)创建,启动,链接一个服务相关的容器。
链接的服务都将会启动,除非他们已经运行。
默认情况, docker-compose up
将会整合所有容器的输出,并且退出时,所有容器将会停止。
如果使用 docker-compose up -d
,将会在后台启动并运行所有的容器。
默认情况,如果该服务的容器已经存在, docker-compose up
将会停止并尝试重新创建他们(保持使用 volumes-from
挂载的卷),以保证 docker-compose.yml
的修改生效。如果你不想容器被停止并重新创建,可以使用 docker-compose up --no-recreate
。如果需要的话,这样将会启动已经停止的容器。
环境变量
环境变量可以用来配置 Compose 的行为。
以DOCKER_
开头的变量和用来配置 Docker 命令行客户端的使用一样。如果使用 boot2docker , $(boot2docker shellinit)
将会设置它们为正确的值。
COMPOSE_PROJECT_NAME
设置通过 Compose 启动的每一个容器前添加的项目名称,默认是当前工作目录的名字。
COMPOSE_FILE
设置要使用的 docker-compose.yml
的路径。默认路径是当前工作目录。
DOCKER_HOST
设置 Docker daemon 的地址。默认使用 unix:///var/run/docker.sock
,与 Docker 客户端采用的默认值一致。
DOCKER_TLS_VERIFY
如果设置不为空,则与 Docker daemon 交互通过 TLS 进行。
DOCKER_CERT_PATH
配置 TLS 通信所需要的验证(ca.pem
、cert.pem
和 key.pem
)文件的路径,默认是 ~/.docker
。