赞
踩
Docker Compose
是 Docker 官方的开源项目编排(Orchestration)项目之一,负责实现对 Docker 容器集群的快速编排。
Compose
中有两个重要的概念:
service
):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。project
):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml
文件中定义。如图中所示:Nginx,Tomcat、MySQL等,是属于一个项目中所需要的服务,这几个服务,就组成了一个完整的项目。
Compose
的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。
Compose
项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose
来进行编排管理。
Docker for Mac
、Docker for Windows
自带 docker-compose
二进制文件,安装 Docker 之后可以直接使用。这里主要说下linux下的安装。
[]: https://github.com/docker/compose/releases
curl -L https://github.com/docker/compose/releases/download/1.25.0-rc2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
直接github上的地址上,下载就可以了,不演示了;下载完成后,查看版本号
docker-compose --version
创建docker-compose.yml文件模板
touch docker-compose.yml
写入一下内容
version: '3'
services:
tomcat:
restart: always
image: tomcat
container_name: tomcat
ports:
- 8080:8080
执行启动命令语法
docker-compose up
可以看到,tomcat的容器启动成功了
查看容器,也可以看到启动了一个tomcat镜像的实例,也可以猜测到,docker-compose其实也是对docker run命令的加强版。
直接使用帮助命令
docker-compose --help
得到如下输入,然后我简单翻译下和用国语叙说,如下(只做部分的翻译吧,毕竟外文不好)
Define and run multi-container applications with Docker. ##基本的使用命令的方式 docker-compose -h(<arg>参数) ##后面可以是[options(选项)] [COMMAND(命令)] [ARGS...(参数列表)] Usage: docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...] docker-compose -h|--help Options: -f, --file FILE #指定使用的 Compose 模板文件,默认为 docker-compose.yml -p, --project-name NAME #指定项目名称,默认将使用所在目录名称作为项目名 --verbose #显示更多的输出 --log-level LEVEL #设置日志级别(DEBUG, INFO, WARNING, ERROR, CRITICAL) --no-ansi #不打印ANSI控制字符 -v, --version #打印版本并且退出 -H, --host HOST #守护进程的socket连接(Daemon socket to connect to) --tls Use TLS; implied by --tlsverify --tlscacert CA_PATH Trust certs signed only by this CA --tlscert CLIENT_CERT_PATH Path to TLS certificate file --tlskey TLS_KEY_PATH Path to TLS key file --tlsverify Use TLS and verify the remote --skip-hostname-check Don't check the daemon's hostname against the name specified in the client certificate --project-directory PATH Specify an alternate working directory (default: the path of the Compose file) --compatibility If set, Compose will attempt to convert deploy keys in v3 files to their non-Swarm equivalent Commands: build #构建(重新构建)项目中的服务容器。可选参数如下: --force-rm #删除构建过程中的临时容器。 --no-cache #构建镜像过程中不使用 cache(这将加长构建过程)。 --pull #始终尝试通过 pull 来获取更新版本的镜像。 bundle #从docker-compose文件中合成docker包 config #验证docker-compose文件格式是否正确,使用视图展示 create #创建服务 down #停止并且删除容器、网络、镜像和卷 events #从容器中实时接收到的事件(Receive real time events from containers) exec #进入指定的运行中的容器 help #获得一个命令帮助 images #列出 Compose 文件中包含的镜像。 kill #kill 容器 logs #输出容器的日志;可以通过 --no-color 来关闭颜色 pause #暂停容器 port #打印某个容器端口所映射的公共端口 ps #列出项目中目前的所有容器 pull #拉取服务依赖的镜像 push #推送服务依赖的镜像到 Docker 镜像仓库 restart #重启服务Restart services rm #删除停止的容器 Remove stopped containers -f, --force #强制直接删除。 -v #删除容器所挂载的数据卷 run #在指定服务上执行一个命令 scale #设置指定服务运行的容器个数。通过 service=num(tomcat=3) 的参数来设置数量。 start #启动 services stop #停止 services top #查看各个服务容器内运行的进程。 unpause #恢复处于暂停状态中的服务 up #创建并且执行容器 version #打印版本信息
这里主要说下docker-compose up命令,其他的命令,都很好理解,照着打就可以了。
这个命令自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。
链接的服务都将会被自动启动,除非已经处于运行状态。
默认情况,docker-compose up
启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可以很方便进行调试。
当通过 Ctrl-C
停止命令时,所有容器将会停止。
docker-compose up -d
,将会在后台启动并运行所有的容器。
默认情况,如果服务容器已经存在,docker-compose up
将会尝试停止容器,然后重新创建(继续使用 volumes-from
挂载的卷),以保证新启动的服务匹配 docker-compose.yml
文件的最新内容。
如果用户不希望容器被停止并重新创建,可以使用 docker-compose up --no-recreate
。这样将只会启动处于停止状态的容器,而忽略已经运行的服务。
如果用户只想重新部署某个服务,可以使用 docker-compose up --no-deps -d <SERVICE_NAME>
来重新创建服务并后台停止旧服务,启动新服务,并不会影响到其所依赖的服务。
选项:
-d
在后台运行服务容器。--no-color
不使用颜色来区分不同的服务的控制台输出。--no-deps
不启动服务所链接的容器。--force-recreate
强制重新创建容器,不能与 --no-recreate
同时使用。--no-recreate
如果容器已经存在了,则不重新创建,不能与 --force-recreate
同时使用。--no-build
不自动构建缺失的服务镜像。-t, --timeout TIMEOUT
停止容器时候的超时(默认为 10 秒)。默认的模板文件名称为 docker-compose.yml
,格式为 YAML 格式。
version: "3"
services:
webapp:
image: examples/web
ports:
- "80:80"
volumes:
- "/data"
注意每个服务都必须通过 image
指令指定镜像或 build
指令(需要 Dockerfile)等来自动构建生成镜像。
如果使用 build
指令,在 Dockerfile
中设置的选项(例如:CMD
, EXPOSE
, VOLUME
, ENV
等) 将会自动被获取,无需在 docker-compose.yml
中再次设置。
注意:version :’3‘ 是固定的写法,下面所有的命令都是基于services节点下的容器名称(或者编号,自定义的)下的节点开始写的,例如下面都是webapp节点下写的
version: '3'
services:
webapp: #容器的节点,自定义
下面分别介绍各个指令的用法(只列举一些常用的)。
build
自动构建这个镜像,然后使用这个镜像webapp: #容器的节点,自定义
build: ./dir #指定 Dockerfile 所在文件夹的路径(可以是绝对路径,或者相对 docker-compose.yml 文件的路径);Compose 将会利用它自动构建这个镜像,然后使用这个镜像。
也可以使用 context
指令指定 Dockerfile
所在文件夹的路径。
使用 dockerfile
指令指定 Dockerfile
文件名。
使用 arg
指令指定构建镜像时的变量。
webapp:
build:
context: ./dir
dockerfile: Dockerfile-alternate
args:
buildno: 1
使用 cache_from
指定构建镜像的缓存
build:
context: .
cache_from:
- tomcat:latest
restart
指定容器退出后的重启策略为始终重启。该命令对保持服务始终运行十分有效,在生产环境中推荐配置为 always
或者 unless-stopped
。
restart: always
command
覆盖容器启动后默认执行的命令。command: java -jar xxx.jar
container_name
指定容器名称。container_name: docker_web_tomcat
depends_on
解决容器的依赖、启动先后的问题。以下例子中会先启动db
redis
再启动 web
;注意:web
服务不会等待 redis
db
「完全启动」之后才启动
version: '3'
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: mysql
dns
自定义 DNS
服务器、dns_search
配置 DNS
搜索域、tmpfs
挂载一个 tmpfs 文件系统到容器。dns:
- 8.8.8.8
- 119.119.119.119
dns_search:
- test.example.com
- test.example.com
tmpfs:
- /run
- /tmp
environment
设置环境变量environment:
RACK_ENV: development
SESSION_SECRET:
environment:
- RACK_ENV=development
- SESSION_SECRET
k-v形式的参数,两种写法都可以
image
指定为镜像名称或镜像 ID。如果镜像在本地不存在,Compose
将会尝试拉取这个镜像。
image: mysql
ports
暴露端口信息。使用宿主端口:容器端口;仅仅指定容器的端口(宿主将会随机选择端口)
ports:
- "3000"
- "8000:8000"
- "49100:22"
- "127.0.0.1:8001:8001"
volumes
数据卷所挂载路径设置。该指令中路径支持相对路径。
volumes:
- cache/:/tmp/cache
extra_hosts
类似 Docker 中的 --add-host
参数,指定额外的 host 名称映射信息。extra_hosts:
- "test:8.8.8.8"
- "dockerhub:52.1.157.61"
会在启动后的服务容器中 /etc/hosts
文件中添加如下两条条目。
8.8.8.8 test
52.1.157.61 dockerhub
#容器有所有的资源
cap_add:
- ALL
#去掉 NET_ADMIN 能力
cap_drop:
- NET_ADMIN
devices
指定设备映射关系。devices:
- "/dev/ttyUSB1:/dev/ttyUSB0"
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。