내에서 Dockerfile , 내가하고 싶은 변수 정의 내가 할 수있는 Dockerfile에서 나중에 사용합니다 .
ENV
지시 사항을 알고 있지만 이러한 변수가 환경 변수가되기를 원하지 않습니다.
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으로 어떻게 접근했는지를 정말로 좋아한다 .
RUN foo=$(date) && echo $foo
ARG variable defaultValue
run 명령을 사용 하고 사용 하여이 값을 업데이트 할 수도 있습니다 --build-arg variable=value
. docker 파일에서 이러한 변수를 사용하려면 다음과 같이 참조하십시오$variable
run 명령 .
참고 : 이러한 변수는 Linux 명령에서 사용할 수 RUN echo $variable
있으며 이미지에서 유지되지 않습니다.