Table of Contents generated with DocToc
compose项目是官方的开源项目,负责实现对docker镜像集群的快速编排,通过一个单独的docker-compose.yml模板文件,可以定义一组关联的应用容器为一个项目
compose重要的两个概念
服务(service):一个应用的容器,可以包含多个相同镜像运行的容器 项目(project):由一组关联的应用容器组成的完整单元,在docker-compose.yml中定义
通过包管理器下载或者到github上下载
compose的命令对象大部分是项目本身,也可以指定项目中的服务或容器,默认情况下都是项目
执行docker-compose [cammand] --help
查看具体某个命令的使用
#compose版本
version: "3"
#定义服务
services:
#服务名称
webapp:
#镜像名称
image: examples/web
#暴露的端口
ports:
- "80:80"
#映射卷
volumes:
- "/data"
也可以通过build指定dockerfile文件自动构建镜像
version: '3'
services:
webapp:
build:
context: ./dir
dockerfile: Dockerfile-alternate
args:
buildno: 1
cache_from:
- alpine:latest
- corp/web_app:3.14
-
args
:指定构建时的缓存,cache_from
:指定构建时的缓存 -
cammand
:指定容器启动后执行的命令
-
build Build or rebuild services
-
convert Converts the compose file to platform's canonical format
-
cp Copy files/folders between a service container and the local filesystem
-
create Creates containers for a service.
-
down Stop and remove containers, networks
-
events Receive real time events from containers.
-
exec Execute a command in a running container.
-
images List images used by the created containers
-
kill Force stop service containers.
-
logs View output from containers
-
ls List running compose projects
-
pause Pause services
-
port Print the public port for a port binding.
-
ps List containers
-
pull Pull service images
-
push Push service images
-
restart Restart containers
-
rm Removes stopped service containers
-
run Run a one-off command on a service.
-
start Start services
-
stop Stop services
-
top Display the running processes
-
unpause Unpause services
-
up Create and start containers
-
version Show the Docker Compose version information
用法和docker命令一样
ompose目前有三个版本分别为Version 1,Version 2,Version 3,Compose区分Version 1和Version 2(Compose 1.6.0+,Docker Engine 1.10.0+)。Version 2支持更多的指令。Version 1将来会被弃用
image是指定服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取镜像。
服务除了可以基于指定的镜像,还可以基于一份Dockerfile,在使用up启动时执行构建任务,构建标签是build,可以指定Dockerfile所在文件夹的路径。Compose将会利用Dockerfile自动构建镜像,然后使用镜像启动服务容器。
context选项可以是Dockerfile的文件路径,也可以是到链接到git仓库的url,当提供的值是相对路径时,被解析为相对于撰写文件的路径,此目录也是发送到Docker守护进程的context
build:
context: ./dir
使用dockerfile文件来构建,必须指定构建路径
build:
context: .
dockerfile: Dockerfile-alternate
启动命令
指定容器名称
指定容器依赖
ports用于映射端口的标签。 使用HOST:CONTAINER格式或者只是指定容器的端口,宿主机会随机映射端口。
ports:
- "3000"
- "8000:8000"
- "49100:22"
- "127.0.0.1:8001:8001"
添加主机名的标签,会在/etc/hosts文件中添加一些记录。
extra_hosts:
- "somehost:162.242.195.82"
- "otherhost:50.31.209.229"
挂载一个目录或者一个已存在的数据卷容器,可以直接使用 [HOST:CONTAINER]格式,或者使用[HOST:CONTAINER:ro]格式,后者对于容器来说,数据卷是只读的,可以有效保护宿主机的文件系统。 Compose的数据卷指定路径可以是相对路径,使用 . 或者 .. 来指定相对目录。 数据卷的格式可以是下面多种形式
volumes:
// 只是指定一个路径,Docker 会自动在创建一个数据卷(这个路径是容器内部的)。
- /var/lib/mysql
// 使用绝对路径挂载数据卷
- /opt/data:/var/lib/mysql
// 以 Compose 配置文件为中心的相对路径作为数据卷挂载到容器。
- ./cache:/tmp/cache
// 使用用户的相对路径(~/ 表示的目录是 /home/<用户目录>/ 或者 /root/)。
- ~/configs:/etc/configs/:ro
// 已经存在的命名的数据卷。
- datavolume:/var/lib/mysql
暴露端口,但不映射到宿主机,只允许能被连接的服务访问。仅可以指定内部端口为参数,如下所示:
expose:
- "3000"
- "8000"
链接到其它服务中的容器。使用服务名称(同时作为别名),或者服务名称:服务别名(如 SERVICE:ALIAS),例如
links:
- db
- db:database
- redis
设置网络模式。
net: "bridge"
net: "none"
net: "host"
自定义DNS服务器。可以是一个值,也可以是一个列表。
dns:8.8.8.8
dns:
- 8.8.8.8
- 9.9.9.9