Docker ARG がimage量産に便利

  • 45
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

https://github.com/docker/docker/pull/15182

Docker 1.9 がでて、 ARG という項目が追加されました(document)。
概要としては、 docker build 時に --build-arg <KEY>=<VAL> として渡した変数が Dockerfile 内で利用できるというものです。

個人的には環境変数を拾ってくれるのが欲しかったのですが、今回は据え置きで、あくまで Dockerfile 内の ENV 命令でセットされたものだけが、解釈対象だそうです。

どういう用途で便利かというと、

  • 設定だけを変えた同じイメージを量産したい場合

これです!これができるようになりました。

例えば、 ulimit の値を変えたイメージを作りたい場合にはイメージを2つ作るための Dockerfile を作るか、docker run の時の ENV を拾って sed などのコマンドでほげほげしたりするスクリプトを書いたり、だったと思います。
その他、例えば、同時接続数が違うだけの nginx の設定ファイルとかを、設定ファイルだけ数多く用意しておいて、作り分けるなどが可能になります。

使い方

% ls *.cnf
10.cnf 100.cnf 50.cnf
% cat Dockerfile
FROM busybox
MAINTAINER muddydixon@gmail.com

ARG MAX_CONNECTION=${MAX_CONNECTION:-100}
COPY MAX_CONNECTION}.cnf /tmp/${MAX_CONNECTION}.cnf

% docker build --rm -t dockerarg-default .
% docker run -it --rm dockerarg-default ls /tmp
100.cnf

% docker build --rm --build-arg MAX_CONNECTION=50 -t dockerarg-50 .
% docker run -it --rm dockerarg-50 ls /tmp
50.cnf

% docker build --rm --build-arg MAX_CONNECTION=10 -t dockerarg-10 .
% docker run -it --rm dockerarg-10 ls /tmp
10.cnf

便利!