728x90

도커(Docker)를 사용하여 애플리케이션을 컨테이너화할 때, 컨테이너 내부에서 환경변수를 설정하는 것은 매우 중요함

환경변수를 통해 애플리케이션의 설정값을 동적으로 관리할 수 있으며, 이는 배포 및 운영 환경에서 매우 유용함

도커 컨테이너 내부에서 환경변수를 설정하는 여러 가지 방법이 있음

 

도커 컨테이너 실행 시점에 환경변수 설정하는 방법

1. docker run 명령어에 -e 옵션 사용

docker run -e MY_VAR=some_value my_image

 

2. docker run 명령어에 --env-file 옵션 사용

# .env 파일 예시
MY_VAR1=some_value1
MY_VAR2=some_value2
docker run --env-file .env my_image

 

도커 이미지 생성 시 환경변수 설정하는 방법

1. 도커파일에 ENV 지시어 사용

# Dockerfile 예시
FROM python:3.8-slim

ENV MY_VAR=some_value

 

2. 도커컴포즈 파일에서 환경변수 설정

# 환경변수 직접 설정
version: '3.8'
services:
  my_service:
    image: my_image
    environment:
      - MY_VAR=some_value
# .env 파일 사용
version: '3.8'
services:
  my_service:
    image: my_image
    env_file:
      - .env

 

3. 컨테이너 내부에서 스크립트를 사용하여 설정

# start.sh 예시
#!/bin/bash
export MY_VAR=some_value
exec "$@"
# Dockerfile 예시
FROM python:3.8-slim

COPY start.sh /start.sh
RUN chmod +x /start.sh
ENTRYPOINT ["/start.sh"]
CMD ["python", "app.py"]

exec "$@"에서 "$@"는 스크립트에 전달된 모든 인수를 의미함

위의 도커이미지로 도커컨테이너 실행 시 "docker run my_image python app.py" 라는 명령어를 수행했다면, 

exec "$@"exec python app.py 로 대체되어 동작함

 

4. 자주 변경되는 환경변수 도커파일 변경 없이 설정하는 방법

--build-arg를 활용하면 빌드 시점에 변수로 값을 주입할 수 있음

하지만 이는 빌드 과정에서만 사용되고 도커이미지 내에 환경변수로는 등록되지 않기 때문에, ENV 지시어를 사용해 도커이미지 환경변수로 등록해줘야 함

# Dockerfile 예시
FROM python:3.8-slim

# 빌드 시점 변수 받기
ARG MY_VAR

# 런타임 환경 변수로 등록
ENV MY_VAR=${MY_VAR}

RUN echo "MY_VAR is $MY_VAR"
docker build --build-arg MY_VAR=some_value -t my_image .

 

728x90
728x90

포트 설정

컨테이너 외부에서 도커 컨테이너 내부로 접속할 수 있도록 포트포워딩 설정 필요 (-p 옵션)

docker run -p {host port number}:{container port number} ...

 

서비스 호스트 확인

컨테이너 외부에서도 접속할 수 있도록 호스트 IP 0.0.0.0으로 설정 필요

- 0.0.0.0은 도커 컨테이너가 호스트의 모든 IP 주소에 바인딩되도록 설정하는 것

- localhost는 도커 컨테이너 내부에서 자기 자신을 참조하는 데 사용되는 호스트 이름

# fastapi 실행 예시
uvicorn main:app --host 0.0.0.0 --port 5000 --reload
728x90

'Docker' 카테고리의 다른 글

docker 컨테이너에 환경변수 설정하는 방법  (1) 2024.06.09

+ Recent posts