Dockerfile: Setting multiple environment variables in single line

前端 未结 2 793
遇见更好的自我
遇见更好的自我 2021-01-31 13:32

I was under the impression that environmental variables could be set on a single line as follows so as to minimize intermediary images.

FROM alpine:3.6
ENV RUBY_         


        
相关标签:
2条回答
  • 2021-01-31 13:47

    There are two formats for specifying environments. If you need single variable then you below format

    ENV X Y
    

    This will assign X as Y

    ENX X Y Z
    

    This will assign X as Y Z

    If you need to assign multiple environment variables then you use the other format

    ENV X=Y Z=A
    

    This will assign X as Y and Z as A. So your Dockerfile should be

    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
    
    0 讨论(0)
  • 2021-01-31 13:52

    You do not need to worry about many ENV commands each creating a new intermediate layer for your final image created by your Dockerfile.

    from Best practices for writing Dockerfiles

    Minimize the number of layers

    Prior to Docker 17.05, and even more, prior to Docker 1.10, it was important to minimize the number of layers in your image. The following improvements have mitigated this need:

    • In Docker 1.10 and higher, only RUN, COPY, and ADD instructions create layers. Other instructions create temporary intermediate images, and no longer directly increase the size of the build.

    • Docker 17.05 and higher add support for multi-stage builds, which allow you to copy only the artifacts you need into the final image. This allows you to include tools and debug information in your intermediate build stages without increasing the size of the final image.

    0 讨论(0)
提交回复
热议问题