[variables] Dockerfile에서 변수를 정의하는 방법은 무엇입니까?

내에서 Dockerfile , 내가하고 싶은 변수 정의 내가 할 수있는 Dockerfile에서 나중에 사용합니다 .

ENV지시 사항을 알고 있지만 이러한 변수가 환경 변수가되기를 원하지 않습니다.

Dockerfile 범위에서 변수선언 하는 방법이 있습니까?



답변

사용할 수 있습니다-https ARG://docs.docker.com/engine/reference/builder/#arg 참조

ARG명령은 사용자가 플래그를 docker build사용하여 명령을 사용하여
빌드시 빌더에 전달할 수있는 변수를 정의합니다 --build-arg <varname>=<value>. 사용자가 Dockerfile에 정의되지 않은 빌드 인수를 지정하면 빌드가 오류를 출력합니다.


답변

내 지식 ENV으로는 ” 환경 교체 “에 언급 된 대로만 허용

ENV특정 명령에서 환경 변수 ( 문으로 선언 )를 Dockerfile에서 해석 할 변수로 사용할 수도 있습니다.

에 의해 Dockerfile의 각 줄에 대해 생성 된 각각의 새 컨테이너에서 다시 선언 되려면 환경 변수 여야합니다 docker build.

즉, 이러한 변수는 Dockerfile에서 직접 해석되지 않지만 Dockerfile 행을 위해 작성된 컨테이너에서 해석되므로 환경 변수를 사용합니다.


오늘은 ARG( docker 1.10+ 및docker build --build-arg var=value ) 와을 모두 사용합니다 ENV. 단독으로
사용 ARG한다는 것은 런타임이 아니라 빌드 타임에 변수를 볼 수 있음을 의미합니다 .

내 Dockerfile에는 일반적으로 다음이 있습니다.

ARG var
ENV var=${var}

귀하의 경우 ARG충분합니다 : 일반적으로 http_proxy 변수를 설정하는 데 사용합니다. 빌드 타임에 도커 빌드가 인터넷에 액세스해야합니다.


답변

질문에 대답하려면 :

Dockerfile에서 나중에 Dockerfile에서 사용할 수있는 변수를 정의하고 싶습니다.

다음을 사용하여 변수를 정의 할 수 있습니다.

ARG myvalue=3

같은 문자 주위의 공백은 허용되지 않습니다.

나중에 사용하십시오.

RUN echo $myvalue > /test


답변

변수가 동일한 RUN명령어 내에서 재사용되면 간단히 쉘 변수를 설정할 수 있습니다. 나는 그들이 공식 Ruby Dockerfile으로 어떻게 접근했는지를 정말로 좋아한다 .


답변

ARG variable defaultValuerun 명령을 사용 하고 사용 하여이 값을 업데이트 할 수도 있습니다 --build-arg variable=value. docker 파일에서 이러한 변수를 사용하려면 다음과 같이 참조하십시오$variable run 명령 .

참고 : 이러한 변수는 Linux 명령에서 사용할 수 RUN echo $variable있으며 이미지에서 유지되지 않습니다.


답변