[Docker] Dockerfile에 대하여

이정연·2023년 3월 27일
0

Play Data

목록 보기
11/26

DockerFile이란??

우리가 컨테이너에서 새로운 작업 환경을 세팅한다고 하자.

예를 들면, ubuntu에서 python 환경을 설정한다고 하면 우리는 꽤나 여러 개의 작업을 거쳐야 할 것이다.

  1. ubuntu image를 가져와 새로운 컨테이너를 생성한다.
  2. apt update
    apt install gcc python3-dev
    apt install python3-pip

위 명령어를 통해 gcc와 파이썬을 설치한다.

  1. Ctrl + p, q

docker cp ./requirements.txt mycom:/root/

컨테이너를 살린 채로 나와서 requirements.txt를 컨테이너에 복사한다.

  1. pip3 install -r requirements.txt

다시 살아있는 컨테이너로 돌아와서 requirements.txt를 설치한다.

아쉽게도 설치 도중 에러가 난무했다 ... 😭

이는 나 뿐만 아니라 옛날 옛적 프로그래머들도 겪었던 불편함이었나보다.

이러한 문제를 해결하기 위하여 명령어 한줄로 해결 가능한 DockerFile이 존재한다!

DockerFile

# ./Dockerfile 
FROM python:3.9-alpine
WORKDIR /usr/src/app

#RUN apt update
#RUN apt add postgresql-dev mariadb-dev gcc python3-dev musl-dev zlib-dev jpeg-dev  #--(5.2)

## Install packages
COPY requirements.txt ./
RUN pip install -r requirements.txt

## Copy all src files
COPY . .

## Run the application on the port 8080
EXPOSE 8000

# gunicorn 배포 명령어
# CMD ["gunicorn", "--bind", "허용하는 IP:열어줄 포트", "project.wsgi:application"]
CMD ["python3", "manage.py", "runserver", "0.0.0.0:8000"]

requirements.txt

absl-py==1.4.0
asgiref==3.6.0
astunparse==1.6.3
beautifulsoup4==4.12.0
bs4==0.0.1
cachetools==5.3.0
certifi==2022.12.7
charset-normalizer==3.1.0
Django==4.1.7
djangorestframework==3.14.0
flatbuffers==1.12
gast==0.4.0
google-auth==2.16.3
google-auth-oauthlib==0.4.6
google-pasta==0.2.0
grpcio==1.51.3
h5py==3.8.0
idna==3.4
importlib-metadata==6.1.0
jax==0.4.6
keras==2.9.0
Keras-Preprocessing==1.1.2
libclang==16.0.0
lxml==4.9.2
Markdown==3.4.3
MarkupSafe==2.1.2
mysqlclient==2.1.1
numpy==1.23.5
oauthlib==3.2.2
opt-einsum==3.3.0
packaging==23.0
pandas==1.5.3
Pillow==9.4.0
pip-chill==1.0.1
protobuf==3.19.6
pyasn1==0.4.8
pyasn1-modules==0.2.8
python-dateutil==2.8.2
pytz==2022.7.1
requests==2.28.2
requests-oauthlib==1.3.1
rsa==4.9
scipy==1.10.1
six==1.16.0
sklearn==0.0.post1
soupsieve==2.4
sqlparse==0.4.3
tensorboard==2.9.1
tensorboard-data-server==0.6.1
tensorboard-plugin-wit==1.8.1
tensorflow==2.7.0
tensorflow-estimator==2.9.0
tensorflow-io-gcs-filesystem==0.31.0
termcolor==2.2.0
typing_extensions==4.5.0
urllib3==1.26.15
Werkzeug==2.2.3
wrapt==1.14.1
zipp==3.15.0

실행

위 2개의 파일을 작업 폴더에 넣어놓고 아래의 명령어를 수행한다.

docker build -t serving:0.1 ./

'serving'이라는 이름으로 image file을 생성해라.
version은 0.1
dockerfile과 requirements.txt의 경로는 현재 디렉토리에 있다는 뜻.

docker run -d --name test7 -p 8000:8000 serving:0.1

test7이라는 컨테이너를 생성한다.
이미지는 위에서 만들었던 serving 0.1
local host 8000번 포트로 연결

위의 두 파일은 강아지를 분류해주는 모델인데 이를 장고 서버에 띄워놓았다.

따라서, 로컬 8000 포트로 접속해서 강아지 이미지 파일을 던져주면 분류해준다.

아래처럼!!

import requests

url  = "http://127.0.0.1:8000/predict/"

with open('./puppy-3979350_960_720.jpg', 'rb') as img:
    base64_string = base64.b64encode(img.read())
    
payload = {'image' : base64_string}

r = requests.post(url, data = payload)

print(r.json())
profile
0x68656C6C6F21

0개의 댓글