Help us understand the problem. What is going on with this article?

Docker ARG がimage量産に便利

More than 3 years have passed since last update.

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

便利!

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away