1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

docker buildコマンドで引数をファイルから指定したい

Posted at

前置き:Dockerイメージ作成時の引数指定

以下のように--build-argオプションを使うことで指定可能。

$ docker build . -t [イメージ名] \
  --build-arg KEY1=value1 --build-arg KEY2=value2

上記コマンドの指定は、Dockerfile内でARG KEY1=value1のように指定するのと同じ意味になる。用途によっては、KEYのみ指定でvalueはなくてもOK。

課題

引数が大量にある場合にdocker buildのコマンドが長くなってしまうので、別途ファイルで管理したくなってくる。そこで例えば、--build-argを以下のようにファイルで指定する方法はないだろうか。

[注意]下記コマンドは筆者の「妄想」なので、実行するとエラーになります

$ docker build . -t [イメージ名] \
  --build-arg-file "docker.env"

調べてみたが、残念ながら本稿執筆時点では上のようなオプションは用意されていないみたい。

解決法

StackOverflowの以下記事
https://stackoverflow.com/questions/57091385/how-to-pass-argument-to-dockerfile-from-a-file
にあるように、現状はLinuxのコマンドを駆使してパイプでつないで実現する。

$ docker build . -t [イメージ名] \
  $(cat docker.env | sed 's/^/--build-arg /g' | paste -s -d " ")

docker.envの中身は以下のような感じ

KEY1=value1
KEY2=value2
KEY3=value3

今回のメインコマンド

$ cat docker.env | sed 's/^/--build-arg /g' | paste -s -d " "
(出力結果)
--build-arg KEY1=value1 --build-arg KEY2=value2 --build-arg KEY3=value3

について、ご参考に説明。

  • sed
    • docker.envの各行の先頭に--build-arg を足す。
  • paste
    • -s(--serial)オプションで1行の文字列にする。
    • -d " "で入力文字列をスペースで区切る指定をしている。指定しないと余計な空白ができたりするので、一応指定した方がよさそう。

補足

docker runでコンテナ起動する場合は、--env-fileオプションで環境変数をファイルで指定可能。コンテナ起動と比較して、イメージビルド時に引数を大量に指定するケースはあまり無いから用意されていないのかもしれない。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?