1. Dockerfile로 특정 작업을 실행하는 이미지를 만들면 좋은점
- 특정 작업을 실행하는 이미지를 만들어 해당 작업을 어디서든 실행시킬 수 있다.
- 도커컨테이너로 작업하면 실행 환경이 보장되기 때문에 안정적인 배포가 가능하다.
- 이를 통해 CI/CD를 할 수 있다.
2. Dockerfile를 만드는 법
- 실습을 위해 폴더를 하나 만들고 아래와 같이 main.py와 Dockerfile이라는 파일을 만들자.
# main.py
# argparse로 특정 인자를 실행할 때 받는 코드
import argparse
parser = argparse.ArgumentParser(description="Process two arguments.")
parser.add_argument("arg1", help="The first argument.")
parser.add_argument("arg2", help="The second argument.")
args = parser.parse_args()
print(f"arg1: {args.arg1}, arg2: {args.arg2}")
# Dockerfile (확장자가 없는 파일입니다.)
FROM python:3.9-slim
# 작업 디렉토리 설정
WORKDIR /app
# main.py 복사
COPY main.py .
# 파이썬 로그가 보이게 버퍼 설정
ENV PYTHONUNBUFFERED=1
# 실행 설정
ENTRYPOINT ["python", "main.py"]
- 평소에 argparse를 사용했다면 main.py에 arg가 2개 들어가야 한다는 것을 알것이다.
- 해당 arguments는 이미지를 실행(run) 할 때 넣으면 된다.
3. Dockerfile로 image 만들기
- Dockerfile이 있는 경로에서 아래와 같은 명령어를 실행한다.
# main-with-args라는 이름과 1.0이라는 tag를 가지고 docker image가 생긴다
docker build -t main-with-args:1.0
# build가 성공적으로 완료되면 설정한 이름으로 이미지가 생성됐는지 본다.
docker image list
4. arguments를 써서 컨테이너를 실행하기
- 단순히 컨텐이너를 실행할 때 arguments를 붙이면 된다.
# test-arguments라는 컨테이너 이름으로 first와 second라는 arguments를 붙여서 실행한다.
docker run --name test-arguments main-with-args:1.0 first second
# 실행이 완료되면 docker logs로 확인하자
docker logs test-arguments
5. arguments가 아니라 환경변수 값으로는 안될까?
- arguments가 아니라 환경변수를 인자로 받아서 실행하고 싶은 경우도 있을 것이다.
- 그런경우 아래와 같이 환경 변수를 Dockerfile에서 줄 수 있고 실행해서 확인할 수 있다.
# MY_ARG1, MY_ARG2라는 이름으로 설정된 환경 변수를 가져온다.
import os
print(f"MY_ARG1: {os.environ.get('MY_ARG1')}, MY_ARG2: {os.environ.get('MY_ARG2')}")
# 환경 변수를 설정했으니 main.py에 환경변수를 받는 코드가 있으면 된다.
FROM python:3.9-slim
# 작업 디렉토리 설정
WORKDIR /app
# main.py 복사
COPY main.py .
# 파이썬 로그가 보이게 버퍼 설정
ENV PYTHONUNBUFFERED=1
# 환경 변수 설정
ENV MY_ARG1="first my env"
ENV MY_ARG2="second my env"
# 실행 설정
ENTRYPOINT ["python", "main.py"]
6. 위와 동일하게 이미지를 만들고 실행해보자
- 명령어는 동일한 방식으로 사용하면 된다.
- 물론 이번에는 arguments를 받는 경우가 아니므로 컨테이너를 그냥 실행하기만 하면 된다.
# 이미지를 생성한다.
docker build -t main-with-envs:1.0 .
# arguments를 주는 코드가 아니므로 실행만한다.
docker run --name test-envs main-with-envs:1.0
# 로그를 살펴보자!
docker logs test-envs
7. 결론
- 상황에 따라 적절하게 이미지를 생성해서 사용하자.
- 주로 환경변수로 작업을 진행할테지만 상황에 따라 arguments를 부여해야하는 경우가 있으니 적절히 사용해보자!
'데이터 프로그램 문제 해결 기록 > docker' 카테고리의 다른 글
Dockerfile 빌드 후 run 하면 파이썬 실행 로그가 안나오는 문제(PYTHONUNBUFFERED) (0) | 2024.12.21 |
---|---|
1. docker IP 변경 하는 법 (0) | 2022.11.21 |