Compose 是一个用于定义和运行多容器 Docker 的工具。借助 Compose,您可以使用 YAML 文件来配置应用程序的服务。
compose 的诸多优点:
- 在单个主机上建立多个隔离环境,Compose 使用项目名称将环境彼此隔离。您可以在多个不同的上下文中使用此项目名称。默认项目名称是项目目录的基本名称。您可以使用-p 命令行选项或 COMPOSE_PROJECT_NAME 环境变量设置自定义项目名称 。默认项目目录是 Compose 文件的基本目录。可以使用--project-directory 命令行选项自定义项目目录。
- 创建容器时保留卷数据
- 仅重新创建已更改的容器,当您重新启动未更改的服务时,Compose 会使用现有容器。
- 变量在环境之间组合重复使用
使用 Compose 基本上分为三步:
- 使用 Dockerfile 定义您的应用程序的环境
FROM python:3.7-alpine
从 Python 3.7 映像开始构建镜像
WORKDIR /code
将工作目录设置为 /code
ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0
设置 flask 命令使用的环境变量
RUN apk add --no-cache gcc musl-dev linux-headers
安装 gcc,以便诸如 MarkupSafe 和 SQLAlchemy 之类的 Python 包可以编译加速
COPY requirements.txt requirements.txt
将.项目中的当前目录复制到 . 镜像中的工作目录
RUN pip install -r requirements.txt
COPY . .
CMD ["flask", "run"]
容器提供默认的执行命令为:flask run
- 使用 docker-compose.yml 定义组成您的应用程序的服务
- 运行docker compose up启动并运行程序
多个配置文件
我们可以为同一个项目配置多个compose文件,使用多个 Compose 文件使您能够针对不同的环境或不同的工作流程自定义 Compose 应用程序。默认情况下,Compose 读取两个文件,docker-compose.yml和一个可选的docker-compose.override.yml文件。按照惯例,docker-compose.yml包含您的基本配置。override.yml 文件,顾名思义,就是包含现有服务或全新服务的配置覆盖。如果在两个文件中都定义了服务,Compose 会使用 override 进行合并配置。
要使用多个覆盖文件或具有不同名称的覆盖文件,您可以使用该-f选项来指定文件列表。Compose 按照在命令行中指定的顺序合并文件。
当您使用多个配置文件时,您必须确保文件中的所有路径都相对于基本 Compose 文件( 指定的第一个 Compose 文件-f)
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
docker-compse.yml具体的配置:
1、version
指定本 yml 依从的 compose 哪个版本制定的。
2、build
指定为构建镜像上下文路径:例如 webapp 服务,指定为从上下文路径 ./dir/Dockerfile 所构建的镜像;或者,作为具有在上下文指定的路径的对象,以及可选的 Dockerfile 和 args:
version: "3.7"
services:
webapp:
build:
context: ./dir
dockerfile: Dockerfile-alternate
args:
buildno: 1
labels:
- "com.example.description=Accounting webapp"
- "com.example.department=Finance"
- "com.example.label-with-empty-value"
target: prod
- context:上下文路径。
- dockerfile:指定构建镜像的 Dockerfile 文件名。
- args:添加构建参数,这是只能在构建过程中访问的环境变量。
- labels:设置构建镜像的标签。
- target:多层构建,可以指定构建哪一层。
3、cap_add,cap_drop
添加或删除容器拥有的宿主机的内核功能。
cap_add:
- ALL # 开启全部权限
cap_drop:
- SYS_PTRACE # 关闭 ptrace权限
4、cgroup_parent
为容器指定父 cgroup 组,意味着将继承该组的资源限制。
cgroup_parent: m-executor-abcd
5、command
覆盖容器启动的默认命令。
command: ["bundle", "exec", "thin", "-p", "3000"]
6、container_name
指定自定义容器名称,而不是生成的默认名称。
container_name: my-web-container
6、depends_on
设置依赖关系。
- docker-compose up :以依赖性顺序启动服务。在以下示例中,先启动 db 和 redis ,才会启动 web。
- docker-compose up SERVICE :自动包含 SERVICE 的依赖项。在以下示例中,docker-compose up web 还将创建并启动 db 和 redis。
- docker-compose stop :按依赖关系顺序停止服务。在以下示例中,web 在 db 和 redis 之前停止。
version: "3.7"
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
注意:web 服务不会等待 redis db 完全启动 之后才启动。
7、deploy
指定与服务的部署和运行有关配置,