V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
amrom
V2EX  ›  Docker

一个关于 Docker 构建的问题

  •  
  •   amrom · 2021-08-12 14:17:02 +08:00 · 1290 次点击
    这是一个创建于 959 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在有一个项目,其中用到了多个 Dockerfile,每个 Dockerfile 都会用到上一个,2.0,0 的第一行就是FROM test:1.0.0,需要多次 build 才能得到最终的。 示例:

    先执行 docker build -f cpu/1.0.0/Dockerfile -t test:1.0.0 .

    再执行 docker build -f cpu/2.0.0/Dockerfile -t test:2.0.0 .

    ...

    再执行 docker build -f cpu/2.0.6/Dockerfile -t test:2.0.6 .

    目录树类似如下:

    |-- cpu
    |   |-- 1.0.0
    |   |   |-- Dockerfile
    |   |   |-- READ.md
    |   |   `-- run-noroot.sh
    |   |-- 2.0.0
    |   |   |-- Dockerfile
    |   |   |-- READ.md
    |   |   |-- requirement-py2.txt
    |   |   |-- requirement-py3.txt
    |   |   `-- run-root.sh
    |   |-- 2.0.4
    |   |   |-- Dockerfile
    |   |   |-- READ.md
    |   |   `-- run-root.sh
    |   |-- 2.0.5
    |   |   |-- Dockerfile
    |   |   |-- READ.md
    |   |   |-- etc
    |   |   |   `-- sudoers
    |   |   |-- notebook
    |   |   |   |-- __init__.py
    |   |   `-- run-jupyter.sh
    |   `-- 2.0.6
    |       |-- Dockerfile
    |       `-- READ.md
    

    这样的项目,如何执行一次命令构建出来。

    我能想到两个方法,二是重写一个 Dockerfile,然后把其他的都整理进来,太麻烦; 二是用 Makefile 来做,还在尝试

    7 条回复    2021-08-12 17:47:08 +08:00
    AoEiuV020
        1
    AoEiuV020  
       2021-08-12 14:20:50 +08:00
    一般是二,不过官方有个 multi-stage 针对这种情况,
    enng
        2
    enng  
       2021-08-12 14:23:33 +08:00
    docker 的多阶段构建尝试了么
    amrom
        4
    amrom  
    OP
       2021-08-12 14:28:23 +08:00
    @AoEiuV020 @enng @swulling 我理解的多阶段构建不能解决这个问题,这里相互的关联就是 FROM 这一步要求是上一步的镜像 tag,多阶段构建和这个没有关系
    AoEiuV020
        5
    AoEiuV020  
       2021-08-12 14:58:09 +08:00
    @amrom 可以的,虽然我没试过,但是后一个镜像可以 FROM 前一个镜像的,
    这里搜了个例子,
    https://stackoverflow.com/a/53289193
    Bazingal
        6
    Bazingal  
       2021-08-12 14:59:45 +08:00
    为什么一定要依赖上一步生成的镜像?除非最终生成的每一个镜像都是有用的,那么写个 bash 脚本也可以解决。如果你只是要最终的镜像,完全可以用多阶段构建
    qaz168000
        7
    qaz168000  
       2021-08-12 17:47:08 +08:00
    用 dockercompose 来做

    或者就是 dockerfile 中用--from=上一步镜像
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1969 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 69ms · UTC 16:22 · PVG 00:22 · LAX 09:22 · JFK 12:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.