従来のdocker build
プロキシ環境下でDockerfileをビルドするときは
Dockerfile内にプロキシ設定を埋め込んで対応していた。
Dockerfile
FROM ubuntu:14.04
ENV HTTP_PROXY http://proxy.example.com:8080
RUN apt-get -y update && apt-get -y install nginx
しかし当然ながら、このDockerfileから構築したイメージには
プロキシ設定が埋め込まれる。
プロキシ環境下でしか使わないのであれば問題無いが、
それ以外の環境に持ち出す可能性がある場合は
トラブルの元なので、できれば避けたい。
build-time argumentsの利用
build-time argumentsはdocker engine 1.9から実装された機能で
Dockerfileのビルド時にパラメータを設定することができる。
build-time argumentsを利用することで、
docker run時に-eオプションなどで設定するのと同様に
docker build時に環境変数を設定できる。
docker build --build-arg HTTP_PROXY=http://proxy.example.com:8080 .
このようにビルドするとプロキシ環境下でもパケージのアップデート等は実行可能だが
ビルドイメージにはプロキシ設定は含まれない。
もう少し詳しいbuild-time arguments
詳細は公式ドキュメントの
DockerfileにおけるARG命令に記載されている
要約すると以下の通り
- Dockerfile内でARG命令で定義した変数の値を--build-argオプションで指定できる
- 初期では、HTTP_PROXYやno_proxyなど8つの変数が定義済み
- ARG命令で変数を定義するときデフォルト値を設定することも可能
- 未定義の変数を--build-argオプションで指定するとエラー
- Dockerfile内においてARG命令は定義された行から有効になる、それ以前の行では未定義
- ENV命令で定義された変数はARG命令とは異なりビルドイメージでも有効