programing

Build in Docker에서 환경 변수를 설정하는 방법

minimums 2023. 9. 20. 20:12
반응형

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를 사용할 수 없습니다.

enter image description here

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

않은 할 때ARGDockerfile

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.ymlfiles, 그냥 env_file을 참조하고, Docker는 변수를 설정하기 위해 이를 구문 분석합니다.

version: '3'

services:
  plex:
    image: linuxserver/plex
    env_file: env_file_name

명령줄에서 ARG 및 ENV를 설정하는 일반적인 방법

의입니다 로의 .ARG그리고.ENV명령줄에서 설정하는 일반적인 방법으로 가용성을 제공합니다.

enter image description here

언급URL : https://stackoverflow.com/questions/39597925/how-do-i-set-environment-variables-during-the-build-in-docker

반응형