본문으로 바로가기

도커 환경 세팅

본 환경은 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를 먼저 지우고 이미지를 지워야 오류가 안난다.

 

 

 

 

 

참고:basketdeveloper.tistory.com/66

참고:woolbro.tistory.com/95