programing

도커 파일:여러 환경 변수를 한 줄로 설정

lastmoon 2023. 8. 30. 21:57
반응형

도커 파일:여러 환경 변수를 한 줄로 설정

저는 중간 이미지를 최소화하기 위해 환경 변수를 다음과 같이 한 줄로 설정할 수 있다는 인상을 받았습니다.

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변수가 따로 할당되는 것이 아니라 하나의 문자열로 결합되는 것을 알 수 있습니다.

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

질문:환경 변수의 설정을 한 줄로 결합하는 것이 가능합니까?그렇다면 어떻게 해야 하나요?그리고 그것이 좋은 관행인가요?

환경을 지정하는 데는 두 가지 형식이 있습니다.단일 변수가 필요한 경우 아래 형식

ENV X Y

이렇게 하면 X가 다음과 같이 할당됩니다.Y

ENV X Y Z

이렇게 하면 X가 다음과 같이 할당됩니다.Y Z

여러 환경 변수를 할당해야 하는 경우 다른 형식을 사용합니다.

ENV X=Y Z=A

이렇게 하면 X가 다음과 같이 할당됩니다.Y그리고 자스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

당신은 많은 것에 대해 걱정할 필요가 없습니다.ENV각 명령은 도커 파일로 만든 최종 이미지에 대한 새 중간 계층을 만듭니다.

Docker 파일 작성 모범 사례에서

도면층 수 최소화

Docker 17.05 이전 버전과 Docker 1.10 이전 버전에서는 이미지의 계층 수를 최소화하는 것이 중요했습니다.다음과 같은 개선 사항을 통해 이러한 필요성이 완화되었습니다.

  • Docker 1.10 이상에서만RUN,COPY,그리고.ADD지시사항은 도면층을 작성합니다.다른 지침은 임시 중간 이미지를 생성하며 빌드 크기를 직접 증가시키지 않습니다.

  • Docker 17.05 이상에서는 필요한 아티팩트만 최종 이미지에 복사할 수 있는 다단계 빌드 지원이 추가되었습니다.이렇게 하면 최종 이미지의 크기를 늘리지 않고 중간 빌드 단계에 도구 및 디버그 정보를 포함할 수 있습니다.

언급URL : https://stackoverflow.com/questions/45529121/dockerfile-setting-multiple-environment-variables-in-single-line

반응형