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

时间:2018-02-19 21:53:20

标签: docker docker-compose

我有以下文件夹结构:

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图像包含rootdir中的两个文件AAABBB,这需要一个Dockerfile依赖另一个。

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

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

1 个答案:

答案 0 :(得分:3)

您可以在docker-compose.yml中使用depends_on,我知道它在docker-compose YAML版本3中可用,表示服务B依赖于A而docker-compose将遵循依赖关系链表达和建立第一。请参阅depends_on here的说明。

由于B是FROM 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