docker Compose 示例1
Last updated
Was this helpful?
Last updated
Was this helpful?
Docker Compose 是一个用于定义和运行多容器应用程序的工具。它是解锁精简高效的开发和部署体验的关键。
Compose 简化了整个应用程序堆栈的控制,让您可以轻松地在一个易于理解的 YAML 配置文件中管理服务、网络和卷。然后,您只需一个命令即可从配置文件中创建并启动所有服务。
官网:
docker-compose.yml
配置文件version: "3"
指定 Docker Compose 文件的版本。
版本 3 是 Docker Compose 的一个稳定版本,适用于大多数场景。
services:
定义了一个名为 app
的服务。
每个服务都会启动一个容器,您可以在其中运行应用程序。
build:
context: .
指定构建上下文为当前目录,即 Docker Compose 会在当前目录查找 Dockerfile 进行构建。
args:
DEV: "true"
传递构建参数 DEV
,值为 "true"
,可在 Dockerfile 中使用 ARG DEV
进行条件判断。
image:
指定构建完成后生成的镜像名称和标签。
在此示例中,镜像名称为 my-fastapi-app
,标签为 2.0
。
environment:
设置环境变量 APP_PORT
,值为 8082
,该变量可在应用程序中使用。
可在Dockerfile
通过 ${APP_PORT}
引用、默认值写法:${APP_PORT:-8080}
ports:
将容器的端口 8082
映射到主机的端口 8082
,使得主机可以访问容器中的服务。
env_file:
指定一个环境变量文件 .env
,Docker Compose 会自动加载该文件中的变量到容器环境中。
command:
指定容器启动时执行的命令。
在此示例中,使用 /bin/sh -c
来执行 uvicorn
启动 FastAPI 应用。
注意:在 shell 中引用环境变量时,需要使用 $$
来转义 $
,以避免在 Docker Compose 解析时被提前解析。
主要是为了公用环境变量,采用shell语法来写,静态写法:command: uvicorn main:app --reload --host 0.0.0.0 --port 8000
command命令会替换Dockerfile
中CMD
命令
volumes:
将当前目录的 app
目录挂载到容器的 /app
目录,允许在主机和容器之间共享文件。
根据Docker Compose环境变量优先级规则,我们可以总结出以下优先级公式(从高到低):
docker compose run --env VAR=value
(直接赋值)
docker compose run --env VAR
(从主机环境继承)
compose.yml
中的environment:
(直接赋值)
compose.yml
中的env_file:
(直接赋值)
compose.yml
中的environment:
(引用.env
或主机环境)
compose.yml
中的env_file:
(引用.env
或主机环境)
Docker镜像中的ENV
指令
.env
文件中的值(仅当被引用时)
主机环境变量(仅当被引用时)
如果环境变量是在Dockerfile
中是CMD用法时,需要shell语法来识别环境变量,见:
加载环境变量优先级:
加载环境变量优先级:
参考: