シェル(@takasqr)のブログ

dockerfileのenvを使って環境変数を渡す【ARGとの違いも説明する】

dockerfileのenvは環境変数を設定する

dockerfileで環境変数をコンテナに渡すには、envを使います。

使い方を紹介します。

この記事を書いた人

@takasqr アプリケーション開発が大好きなエンジニア。Vue、Swift、Electrom などでアプリを作って公開している。AWS や Firebase などのクラウドサービスも好き。

作ったアプリKeyScript

envの使い方

1. dockerfileを作る

dockerfileの書き方です。

FROM centos

ENV SITE_DOMAIN "example.com"

これで、出来上がったイメージの内で環境変数SITE_DOMAINの中にexample.comが入ります。

2. dockerfileをビルドする

dockerfileをビルドするコマンド。

docker build -t centos-custom:0.1 .

これで出来上がったイメージの中に環境変数が埋め込まれました。

-eを使ってrunの時初期値から変える

dockerfileで設定した値から変えたい時は、-eで渡すことができる。

docker container run \
  -d \
  -e SITE_DOMAIN="example.net" centos-custom:0.1

上の例だとdockerfileではexample.comだったSITE_DOMAINexample.netに変わっている。

dockerfileのenvでpath環境変数を設定する

dockerfileのenvではPATH環境変数を設定することもができます。

新しいソフトウェアを簡単に実行するため、コンテナにインストールされているソフトウェアの PATH 環境変数を ENV を使って更新できます。

ENV | Dockerfile のベストプラクティス | Docker-docs-ja

例えば下のコードでnginxにPATHを通すことができます。

ENV PATH /usr/local/nginx/bin:$PATH

dockerfileのenvをファイルで設定できる?

出来ないようです。

docker composeであれば.envファイルや--env-fileを使うことで、環境変数の値を別ファイルにまとめることができます。 ですが、dockerfileでは出来ないみたいです。

ARGとの違い

  • ENVはdockerfileから生成されたコンテナ内に環境変数を埋め込むことができます
  • ARGはdockerfile内で使える変数を設定することができます

似ているようで全然違いますね。

さいごに

他にもdockerfile関連の記事を書いてます。