Build in Docker에서 환경 변수를 설정하는 방법
빌드하는 동안 도커 컨테이너에 환경 변수를 설정하려고 하지만 성공하지 못했습니다.run 명령을 사용할 때 설정하는 것은 가능하지만 빌드하는 동안 설정해야 합니다.
도커파일
FROM ubuntu:latest
ARG TEST_ENV=something
내가 만들고 있는 명령어
docker build -t --build-arg TEST_ENV="test" myimage .
입니다.
docker run -dit myimage
사용 가능한 환경 변수를 확인하고 있습니다.
docker exec containerid printenv
결과는.
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=e49c1abfd58b
TERM=xterm
no_proxy=*.local, 169.254/16
HOME=/root
TEST_ENV
하지 않음
ARG
는입니다 입니다.docker build
- 최종 에 존재하지 스) -다를 되지 않습니다.docker run
.
당신이 사용.ARG
이미지를 작성할 때만 관련이 있고 이미지에서 실행하는 컨테이너에 필요하지 않은 설정의 경우.합니다.ENV
환경 변수가 빌드 중 및 컨테이너에 사용될 수 있도록 합니다.
이 도커 파일을 사용할 경우:
FROM ubuntu
ARG BUILD_TIME=abc
ENV RUN_TIME=123
RUN touch /env.txt
RUN printenv > /env.txt
build arg 에의 할 수 .docker build -t temp --build-arg BUILD_TIME=def .
수 그러면 기대하는 것을 얻을 수 있습니다.
> docker run temp cat /env.txt
HOSTNAME=b18b9cafe0e0
RUN_TIME=123
HOME=/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
BUILD_TIME=def
PWD=/
이 멋진 기사의 하이라이트를 요약해 보겠습니다.
ARG 대 ENV
1 ) 간략한 설명:
ARG는 도커 이미지(RUN 등)를 빌드하는 동안에만 사용할 수 있으며, 이미지가 생성되고 컨테이너가 시작된 후에는 사용할 수 없습니다(ENTRYPOINT, CMD).
ENV 값은 컨테이너에서 사용할 수 있지만, 도커 빌드 중에 도입되는 라인부터 시작하는 RUN 스타일 명령도 사용할 수 있습니다.bash(RUN export VARI=5 & & …)를 사용하여 중간 컨테이너에 환경 변수를 설정하면 다음 명령에서 유지되지 않습니다.
2 ) 긴 설명: ARG는 빌드타임 변수라고도 합니다.ARG 명령어로 도커 파일에 '공지'되는 순간부터 이미지가 작성되는 순간까지만 사용할 수 있습니다.실행 중인 컨테이너는 ARG 변수 값에 접근할 수 없습니다.이것은 컨테이너가 기본적으로 실행되어야 하는 것을 알려주는 CMD 및 ENTERPOINT 지침에도 적용됩니다.도커 파일에 다양한 ARG 변수(기본값 없음)가 필요하지만 빌드 명령을 실행할 때 제공되는 변수가 없으면 오류 메시지가 표시됩니다.
그러나 ARG 값은 이미지가 작성된 후 이미지의 도커 이력을 보고 쉽게 검사할 수 있습니다.따라서 민감한 데이터에 대해서는 적합하지 않은 선택입니다.
빌드 중에 ENV 변수를 사용할 수도 있습니다. ENV 명령을 사용하여 변수를 소개하는 즉시 사용할 수 있습니다.그러나 ARG와는 달리 최종 이미지에서 시작된 컨테이너를 사용하여 접근할 수도 있습니다.컨테이너를 시작할 때 ENV 값을 재정의할 수 있습니다. 그에 대한 자세한 내용은 아래와 같습니다.
3 ) 다이어그렘 포함:
다음은 도커 파일에서 도커 이미지를 구축하고 컨테이너를 실행하는 과정에 대한 ARG 및 ENV 가용성에 대한 간략한 개요입니다.
중복되지만 컨테이너 내부에서는 ARG를 사용할 수 없습니다.
ARG 및 ENV 값 설정
ARG 값 설정
그래서, 당신은 당신의Dockerfile
합니다.ARG
그리고.ENV
가치. 설정 방법 및 위치는?당신은 그것들을 빈칸에 놔둘 수 있습니다.Dockerfile
합니다. 합니다.합니다.기본값이 없는 예상 ARG 변수에 값을 지정하지 않으면 오류 메시지가 나타납니다.
.Dockerfile
이 없는 경우두,제:
ARG some_variable_name
# or with a hard-coded default:
#ARG some_variable_name=default_value
RUN echo "Oh dang look at that $some_variable_name"
# you could also use braces - ${some_variable_name}
를 할 수 .ARG
–build-arg
:
$ docker build --build-arg some_variable_name=a_value
의 명령을하여 해당 Dockerfile
, 다음 행이 인쇄됩니다(그 중에서도).오 이런 저 a_value 좀 봐요
그러면, 이것은 어떻게 사용하는 것으로 해석되나요?docker-compose.yml
일?
컴포지트를 다에 할 수 .ARG
args 에서:
kere.yml일)
version: '3'
services:
somename:
build:
context: ./app
dockerfile: Dockerfile
args:
some_variable_name: a_value
않은 할 때ARG
Dockerfile
ENV 값 설정
그래서 설정하는 방법ENV
가치관? 할 때 이할 수 컨테이너를 시작할 때 이 작업을 수행할 수 있지만 기본값을 제공할 수도 있습니다를 제공할 .ENV
으로에 합니다.Dockerfile
그들을 하드 함으로써 또한 환경 대한 할 수 !또한 환경 변수에 대한 동적 기본값을 설정할 수 있습니다!
할 때 할 수 , 뿐입니다.ARG
위에서 설명한 바와 같이, 값.다음에 대한 값을 제공할 수 없습니다.ENV
변수를 직접적으로 표시합니다.ARG
그리고.ENV
함께 일할 수 있습니다.하여 ARG할 수 .ENV
대표팀 선수들
기본적인입니다가 있습니다.Dockerfile
하드 : ,:
# no default value
ENV hey
# a default value
ENV foo /bar
# or ENV foo=/bar
# ENV values can be used during the build
ADD . $foo
# or ADD . ${foo}
# translates to: ADD . /bar
그리고 여기 A에 대한 토막글이 있습니다.Dockerfile
값: ,:
# expect a build-time variable
ARG A_VARIABLE
# use the value to set the ENV var default
ENV an_env_var=$A_VARIABLE
# if not overridden, that value of an_env_var will be available to your containers!
하고 할 수 있습니다.ENV
또는세 를 지정할 수 있습니다. 명령줄에서 또는 a를 사용합니다.docker-compose.yml
파일.
이 모든 것이 기본값보다 우선됩니다.ENV
의 값Dockerfile
.
와 다르게ARG
은 모든 할 수 , .되지 않은 Dockerfile
.
하지만 그것이 효과가 있을지는 응용 프로그램에 달려 있습니다.
1: 합니다 값을 하나씩 제공합니다.
명령줄에서 -e 플래그를 사용합니다.
$ docker run -e "env_var_name=another_value" alpine env
a from a.docker-compose.yml
일:
version: '3'
services:
plex:
image: linuxserver/plex
environment:
- env_var_name=another_value
2: 값
위의 방법과 같습니다.
유일한 차이점은 값을 제공하지 않고 변수 이름만 지정한다는 것입니다.그러면 도커가 호스트 환경의 현재 값에 액세스하여 컨테이너에 전달합니다.
$ docker run -e env_var_name alpine env
은.docker-compose.yml
파일, 동일한 효과를 위해 방정식 기호와 그 뒤의 모든 것을 생략합니다.
version: '3'
services:
plex:
image: linuxserver/plex
environment:
- env_var_name
3: (env_file)에서.
변수를 쓰거나 하드 코딩하는 대신(12개 요소 사용자에 따라 좋은 맛이 나지 않음) 값을 읽을 파일을 지정할 수 있습니다.이러한 파일의 내용은 다음과 같습니다.
env_var_name=another_value
위의 파일을 env_file_name(이름 임의)이라고 하며 현재 디렉터리에 있습니다.
설정할 환경 변수를 추출하기 위해 구문 분석된 파일 이름을 참조할 수 있습니다.
$ docker run --env-file=env_file_name alpine env
와 함께docker-compose.yml
files, 그냥 env_file을 참조하고, Docker는 변수를 설정하기 위해 이를 구문 분석합니다.
version: '3'
services:
plex:
image: linuxserver/plex
env_file: env_file_name
명령줄에서 ARG 및 ENV를 설정하는 일반적인 방법
의입니다 로의 .ARG
그리고.ENV
명령줄에서 설정하는 일반적인 방법으로 가용성을 제공합니다.
언급URL : https://stackoverflow.com/questions/39597925/how-do-i-set-environment-variables-during-the-build-in-docker
'programing' 카테고리의 다른 글
How big is the performance difference between Oracle and PostgreSQL? (0) | 2023.09.20 |
---|---|
도커 - 0.0.0.0:4000에 대한 바인딩 실패: 포트가 이미 할당되었습니다. (0) | 2023.09.20 |
Symfony 2에서 데이터베이스 보기에 대한 엔티티(docrine) 설정 방법 (0) | 2023.09.20 |
파일 업로드 전 파일 확장명 확인 (0) | 2023.09.20 |
OnclientClick과 OnClick이 동시에 작동하지 않습니까? (0) | 2023.09.15 |