50
45

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 5 years have passed since last update.

プロキシ環境下でdocker buildするときにbuild-time argumentsを利用する

Posted at

従来の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命令とは異なりビルドイメージでも有効
50
45
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
50
45

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?