매우 간단하지만, 자주 하게되는 작업이니 명령어를 한번 정리해보고자 한다.
EC2 - Flask로 동작하던 서버를 EC2 - 도커 컨테이너 - Flask로 한 단계 추가하는 방법을 정리했다.
현재 세팅하고자 하는 서버는 AI서비스를 위한 Inference서버 이다.
EC2위에 바로 동작중인 Flask 서버를 컨테이너로 만들고자 하면, 이미 이러한 코드는 작성되어 있을거다.
'''app.py'''
from flask import Flask, request, jsonify
#import your modules
app = Flask(__name__)
#pre-processing codes
def process(input):
#main work
return output
#API 엔드포인트
@app.rout('/app', methods=['POST'])
def run():
input = request.get_json()
if '''input is proper :'''
return process(input)
else :
return '''error'''
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True)
컨테이너를 띄우기 이전에 flask서버는 잘 동작하는지 확인해보자.
'''requirements.txt'''
torch>=1.9.1
flask
...
(base) $conda create -n tmp_env python==3.8
(base) $conda activate tmp_env
(tmp_env) $pip install -r requirements.txt
(tmp_env) $python app.py --optionA 5 --optionB ./dir1/dir2/ --optionC True
독립적으로 동작이 가능한 app.py 파일이 포함된 디렉토리에 Dockerfile을 작성해야 한다. 2의 과정을 파일로 옮긴다고 생각하면 된다.
'''Dockerfile'''
FROM python:3.8
# Copy function code
COPY . /app
# Install the function's dependencies using file requirements.txt
# from your project folder.
COPY requirements.txt .
RUN pip3 install -r requirements.txt
WORKDIR /app
# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "python","pp.py","--optionA","5","--optionB","./dir1/dir2/","--optionC","True"]
같은 디렉토리에서 빌드를 한다. 이 과정을 통해 이미지를 만든다.
$docker build -t [image_name] .
잘 빌드 되었다면,
$docker images
를 통해, 빌드한 이미지를 찾아볼 수 있다.
$docker run -d -p 0.0.0.0:[port]:[port]/tcp --name [container_name] [image_name]
이 커맨드가 성공적으로 동작했다면,
$docker ps
를 통해 컨테이너 상황을 조회해볼 수 있으며, flask 서버가 정상적으로 동작 해야 한다.
로컬에서 만든 이미지를 EC2로 옮기자. AWS의 ECR을 사용할 수 있으나, 간단하게는 도커허브를 이용해볼 수 있다.
$docker push [your_docker_id]/[project_name]:[image_version]
이제 Pull 하기 위해서 EC2 위에서 입력한 커맨드 (세팅부터 동작까지)를 나열할텐데, 구체적으로 뭘 하는지 각 줄의 역할이 기억이 안나 다음에 시간날때 정리해보겠다.
sudo apt update
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get install docker-ce docker-ce-cli containerd.io
sudo usermod -aG docker $USER
newgrp docker
docker login
docker pull [dockerhub_id]/[image_name]:[version]
동작 시키고 싶다면,
go to 4-1.