이번에는 도커위에 Python을 사용하여 Rest Api를 수신하는 서버를 만들어 볼 예정이다.
※ Rest Api에 대해서는 하기 글을 참조 2021.07.29 - [IT/아키텍처] - Rest |
대략적인 아키텍쳐는 아래와 같다.
(1) 유저가 HTTP 메소드를 사용해서, 도커에 떠있는 Nginx의 api location 호출하면 ( 80 Port )
(2) Nginx Reverse Proxy를 사용하여, Python으로 Request를 포워딩 해준다 ( 82 Port )
(3) Rest Api를 구현한 Python에서 해당값을 리턴해주고
(4) Nginx는 json 타입으로 유저에게 Response 해줄 계획이다.
1) Python Rest Api Server 구성
[참조] - https://justkode.kr/python/flask-restapi-1 // Flask로 Rest API 구현하기
- Docker 위에 Pyhton 및 라이브러리 설치
※ 이미지 생성 및 프록시 세팅부분은 생략하고 작성
ㅁ Python 설치
apt-get update
apt install python3
[설치확인] python3 --version
ㅁ Pyhton 라이브러리 설치를 위한 pip 설치
apt-get update
apt-get install python3-pip
=> 설치중에 커넥션 에러 발생. security.ubuntu는 접근하나, archive.ubuntu 에는 접근 못하는 것으로 추정
Get:116 http://security.ubuntu.com/ubuntu bionic-updates/main amd64 python3-xdg all 0.25-4ubuntu1.1
[31.3 kB] Fetched 105 MB in 1min 6s (1586 kB/s)
E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/i/isl/libisl19_0.19-1_amd64.deb Could not connect to XXXXX
=> ubuntu repository를 변경하자. ( mirror.kakao.com )
vi /etc/apt/sources.list
=> 편집창에서 :%s/archive.ubuntu.com/mirror.kakao.com
apt-get update
apt-get install python3-pip
- Flask 다운로드
Flask : Micro web framework로 직역하면 가볍게 사용할수 있는 웹 프레임워크다.
간단한 rest api 서버 혹은 Web 서버 구성시에 사용한다.
pip3 install Flask
이제는 익숙한 프록시, SSL 오류.
1) 구글링하니, trusted host 옵션을 주라고 한다.
=> 동일 에러
pip3 install --trusted-host pypi.python.org flask
2) 블로그에 프록시 컨피그 적용 후, 수행 가이드
pip3 install --proxy your_proxy_path Flask
=> SSL 문제로 URL 접속 불가 이슈
==>VM 환경이 아닌, 로컬 환경에서는 인터넷 접속 이상없음
1,2 옵션을 동시에 주면된다.
- 프록시를 통해 패키지 Install
- SSL 없이, python host에 대해서는 신뢰
-> Flask 및 dependency 패키지 다운로드 성공
같은 방법으로 Flask-restx 도 설치해준다.
- Rest Server Code 작성
from flask import Flask
from flask_restx import Api, Resource
app = Flask(__name__)
api = Api(app)
@api.route('/api/users') # /api/user 에 클래스 매핑
class HelloWorld(Resource):
def get(self):
return {"id": 123,
"name": "kim"}
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0', port=80)
- 컨테이너 이미지로 커밋하고, 포트 매핑해서 다시 띄워보자
sudo docker commit $Container_ID sk007001/rest_api:python
sudo docker run -p 80:80 sk007001/rest_api:python python3 /python/rest_api.py
[ -p ] : 호스트의 80 포트로 오는 요청을 해당 컨테이너 80포트로 연결
[ python3 /python/rest_api.py ] : 위에 만들어둔 rest api 코드 실행
- RestClient 를 사용하여, 리퀘스트를 던져보자
※ 보완할 점
- 컨테이너 수행시 명령어가 너무길다.
이미지에 수행될 명령어를 미리 지정하여, 컨테이너만 수행해도 rest_api 서비스가 올라가도록 변경해볼 것
- DB 연결후, /api/users 뒤에 파라미터값에 따라 다른 값을 리턴하는 로직 구현
- Nginx 리버스 프록시 기능을 활용하여 위의 그림처럼 연결할 것
'IT > 도커도커' 카테고리의 다른 글
(6-3) 도커 內 Rest Api 서버 구성하기 ( DB 연결 ) (0) | 2021.09.02 |
---|---|
(6-2) 도커 內 Rest Api 서버 구성하기 ( Nginx ) (0) | 2021.08.20 |
(5) 도커 Hello World - 웹페이지 (0) | 2021.07.22 |
(4) 도커 Hello World (1) | 2021.07.20 |
(3) 도커 명령어 (0) | 2021.07.19 |