이글은 Docker file을 작성하여 이미지 생성하는 과정에 대한 내용입니다.
환경
ubuntu : 20.04
python : 3.x
간단한 python flask의 hello world를 출력하는 app image를 만들어보겠습니다. 먼저 파이썬 코드입니다.
app.py
import os
from flask import Flask
app = Flask(__name__)
@app.route("/")
def main():
return "Welcome!"
@app.route('/hi')
def hello():
return 'hi!!'
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8080)
해당 코드 간단하게 이미지 생성후 실행된 내용 확인용 소스입니다.
저는 Dockerfile에 필요한 명령어 확인을 위해 간단하게 도커 컨테이너에 ubuntu를 실행시키고 해당 컨테이너 안에서 app 실행을 수동으로 진행하도록 하겠습니다.
컨테이너 환경 구성
docker run -it ubuntu bash
컨테이너를 띄우고 컨테이너 내부에서 app 실행을 진행합니다.
코드실행을 위한 과정
apt-get update
업데이트를 먼저 실행해줍니다.
apt-get install -y python3
apt-get install -y python3-pip
pip3 install python3-flask
flask가 설치가 되어야 app 실행이 가능하기에 flask를 설치하기 위해서 python3 python3-pip 설치를 진행합니다.
cat > /opt/app.py
import os
from flask import Flask
app = Flask(__name__)
@app.route("/")
def main():
return "Welcome!"
@app.route('/hi')
def hello():
return 'hi'
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8080)
app.py파일을 /opt 경로에 만들어주도록 하겠습니다.
FLASK_APP=app.py flask run --host=0.0.0.0
/opt 해당 경로에서 위 명령어를 실행해주면, application이 실행됩니다.
정상적으로 실행되었다면, 위의 명령어를 바탕으로 Dockerfile을 작성해주면 됩니다.
Dockerfile 작성
FROM ubuntu
RUN apt-get update && apt-get install -y python3 python3-pip
RUN python3 -m pip config set global.break-system-packages true
RUN pip3 install flask
COPY app.py /opt/app.py
ENTRYPOINT FLASK_APP=/opt/app.py flask run --host=0.0.0.0 --port=5000
저는 다음과 같이 작성하였습니다. RUN python3 -m pip config set global.break-system-packages true 해당 부분은 빌드시 오류가 발생하여 구글링하여 config 세팅을 추가적으로 작성해줬습니다.
저는 기존에 python 소스 코드를 app.py 라는 파일을 생성하여 복붙으로 넣어주고 Dockerfile과 같은 곳에 위치시켰습니다.
빌드
docker build . -t my-simple-webapp:1.0.1
Dockerfile이 위치한 경로에 다음과 같은 명령어를 실행해주면, my-simple-webapp이라는 이름의 1.0.1 태그를 가진 image를 생성합니다.
이상 이미지 생성에 관한 글을 마치겠습니다.

'DevOps' 카테고리의 다른 글
[k8s] Taints & Tolerations (0) | 2024.05.31 |
---|---|
[docker] docker-compose.yml 작성 및 실행 (0) | 2024.05.10 |
[docker] jenkins docker (0) | 2024.05.07 |
[docker] 기본 명령어 (0) | 2024.05.07 |
[docker] docker란? (2) | 2024.04.30 |