1. ホーム
  2. docker

[解決済み] Dockerfileです。一行で複数の環境変数を設定する

2023-01-19 22:16:07

質問

環境変数は、以下のように一行で設定することで、中間画像を最小にすることができるという印象を持ちました。

FROM alpine:3.6
ENV RUBY_MAJOR 2.4 \
    RUBY_VERSION 2.4.1 \
    RUBY_DOWNLOAD_SHA256 4fc8a9992de3e90191de369270ea4b6c1b171b7941743614cc50822ddc1fe654 \
    RUBYGEMS_VERSION 2.6.12 \
    BUNDLER_VERSION 1.15.3

しかし、このスニペットを元にコンテナを実行し # set |grep RU を呼び出すと、変数が別々に割り当てられるのではなく、1つの文字列に結合されていることがわかります。

RUBY_MAJOR='2.4     RUBY_VERSION 2.4.1     RUBY_DOWNLOAD_SHA256 4fc8a9992de3e90191de369270ea4b6c1b171b7941743614cc50822ddc1fe654     RUBYGEMS_VERSION 2.6.12     BUNDLER_VERSION 1.15.3'

しかし、以下のように各変数を明示的に設定すると、期待通りの出力が得られ、変数を呼び出す際のエラーも発生しません。

ENV RUBY_MAJOR 2.4
ENV RUBY_VERSION 2.4.1
ENV RUBY_DOWNLOAD_SHA256 4fc8a9992de3e90191de369270ea4b6c1b171b7941743614cc50822ddc1fe654
ENV RUBYGEMS_VERSION 2.6.12
ENV BUNDLER_VERSION 1.15.3

質問です。 環境変数の設定を1行にまとめることは可能でしょうか?もしそうなら、私はどのようにそれを行うのでしょうか?そして、それは良い習慣ですか?

どのように解決するのですか?

環境の指定には2つの形式があります。単一の変数を指定する場合は、以下のようになります。

ENV X Y

これはXを Y

ENV X Y Z

これはXを Y Z

もし複数の環境変数を割り当てる必要がある場合は、他の形式を使用します。

ENV X=Y Z=A

これはXを Y として割り当てられ、Z は A . つまり、あなたの Dockerfile

FROM alpine:3.6
ENV RUBY_MAJOR=2.4 \
    RUBY_VERSION=2.4.1 \
    RUBY_DOWNLOAD_SHA256=4fc8a9992de3e90191de369270ea4b6c1b171b7941743614cc50822ddc1fe654 \
    RUBYGEMS_VERSION=2.6.12 \
    BUNDLER_VERSION=1.15.3

RUN env