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
便利!