示例文件:docker-compose.yml
version: '3.8' # Docker Compose 文件版本号
services: # 定义应用程序中的服务,每个服务对应一个容器
web: # 定义一个名为 web 的服务
image: nginx:latest # 指定该服务使用的 Docker 镜像名称
build: . # 指定 Dockerfile 的路径,Docker Compose 将自动构建该服务的 Docker 镜像
container_name: nginx # 指定该容器的名称
ports: # 指定容器和宿主机之间的端口映射关系,格式为宿主机端口:容器端口
- "8080:80" # 将宿主机的 8080 端口映射到容器的 80 端口
volumes: # 指定容器和宿主机之间的数据卷映射关系,格式为宿主机路径:容器路径
- ./nginx.conf:/etc/nginx/nginx.conf:ro # 将宿主机上的 nginx.conf 文件映射到容器的 /etc/nginx/nginx.conf 文件,并设置为只读模式
environment: # 指定容器的环境变量
- NGINX_PORT=80 # 设置一个名为 NGINX_PORT 的环境变量,值为 80
command: nginx -g 'daemon off;' # 指定容器启动后要执行的命令,即运行 nginx,并设置为后台模式
restart: always # 指定容器退出后的重启策略,可选值为 no、always、on-failure、unless-stopped
depends_on: # 指定容器之间的依赖关系,使得一个容器启动前必须先启动其依赖的容器
- db # 表示该容器依赖于名为 db 的服务
networks: # 指定容器所属的网络
- backend # 将该容器加入名为 backend 的网络中
db: # 定义一个名为 db 的服务
image: mysql:5.7 # 指定该服务使用的 Docker 镜像名称
restart: on-failure:5 # 指定容器退出后的重启策略,on-failure:5 表示在容器退出代码非零时重启容器,最多重试 5 次
environment: # 指定容器的环境变量
- MYSQL_ROOT_PASSWORD=root # 设置一个名为 MYSQL_ROOT_PASSWORD 的环境变量,值为 root
- MYSQL_DATABASE=mydb # 设置一个名为 MYSQL_DATABASE 的环境变量,值为 mydb
- MYSQL_USER=user # 设置一个名为 MYSQL_USER 的环境变量,值为 user
- MYSQL_PASSWORD=password # 设置一个名为 MYSQL_PASSWORD 的环境
build
build 还可继续设置参数,包括:
- context:指定构建上下文路径,默认为当前目录。
- dockerfile:指定 Dockerfile 文件路径,默认为 ./Dockerfile。
- args:设置构建时的构建参数,格式为一个 key-value 的映射,可以在 Dockerfile 文件中使用 ${key} 来引用该参数。
具体含义如下:
context:构建上下文路径,即指定在哪个目录下寻找 Dockerfile 文件以及构建上下文。如果该路径是相对路径,则相对于 docker-compose.yml 所在目录。构建上下文路径中的所有文件和文件夹都会被发送到 Docker 引擎以供构建使用,因此如果上下文路径中包含大量不必要的文件,则会导致构建时间过长和镜像体积过大。
dockerfile:Dockerfile 文件路径,即指定使用哪个 Dockerfile 文件进行构建。默认为 ./Dockerfile
,即当前目录下的 Dockerfile 文件。如果指定了相对路径,则相对于构建上下文路径。如果指定了绝对路径,则会忽略上下文路径。
args:构建参数,即在构建过程中传递给 Dockerfile 文件的变量。可以在 Dockerfile 文件中使用 ${key} 的方式引用该变量。例如,可以使用 args: { APP_ENV: production } 设置一个名为 APP_ENV 值为 production 的构建参数。在 Dockerfile 文件中可以使用 ${APP_ENV} 引用该参数。
除此之外,build 参数还可以包含一些其他的选项,例如:
- cache_from:从指定的镜像中使用缓存来加速构建。
- labels:为构建过程添加元数据标签。
- network:指定构建时使用的网络。
- shm_size:指定共享内存区的大小。
- target:指定使用 Dockerfile 文件中的哪个构建阶段进行构建。