默认的模板文件名称为 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
中再次设置。
build
1、
指定 Dockerfile
所在文件夹的路径(可以是绝对路径,或者相对 docker-compose.yml 文件的路径)。 Compose
将会利用它自动构建这个镜像,然后使用这个镜像。
version: '3'services: webapp: build: ./dir # dir文佳夹里面有Dockerfile文件
2、
你也可以使用 context
指令指定 Dockerfile
所在文件夹的路径。
使用 dockerfile
指令指定 Dockerfile
文件名。
使用 arg
指令指定构建镜像时的变量。
version: '3'services: webapp: build: context: ./dir # Dockerfile 所在文件夹的路径。 dockerfile: Dockerfile-alternate # Dockerfile 文件名 args: # 构建镜像时的变量 buildno: 1
使用 cache_from
指定构建镜像的缓存
build: context: . cache_from: # 指定构建镜像的缓存 - alpine:latest - corp/web_app:3.14
command
覆盖容器启动后默认执行的命令。
command: echo "hello world"
container_name
指定容器名称。默认将会使用 项目名称_服务名称_序号
这样的格式。
container_name: docker-web-container
注意: 指定容器名称后,该服务将无法进行扩展(scale),因为 Docker 不允许多个容器具有相同的名称。
devices
指定设备映射关系。
devices: - "/dev/ttyUSB1:/dev/ttyUSB0"
depends_on
解决容器的依赖、启动先后的问题。以下例子中会先启动 redis
db
再启动 web
version: '3'services: web: build: . depends_on: - db - redis redis: image: redis db: image: postgres
注意:web
服务不会等待 redis
db
「完全启动」之后才启动。