容器相关
每个容器配置项就是其名字,可以用在代码中来进行访问,但是在 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