python 코드로 작업한 프로그램을 container 형태로 배포할 일이 자주 생깁니다.
문제는 python 코드가 실행되기 위해서는 import된 python package들이 설치가 된 환경이 필요합니다.
그러기 위해서 pc에서 작업할 때 설치된 package들은 아래 명령어를 통해 ' requirements.txt' 파일에 저장, 추출이 가능합니다
$ pip freeze > requirements.txt
하지만 위 명령어는 설치된 모든 패키지가 출력되므로 Dockerfile에서 아래와 같은 명령어가 실행될 때 불필요한 package들도 모드 설치되어 container의 용량과 설치시간이 늘어날 수 있는 비효율적인 상황이 발생하죠.
RUN pip3 install -r requirements.txt
그래서 'pipreqs'라는 명령어를 활용하면 위 문제를 해결할 수 있습니다.
pipreqs
간단한 웹페이지를 flask module로 제작하였습니다.
아래는 app.py라는 파일에 저장되어 있는 import 선언 부분입니다.
from flask import Flask, render_template, request, redirect, url_for, session
from werkzeug.utils import secure_filename
import os
import requests
import os
from datetime import datetime
import json
import pandas as pd
from PIL import Image, ImageDraw, ImageFont
from flask_caching import Cache
위에 해당하는 모듈들만 container에 설치하면 되는데 어떻게 추출을 할까요.
터미널을 켜서 'app.py'가 있는 경로로 이동한 후에 'pipreqs'라는 명령어만 입력해주면, 같은 경로에 아래처럼 'requirements.txt'이 생성됩니다.
하지만 위 txt파일을 Dockerfile을 통해서 build하게 되면 문제가 발생합니다.
바로 중복되있는 패키지들 때문인데요.
패키지들이 다른 버전마다 설치가 된 경우 발생하는 문제입니다.
위 처럼 버전을 체크한 후에 중복되있는 패키지들을 제거하고 docker build를 실행할 경우 문제가 발생하지 않게됩니다.
'Data infrastructure > Docker' 카테고리의 다른 글
Windows WSL2 설치와 활성 (0) | 2024.04.11 |
---|---|
WSL2환경의 Docker container와 Windows Local Path 서로 바인딩하기 (0) | 2024.04.11 |
Dockerfile - Ubuntu 내에서 python 설치가 된 container 생성 (0) | 2023.09.13 |