Docker와 Python Flask 를 이용한 카카오톡 플러스친구 개발 과 배포 -2-
Updated:
이전에 Goorm을 사용했는데 Docker를 보안상의 이유로 사용을 제한해 놨습니다. 그래서 부득이하게 Docker로 배포하는 부분만 AWS에서 작업하겠습니다.
또한, 이 포스트를 진행하기전에 Docker Hub에 계정을 만드시면 됩니다.
이번 포스트에서는 Docker를 이용하여 배포를 해보겠습니다. Docker에 대해서 잘 모르시는 분들은 Docker 포스트을 보고 오시면 되겠습니다.
제일먼저 Docker를 설치해주셔야 합니다.
1. Docker Install
$ sudo apt-get remove docker docker-engine docker.i
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
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 update
$ sudo apt-get install docker-ce
# 설치 되었는지 확인
$ docker version
Client: Docker Engine - Community
Version: 19.03.4
API version: 1.40
Go version: go1.12.10
Git commit: 9013bf583a
Built: Fri Oct 18 15:53:51 2019
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.4
API version: 1.40 (minimum version 1.12)
Go version: go1.12.10
Git commit: 9013bf583a
Built: Fri Oct 18 15:52:23 2019
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.10
GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339
runc:
Version: 1.0.0-rc8+dev
GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
docker-init:
Version: 0.18.0
GitCommit: fec3683
1-1. Dockerfile 작성
그리고 빌드에 사용될 Dockerfile을 작성해줍니다.
FROM ubuntu:latest
MAINTAINER your_name "khsh5592"
RUN apt-get update -y
RUN apt-get install python3.6 -y
RUN apt-get install -y python3-pip python-dev build-essential
COPY . /app
RUN ls -la /app/*
WORKDIR /app
RUN pip3 install -r requirements.txt
ENTRYPOINT ["python3"]
CMD ["application.py"]
1-2. requirements.txt 작성
pip freeze > requirements.txt
명령어를 이용해서 python package 정보가 담겨있는 파일을 만들어줍니다. 그러면 쓸데 없는 package들이 많이 들어 있을텐데 Flask 제외하고 전부 지워버리겠습니다.
requirements.txt
Flask==1.1.1
1-3. Docker 로그인
$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: khsh5592
Password:
WARNING! Your password will be stored unencrypted in /home/vagrant/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
1-4. Docker Build
Build하기 전 파일 목록들
$ ls
Dockerfile app.py requirements.txt
Docker Build
$ docker build -t khsh5592/suwon-kakaoplus:0.0 .
만들어진 모습
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
khsh5592/suwon-kakaoplus 0.0 4671f6d943f4 43 seconds ago 547MB
1-5. Docker Push to Hub
$ docker push khsh5592/suwon-kakaoplus:0.0
Docker Hub Repository
이 Docker Hub 에 올라간 image 는 아래 명령어를 통해 다시 다른환경에서 가져와서 사용할 수 있습니다.
docker pull khsh5592/suwon-kakaoplus:0.0
2. AWS Port 열기
이대로 Docker 를 실행시켜도 상관없지만 AWS에 EC2 포트는 막혀있기 때문에 열어 주어야 합니다.
해당 방법은 AWS http 포트 열기 포스트를 참고하셔서 8888 포트를 열어주시면 되겠습니다.
3. Docker Container 배포
$ sudo docker run -p 8888:8888 khsh5592/suwon-kakaoplus:0.0
* Serving Flask app "app" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.0:8888/ (Press CTRL+C to quit)
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b1be793e81aa khsh5592/suwon-kakaoplus:0.0 "python3 application…" 2 seconds ago Up 1 second 0.0.0.0:5000->5000/tcp compassionate_gagarin
3-1. 작동 확인
http://52.78.63.229:8888/keyboard 먼저 GET을 확인하기 위해 AWS Instance 주소와 포트입력해서 접속해보겠습니다.
Chrome
정상적으로 작동합니다.
이제 카카오 플러스 친구와 연동을 해보겠습니다.
잘 작동하네요. 여기서 마무리 지을게요.
Log
sudo docker run -p 8888:8888 khsh5592/suwon-kakaoplus:0.0
* Serving Flask app "app" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.0:8888/ (Press CTRL+C to quit)
211.214.14.153 - - [12/Nov/2019 17:37:28] "GET /keyboard HTTP/1.1" 200 -
211.214.14.153 - - [12/Nov/2019 17:37:28] "GET /favicon.ico HTTP/1.1" 404 -
219.249.231.41 - - [12/Nov/2019 17:39:13] "POST /message HTTP/1.1" 200 -
구름에서 Docker 가 막혀있는걸 너무 늦게 깨달았습니다. 그래서 AWS로 변화해서 혼선을 주어 죄송합니다.
긴 포스트 읽어주셔서 감사합니다.
Leave a comment