什么是上下文:。在 docker-compose 中?

Ary*_*are 8 docker docker-compose

我正在尝试学习 docker 并创建了我的第一个 docker compose 文件。基本上我正在尝试创建一个 Django Web 微服务并使用 docker compose 文件来管理它。这是我的 docker-compose.yml 代码:

version: "3"

services:
  app:
    build:
      context: .
    ports:
      - "8000:8000"
    volumes:
      - ./app:/app
    command: >
      sh -c "py manage.py runserver 0.0.0.0:8000"
Run Code Online (Sandbox Code Playgroud)

我不明白的用法context: .有人可以解释一下吗

Tha*_*Van 9

语境

包含 Dockerfile 的目录的路径,或 git 存储库的 url。

当提供的值是相对路径时,它被解释为相对于 Compose 文件的位置。此目录也是发送到 Docker 守护程序的构建上下文。

Compose 使用生成的名称构建并标记它,然后使用该图像。

build:
  context: ./dir
Run Code Online (Sandbox Code Playgroud)

这意味着,它是包含 Dockerfile 文件的目录的路径。它的目的是为服务建立一个新的形象。

参考:https : //docs.docker.com/compose/compose-file/compose-file-v3/

在你的情况下:

   context: .
Run Code Online (Sandbox Code Playgroud)

Dockerfile 文件应该存在于当前目录中。(在 docker-compose.yml 文件的同一文件夹中)


Ler*_*ang 9

官方文档我们得知:

context 定义包含 Dockerfile 的目录的路径,或 git 存储库的 URL。

在您的情况下,.是一个相对路径,表示您运行命令的当前目录docker-compose,并且 Compose 可以在其中找到 Dockerfile(显然还有该docker-compose.yaml文件)。

Dockerfile 也可以在其他地方使用dockerfile关键字,如下例所示

version: "3.3"
services:
  
  service-A
    build:
      context: ./all-service
      dockerfile: ./service-A/Dockerfile

  service-B
    build:
      context: ./all-service
      dockerfile: ./service-B/Dockerfile

  service-C
    build:
      context: ./all-service
      dockerfile: ./service-C/Dockerfile 
Run Code Online (Sandbox Code Playgroud)

这里附加的context关键字是告诉 Dockerfile 在哪里可以找到其依赖文件。

例如,在您的其中之一中Dockerfile有以下几行:

WORKDIR /my-app
COPY package.json package.json
COPY package-lock.json package-lock.json
RUN npm install
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

这三个文件必须位于上下文目录或 git 存储库中:package.json, package-lock.json, requirements.txt.