Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。它允许用户使用YAML格式的配置文件(通常是docker-compose.yml)来配置应用程序所需的所有服务,并可以通过一个命令来启动或关闭这些容器。
服务配置(接上一篇)
39. volumes
指定所挂载的主机路径或数据卷名称。支持short和long两种格式的语法。可以将主机路径作为单个服务的一部分进行挂载,而无需在顶层volumes配置项中定义。但是如果想要在多个服务之间重用数据卷,需要在顶层volumes配置项中定义一个数据卷名称。
在3版的配置文件格式中的变化:在顶层volumes配置项中定义了数据卷名称并从每个服务的volumes列表中引用了该数据卷。这将替代早期版本的Compose配置文件格式中的volumes_from配置项。
short语法使用通用的[SOURCE:]TARGET[:MODE]格式,SOURCE可以是主机路径或数据卷名称,TARGET为挂载数据卷的容器路径,MODE可以为ro只读模式或rw读写模式(默认)。可以在主机上挂载相对路径,该路径相对于正在使用的Compose配置文件的目录进行扩展,相对路径应始终以.或..开头。例如:
volumes:
#只指定一个路径,Docker会自动在创建一个数据卷(这个路径是容器内部的)
- /var/lib/mysql
#使用绝对路径挂载数据卷
- /opt/data:/var/lib/mysql
#使用基于Compose配置文件的相对路径作为数据卷挂载到容器
- ./cache:/tmp/cache
#使用基于root用户的相对路径作为数据卷挂载到容器
- ~/configs:/etc/configs/:ro
#使用已经存在命名的数据卷挂载到容器
- datavolume:/var/lib/mysql
long语法支持配置以下short语法中不支持的附加字段:
type:挂载类型,可以为volume、bind、tmpfs或npipe。
source:挂载源,在主机上用于绑定挂载的路径或定义在顶层volumes配置项中的数据卷名称。不适用于tmpfs挂载类型。
target:数据卷挂载在容器中的路径。
read_only:设置数据卷为只读。
bind:配置额外的bind选项。
propagation:用于绑定的传播模式。
volume:配置额外的volume选项。
nocopy:创建数据卷时禁止从容器复制数据。
tmpfs:配置额外的tmpfs选项。
size:tmpfs挂载的大小,以字节为单位。
consistency:挂载的一致性要求,可以为consistent、cached或delegated。其中consistent表示主机和容器具有相同视图。cached表示读取缓存,主机视图是权威的。delegated表示读写缓存,容器视图是权威的。
例如:
version: "3.8"
services:
web:
image: nginx:alpine
ports:
- "80:80"
volumes:
- type: volume
source: mydata
target: /data
volume:
nocopy: true
- type: bind
source: ./static
target: /opt/app/static
networks:
webnet:
volumes:
mydata:
40. 其他配置项
此外,还有domainname、hostname、ipc、mac_address、privileged、read_only、shm_size、stdin_open、tty、user和working_dir这些配置项。它们都是单值配置,和docker run中的对应选项类似。注意mac_address是旧版本配置项。例如:
#指定容器中运行应用的用户名
user: postgresql
#指定容器的工作目录
working_dir: /code
#指定容器中的搜索域名
domainname: foo.com
#指定容器中的主机名
hostname: foo
ipc: host
#指定容器中的mac地址
mac_address: 02:42:ac:11:65:43
#指定容器为特权容器
privileged: true
#指定以只读模式挂载容器的root文件系统,不能对容器内容进行修改
read_only: true
#设置/dev/shm分区的大小
shm_size: 64M
#打开标准输入,可以接受外部输入
stdin_open: true
#分配tty设备用来支持终端登录
tty: true