如何使用 docker-compose 来构建 Dockerfile?

Has*_*tin 3 docker dockerfile docker-compose devops

我有这样的结构:

在此输入图像描述

在我的 Makefile 中,我构建了 dockerfile:

sudo docker build --build-arg PHP_VERSION=7.4 -t kaiza/image-php74 - < dockerfile/Dockerfile.php
Run Code Online (Sandbox Code Playgroud)

kaiza /image-php74在本地创建得很好,如果我这样做docker images,我会得到:

在此输入图像描述

然后,在我的 docker-compose.php74.yml 中:

version: '2.4'

services:
  php7.4:
    image: "kaiza/image-php74"
    container_name: "kz-php74"
    hostname: "kz-php74"
    user: 1000:1000
...
Run Code Online (Sandbox Code Playgroud)

但是,当我运行它时

docker-compose -f docker-compose/php/docker-compose.php74.yml up --build -d
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

“kaiza/image-php74 的拉取访问被拒绝,存储库不存在或可能需要‘docker 登录’:被拒绝:请求的资源访问被拒绝”

任何人都知道如何在不通过注册表解决方案的情况下解决这个问题(以将所有内容保留在本地)?

谢谢。

Chr*_*cke 10

docker-compose 可以用作构建 Dockerfile 的工作流程的一部分。

安排此操作的一个好方法是在根目录中放置一个 docker-compose.yml,然后为每个服务创建一个子文件夹。

compose.yml

services:
  php7.4:
    image: kaiza/image-php74:latest
    build:
      context: php74
      args:
        PHP_VERSION: ${VERSION-7.3}
Run Code Online (Sandbox Code Playgroud)

假设从 docker-compose 到 php74 Dockerfile 的相对路径是 php74/Dockerfile 那么:

docker-compose build php7.4将构建并将图像标记为 kaiza/image-php74,并且docker-compose updocker-compose run php7.4将构建图像(如果需要),或者使用本地构建的图像(如果可用)。

构建部分的完整参考可在github上找到

  • [构建参考也可在 docker.com 上找到](https://docs.docker.com/compose/compose-file/compose-file-v3/)。 (2认同)