构建依赖于本地“Dockerfile”的docker镜像

问题描述 投票:0回答:2

我有以下文件夹结构:

my_package
|- docker_compose.yml
|- a
   |- Dockerfile
|- b
   |- Dockerfile

在这里,我的

docker-compose.yml
是:

version: '2'
services:
  a:
    build: 
      context: a
      dockerfile: Dockerfile
  b:
    build: 
      context: b 
      dockerfile: Dockerfile

当我运行

docker-compose build
时,我期望输出两个图像,一张用于
a
,一张用于
b

这里

a/Dockerfile

FROM ubuntu
RUN touch AAA

这里

b/Dockerfile

FROM <a> # NOT SURE WHAT TO PUT HERE
RUN touch BBB

我希望

b
映像在根目录中包含两个文件,
AAA
BBB
,这需要一个 Dockerfile 依赖于另一个文件。

这可能吗?是否有任何解决方法可以在一个

docker-compose build
命令中构建两个 Docker 映像(它们之间具有依赖关系)?

我坚持使用

Docker version 1.12.6, build 78d1802
(仅与版本 2 语法兼容)。

docker docker-compose
2个回答
13
投票

您可以在 docker-compose.yml 中使用

depends_on
,我知道它在 docker-compose YAML 版本 3 中可用,以表示服务 B 依赖于 A,并且 docker-compose 将遵循您表达的依赖关系链并构建 A第一的。请参阅here对depends_on的解释。

由于 B 来自 A,因为 B 的 Dockerfile 表示文件 AAA 和 BBB 将在服务 B 中可用,只要文件 AAA 和文件 BBB 的权限相同,并且在这种情况下,您在这两个服务中都以 root 身份运行当您执行 touch 命令时 A 和服务 B。

version: '3'
services:
  a:
    build: 
      context: a
      image: a
      dockerfile: Dockerfile
  b:
    build: 
      context: b 
      image: b
      dockerfile: Dockerfile
    depends_on: 
    - a

编辑(由OP):

  1. 您也可以在 v2 中使用
    depends_on
    ,但使用数组。
  2. 确保在docker-compose.yml中添加
    image
    来指定生成的镜像,这样才能生成
    b
    FROM a

0
投票

如果将

a/Dockerfile
移至
a.Dockerfile

mv my_package/a{/,.}Dockerfile

然后可以这样做:

services:
  b:
    build:
      context: .
      dockerfile: b.Dockerfile

FROM a

© www.soinside.com 2019 - 2024. All rights reserved.