도커 환경 세팅
본 환경은 aws ubuntu 18.04이다.
start
$sudo apt-get update
$sudo apt-get upgrade
python3 install
$sudo apt-get install python3
$sudo apt install python3-pip
docker install & setting
$sudo apt-get install curl
$curl -s https://get.docker.com | sudo sh
$sudo usermod -aG docker $USER
docker에 유저를 포함해서 매번 sudo를 붙이는 수고를 덜어준다.
docker compose install
$sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$sudo chmod +x /usr/local/bin/docker-compose
서버 구축하기
서버를 구축하기위해 Flask(+uwsgi)와 Nginx를 도커로 만들어 준다음 docker compose를 사용해서 하나의 도커로 묶어줘서 다음과 같은 서버를 만들것이다.
STRUCTURE
1. Docker - Flask(+uwsgi)
[app.py]
from flask import Flask
from route.app_route import app_route
app = Flask(__name__)
app.register_blueprint(app_route)
if __name__ == '__main__':
app.run(host='0.0.0.0')
[uwsgi.ini]
[uwsgi]
wsgi-file = app.py
callable = app
socket = :5000
processes = 4
threads = 2
master = true
vacum = true
chmod-socket = 660
die-on-term = true
uWSGI란?
WSGI라는 규칙을 따라서 만들어진 소프트웨어이며 정적인 웹 서버(Apache / Nginx)와 python으로 작성된
Web Framework(Flask / Django) 사이의 통신을 도와주는 역할을한다.
주요 옵션 기능
- wsgi-file을 flask app 진입점인 app.py로 설정
- callable : 연결될 Flask 모듈이름
- socket : uwsgi어플리케이션과 웹서버가 통신할 소켓 경로 또는 uwsgi서버가 동작하는 서버의IP와 포트 번호 명시(만약 nginx와 같이 배포하지 않는다면 http-socket으로 변경해주면 되겠습니다)
[route/app_route.py]
from flask import Blueprint, render_template
app_route = Blueprint('first_route',__name__)
@app_route.route('/')
def index():
return render_template('index.html')
[requirements.txt]
click==7.1.2
Flask==1.1.2
itsdangerous==1.1.0
Jinja2==2.11.2
MarkupSafe==1.1.1
uWSGI==2.0.19.1
Werkzeug==1.0.1
[templates/index.html]
<html>
<head>
<title>W2A</title>
</head>
</html>
<body>
<h1>
WELCOME W2A!!!
</h1>
</body>
[Dockerfile]
FROM python:3
WORKDIR /app
ADD . /app
RUN pip install -r requirements.txt
CMD ["uwsgi","uwsgi.ini"]
2. Docker - Nginx
[nginx.conf]
server {
listen 80;
server_name 127.0.0.1;
location / {
include uwsgi_params;
uwsgi_pass flask:5000;
}
}
[Dockerfile]
FROM nginx
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d/
3. docker-compose
[docker-compose.yml]
version: "3.7"
services:
flask:
build: ./flask
container_name: flask
restart: always
environment:
- APP_NAME=FlaskTest
expose:
- 5000
nginx:
build: ./nginx
container_name: nginx
restart: always
ports:
- "80:80"
docker-compose 실행
$docker-compose up -d --build
주의 사항 및 참고
만약 기존의 삽질로 인해 도커를 이리저리 실행해서 오류가 난다면 컨테이너와 이미지를 지우고 다시 깔끔하게 docker compose up 해주는것이 좋다.
이는 도커 내용 안에 내용을 업데이트 하고싶을때도 이방법을 사용하면 된다.
$docker ps -a -> 종료된 컨테이너 확인
$docker images -> 남아있는 이미지 확인
$docker rm [ps id] -> ps 지우기
$docker rmi [image id] -> 이미지 지우기
ps를 먼저 지우고 이미지를 지워야 오류가 안난다.
'aws 서버구축' 카테고리의 다른 글
Flask에 Css,Js,Images 적용 방법 (0) | 2021.02.11 |
---|---|
AWS(Flask + uwsgi + Nginx+Mysql) 회원가입과 로그인 기능 추가하기 (0) | 2021.02.03 |
AWS(Flask + uwsgi + Nginx)에 mysql 연동하기 (0) | 2021.02.03 |
AWS 구축 (0) | 2021.01.23 |