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를 부여해야하는 경우가 있으니 적절히 사용해보자!

+ Recent posts