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

Jed*_*edi 1 docker docker-compose

我有以下文件夹结构:

my_package
|- docker_compose.yml
|- a
   |- Dockerfile
|- b
   |- Dockerfile
Run Code Online (Sandbox Code Playgroud)

在这里,我的docker-compose.yml是:

version: '2'
services:
  a:
    build: 
      context: a
      dockerfile: Dockerfile
  b:
    build: 
      context: b 
      dockerfile: Dockerfile
Run Code Online (Sandbox Code Playgroud)

当我运行时,docker-compose build我期望有两个输出图像,a一个用于b.

这是 a/Dockerfile

FROM ubuntu
RUN touch AAA
Run Code Online (Sandbox Code Playgroud)

这是 b/Dockerfile

FROM <a> # NOT SURE WHAT TO PUT HERE
RUN touch BBB
Run Code Online (Sandbox Code Playgroud)

我希望b图像在 rootdirAAA和 中包含两个文件BBB,这需要一个 Dockerfile 依赖于另一个。

这可能吗?是否有任何解决方法可以在一个docker-compose build命令中构建两个 Docker 映像(它们之间存在依赖关系)?

我坚持使用Docker version 1.12.6, build 78d1802(仅与版本 2 语法兼容)。

Bri*_*den 5

您可以depends_on在 docker-compose.yml 中使用,我知道它在 docker-compose YAML 版本 3 中可用,以表示服务 B 依赖于 A,而 docker-compose 将遵循您表达的依赖链并首先构建 A。在此处查看depends_on 的说明。

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

version: '3'
services:
  a:
    build: 
      context: a
      image: a
      dockerfile: Dockerfile
  b:
    build: 
      context: b 
      image: b
      dockerfile: Dockerfile
    depends_on: 
    - a
Run Code Online (Sandbox Code Playgroud)

编辑(由 OP):

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