|
注意:在编写docker-compose.yml文件时,所有的冒号(:)、短横线(-)后面都需要加一个空格,不然会出错。 1、build指定Dockerfile所在文件夹的路径(可以是绝对路径,或者相对于docker-compose.yml文件的路径)。docker-compose将会利用它自动构建这个镜像,然后使用这个镜像。 使用 context 指定Dockerfile所在文件夹的路径。 使用 dockerfile 指定Dockerfile文件名 使用 args 指定构建镜像时的变量 - version: '3'
- services:
- web:
- build:
- context: ./dir
- dockerfile: Dockerfile
- args:
- timezone: 1
复制代码 2、container_name指定容器名称,相当于docker run中的--name。默认将会使用 项目名称_服务名称_序号 - version: '3'
- services:
- web:
- container_name: web-1
复制代码 3、command覆盖容器启动后默认执行的命令,覆盖DockerFile中的CMD或第三方镜像的启动命令 - version: '3'
- services:
- web:
- command: echo 'ok'
复制代码
4、environment设置环境变量,相当于docker run中的-e。 可以使用数组或字典两种格式。只给定名称的变量会自动获取运行Compose主机上对应变量的值,可以用来防止泄露不必要的数据。 -e中值部分需要使用引号包裹, docker-compose.ymal中不需要用引号 - version: '3'
- services:
- mysql:
- environment:
- - MYSQL_ROOT_PASSWORD=12345678
- - MYSQL_DATABASE=my-db
-
- environment:
- - MYSQL_ROOT_PASSWORD: 12345678
复制代码 5、env_file
设置环境变量的文件路径,相当于docker run中的--env-file,文件必须是.env,内容中key=value - version: '3'
- services:
- web:
- env_file:
- - envfile_path.env
复制代码- # this is a environment file
- NAME=kk yy
- LENGHT=18.8
复制代码 6、image指定为镜像名或镜像ID,如果镜像在本地不存在,Compose将会尝试拉取这个镜像。 - version: '3'
- services:
- mysql:
- image: mysql:5.7
复制代码 7、network_mode设置网络模式。使用和docker run的--network参数一样的值 - version: '3'
- services:
- mysql:
- network_mode: 'host'
- network_mode: 'none'
- network_mode: 'bridge'
复制代码 8、networksservices中指定容器连接的网络,配置/创建network - version: '3'
- services:
- web:
- networks:
- - network-demo
- networks:
- network-demo
复制代码- version: '3'
- services:
- web:
- networks:
- network-demo:
- ipv4_address: 172.30.5.70
- networks:
- network-demo
复制代码 9、ports暴露端口信息,使用宿主端口:容器端口(HOST:CONTAINER)格式,或者仅仅指定容器的端口(宿主将会随机选择端),相当与docker run中的-p - version: '3'
- services:
- web:
- posrts:
- - "8000:80"
- - "8080:8080"
- - "3000"
复制代码 10、volumes数据卷所挂载路径设置,可以设置宿主机路径,同时支持相对路径,相当于docker run中的-v :ro定义容器中的只读目录 - version: '3'
- services:
- web:
- volumes:
- -v ./config:/root/config
- -v /home/xx/config:/root/config
- -v ./nginx.conf:/etc/nginx/nginx.conf:ro
复制代码 11、entrypoint指定服务容器启动后执行的入口文件 - version: '3'
- services:
- web:
- entrypoint: /root/start.sh
复制代码 12、working_dir指定容器中工作目录, 也可在Dockerfile中指定 - version: '3'
- services:
- web:
- working_dir: /root/proj
复制代码 13、hostname指定容器主机名,相当于docker run中的-h - version: '3'
- services:
- web:
- hostname: web-1
复制代码 14、restart指定重启策略,相当于docker run中的--restart - version: '3'
- services:
- web:
- restart: always
复制代码 15、引用环境变量Compose模板文件支持动态读取宿主机的系统环境变量和当前目录下 .env 文件中的变量。 例如,下面Compose文件将从运行它的环境中读取变量${MONGO_VERSION}的值,并写入执行的指令中 - version: '3'
- services:
- db:
- image: "mongo:${MONGO_VERSION}"
复制代码 16、expose暴露端口,但不映射到宿主机,只被连接的服务访问。仅可以指定内部端口为参数。 - version: '3'
- services:
- mysql:
- expose:
- - "3306"
复制代码 17、extra_hosts类似Docker中的--add-host参数,指定额外的host名称映射信息。会在启动后的服务容器中/etc/hosts文件中添加一个条目。如:8.8.8.8 googledns - version: '3'
- services:
- mysql:
- extra_hosts:
- - "baidu:8000"
复制代码 18、healthcheck通过命令检查容器是否正常运行 - version: '3'
- services:
- mysql:
- healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost"]
- interval: 1m30s
- timeout: 10s
- retries: 3
复制代码 19、links连接到其他容器。注意:不推荐使用该指令。 应该使用docker network,建立网络,而docker run --network来连接特定网络。 或者使用version: '2' 和更高版本的docker-compose.yml直接定义自定义网络并使用。 20、ulimits指定容器的ulimits限制值。 例如,指定最大进程数为65535,指定文件句柄数为20000(软限制,应用可以随时修改,不能超过硬限制)和 40000(系统硬限制,只能root用户提高) - version: '3'
- services:
- mysql:
- ulimits:
- nproc: 65535
- nofile:
- soft: 20000
- hard: 40000
复制代码 21、user指定容器中运行应用的用户名 - version: '3'
- services:
- mysql:
- user: ubuntu
复制代码 22、links链接到其它服务的中的容器,可以指定服务名称也可以指定链接别名(SERVICE:ALIAS),与 Docker 客户端的 --link 有一样效果,会连接到其它服务中的容器。 - version: '3'
- services:
- web:
- links:
- - db
- - db:database
- - redis
复制代码 23、depends_on容器中服务之间的依赖关系,依赖关系会导致以下行为: - docker-compose up以依赖顺序启动服务。在以下示例中,db并redis在之前启动web。
- docker-compose up SERVICE自动包含SERVICE依赖项。在以下示例中,docker-compose up web还创建并启动db和redis。
- docker-compose stop按依赖顺序停止服务。在以下示例中,web在db和之前停止redis
- version: "3.7"
- services:
- web:
- build: .
- depends_on:
- - db
- - redis
- redis:
- image:redis
- db:
- image:postgres
复制代码
|