ARG

  • Dockerfile에서 특정 Dockerfile 명령으로 다른 값을 추출하는데 사용할 수 있는 유연한 데이터 비트, 인수를 설정할 수 있습니다.

ENV

  • Dockerfile 내부의 ENV옵션으로 설정할 수 있습니다.
 
이러한 방식을 통해 하드 코딩할 필요 없이 유연한 이미지와 컨테이너를 만들 수 있습니다.
ENV PORT 80

# docker에게 $ 뒤에 있는 변수가 환경 변수임을 알려야합니다.
# 그래야만 PORT 환경 변수를 찾고 거기에 저장된 값을 호출합니다.
EXPORT $PORT
docker run ⁠--env PORT=8000
# or
docker run ... --env-file ./.env
 

환경 변수(ENV) 및 보안에 대한 한 가지 중요한 참고사항

환경 변수에 저장하는 데이터의 종류에 따라, 보안 데이터를 Dockerfile에 직접 포함하고 싶지 않을 수도 있습니다.
 
그 대신 런타임에만 사용되는 별도의 환경 변수 파일로 이동시키죠. (즉, Docker run으로 컨테이너를 실행할 때).
그렇지 않으면, 값이 '이미지에 포함'되며, 모든 이가 'docker history <이미지>'를 통해, 이 값을 읽을 수 있습니다.
 
일부 값의 경우, 이것이 중요하지 않을 수도 있지만, 자격 증명, 개인 키 등의 경우에는 확실히 피해야만 합니다!
 
별도의 파일을 사용하는 경우, 'docker run'을 실행할 때 그 파일을 가리키므로, 그 값은 이미지의 일부분이 아닙니다. 하지만 소스 컨트롤을 사용하는 경우, 별도의 파일을 소스 컨트롤 저장소의 일부분으로 커밋하지 않도록 조심하세요.
 

Build-time Arguments

도커 파일에 다양한 값을 플러그인하거나 도커 파일에 하드 코딩하지 않고도 이미지를 빌드할 때 다른 값을 플러그인할 수 있습니다.
 
# Dockerfile에서 사용할 수 있는 변수입니다.
ARG DEFAULT_PORT = 80
...
ENV PORT $DEFAULT_PORT
 
해당 ARG도 레이어를 생성하므로 만약 값이 수정된다면 모든 후속 레이어가 리빌드 되고, 재실행 됩니다.
모든 후속 명령이 재실행되므로 아래에 두는 것이 적합합니다.

Module 요약⁠

  • 컨테이너의 레이어
  • 볼륨과 바인드 마운트
    • 볼륨은 도커 컨테이너에 의해 마운트되며 도커가 관리합니다.
      • 네임드 볼륨: 컨테이너가 제거되도 남아있으며 데이터를 영구적으로 저장하는 경우 사용
      • 익명 볼륨 : 컨테이너에 연결되며 컨테이너가 제거되면 사라집니다.
    • 바인드 마운트 : 호스트 머신의 로컬 폴더를 매핑할 수 있습니다.
      • 호스트 머신의 경로를 통해 유저가 직접 관리할 수 있느냐에 따라 네임드 볼륨과의 차이가 있습니다.
  • 빌드타임 인수와 런타임 환경변수
    • 외부에서 특정 데이터를 전달할 수 있고, 모든 것을 하드 코딩할 필요가 없습니다. 

 

'TIL > 개념정리' 카테고리의 다른 글

Amazon Bedrock과 Langchain Workshop  (0) 2024.03.21
Docker network  (0) 2024.03.20
이미지와 컨테이너  (2) 2024.02.03
MySQL Workbench를 통한 덤프 데이터 생성하기  (0) 2024.01.31
Docker 시작하기  (0) 2024.01.30
복사했습니다!