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

Build docker image that depends on a local “Dockerfile”

我有以下文件夹结构:

1
2
3
4
5
6
my_package
|- docker_compose.yml
|- a
   |- Dockerfile
|- b
   |- Dockerfile

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

1
2
3
4
5
6
7
8
9
10
version: '2'
services:
  a:
    build:
      context: a
      dockerfile: Dockerfile
  b:
    build:
      context: b
      dockerfile: Dockerfile

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

这是a/Dockerfile

1
2
FROM ubuntu
RUN touch AAA

这是b/Dockerfile

1
2
FROM  # NOT SURE WHAT TO PUT HERE
RUN touch BBB

我希望b图像在rootdir中包含两个文件:AAABBB,这需要一个dockerfile依赖于另一个dockerfile。

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

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


您可以在docker-compose.yml中使用depends_on,我知道它在docker-compose yaml版本3中可用,以表示服务B依赖于A,docker-compose将遵循您表示的依赖链并首先构建A。请参阅此处的"依赖"解释。

由于b来自a,因为b的dockerfile表示文件aa和bbb在服务b中都可用,只要文件aa和文件bbb的权限相同,在这种情况下,在执行touch命令时,在服务a和服务b中都以根用户身份运行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
version: '3'
services:
  a:
    build:
      context: a
      image: a
      dockerfile: Dockerfile
  b:
    build:
      context: b
      image: b
      dockerfile: Dockerfile
    depends_on:
    - a

编辑(通过OP):

  • 您也可以在v2中使用depends_on,但使用数组。
  • 一定要在docker-compose.yml中添加image来指定生成的图像,这样b就可以生成FROM a