容器相关

每个容器配置项就是其名字,可以用在代码中来进行访问,但是在 docker ps 中 compose 会自动给一个格式化的命名。

build

配置容器自己的 dockerfile 以及容器上下文:

services:
  backend:
    build: ./backend

第二种形式是当你 dockerfile 名字跟默认的不同时,需要指定容器上下文以及dockerfile的名字:

services:
  backend:
    build:
      context: ./backend
      dockerfile: Dockerfile-dev

context 设置的路径必须要包括 dockerfile 中要 COPY 的目录,若 dockerfile 是在更深的路径而要复制的是浅层的目录则 context 设置的就需要包含更浅的。

ports 端口

services:
  backend:
    ports:
      - '80:80'

Volumes

services:
  backend:
    volumes:
      - logs:/app/logs # 命名 Volume 需要全局声明
      - ./backend:/app # bind-mounts
      - /app/node_modules # 匿名 Volume

全局声明:

service:
  ...
 
volumes:
  logs:

env 运行时环境变量

services:
  mongodb:
    image: 'mongo'
    volumes:
      - data:/data/db
    env_file:
      - ./env/mongo.env # . 代表当前 compose 文件所在位置
    #environment:
	#  MONGO_INITDB_ROOT_USERNAME:max
	#  MONGO_INITDB_ROOT_PASSWORD:secrect
	#  - MONGO_INITDB_ROOT_USERNAME=max
	# 这里可以用 env_file 或者直接写,:代表是一个yaml对象,而 - 就只是一个键值对

depends_on 容器依赖

配置的容器会确保当前容器在所列容器之后运行:

service:
  backend:
    depends_on:
      - mongodb

容器名称

services:
  backend:
    container_name: backend_server

会强制修改容器列表中对应的容器名,但不会影响代码引用。

配置 -it 运行参数

对于像 node,react 这些运行后会进入交互式环境的程序,如果在 docker 中不以交互式运行则会直接退出。

services:
  frontend:
    ...
    stdin_open: true
    tty: true