代码之家  ›  专栏  ›  技术社区  ›  Jason Berryman

在Docker构建期间从文本文件中提取变量

  •  1
  • Jason Berryman  · 技术社区  · 7 年前

    我正在创建一个dockerfile,部分过程是 ADD 包的最新版本,可以作为文本文件下载。

    获取最新版本的.txt文件

    ADD http://example.com/latest-version.txt
    

    最新版本.txt文件的内容

    package1 = AB1.0.0
    package2 = 32.4132
    package3 = 123.456
    

    目标

    搜索字符串 package1 ,设置变量 packageVersion AB1.0.0 添加 文件。

    ADD http://example.com/package1.${packageVersion}.tar.gz
    

    我能在dockerfile中实现这一点吗,还是需要bash脚本的帮助?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Bjoern Rennhak    7 年前

    可能的答案

    我不认为 Dockerfile 语法将支持当前开箱即用的内容。我建议你创建一个简单的 bash 脚本为您进行下载/重命名,然后 ADD 静态文件指向 文档文件 .

    例子

    • 拉你的版本文件,例如。 ADD http://example.com/latest-version.txt
    • 添加/运行一些简单的bash脚本/oneliner来处理您的版本文件(请参阅下面的入门建议)
    • 此脚本读取 latest-version.txt 归档并下载相关文件,例如
      • wget http://example.com/package1.${packageVersion1}.tar.gz -O /tmp/package1.tar.gz
      • wget http://example.com/package2.${packageVersion2}.tar.gz -O /tmp/package2.tar.gz
    • 因为所有相关的软件包都保存到静态文件名中,所以您可以将其硬编码到dockerfile中,例如。
      • ADD /tmp/package1.tar.gz
      • ADD /tmp/package2.tar.gz

    结束的想法

    我建议你雇用某种 Configuration Management (厘米)使你的生活更容易,因为这种解决问题的方法会很快变得混乱。CM不仅提供了更多的结构来解决这样的问题,而且还提供了另外两个重要属性,即 idempotence convergence 当构建一个工件时。

    附录

    while IFS='' read -r line || [[ -n "$line" ]]; do
      NAME=`echo $line | cut -d '=' -f1`; VERSION=`echo $line | cut -d '=' -f2`; echo $NAME; echo $VERSION;
    done < latest-version.txt
    
    推荐文章