728x90

이 포스팅 분류는 Docker를 정확히 어떻게 사용할지를 다루지 않는다.

대신 Docker로 특정 상황에 어떻게 환경을 구축해야하는지의 예제를 담고 있다.

만약 이 Docker에 대해서 어떻게 관리하는 지를 알고싶다면 인터넷을 검색을 활용하거나

필자의 블로그에서 Software-Docker를 확인해주기를 바란다.

현재 여기 업로드 되어있는 모든 예제들은 필자의 github repository에 올라와있다.

그 주소는 아래와 같다.


https://github.com/kukaro/Eris-DockerExampleTemplate

예제를 직접 확인하고 싶다면 해당 repository를 참조하라.


FrontEndPackageManager(Bower)-Flask-Python-Ubuntu


위의 도커 설정에서 apache만 추가할 것이다.

하지만 아파치만 추가해서 될일이 아니다.

아파치를 추가하고 Python과 연동을 시켜줘야한다.


[Flask-03]flask, apache연동하기


해당 설정에서보면 flask와 apache를 연동하는 예제를 볼수 있다.

flask라기 보단 python을 apache와 연동하는 어플리케이션이 필요하다.

이를 파이썬쪽에서는 wsgi라고 부른다. 그 설명역시 위의 링크에 있으므로 확인하기 바란다

읽는 방식은 위스키 혹은 휘스키라 읽는다.

apache에서는 보통 미들웨어로 mod_wsgi를 쓰는데 이를 모드 위스키라고 읽는다.

즉 우리는 apache에서 flask를 쓸건데 미들웨어를 mod_wsgi로 쓰고 프론트엔드는 bower로 관리하며 운영체제는 ubuntu를 사용할 것이다.


FrontEndPackageManager(Bower)-Flask-Python-Ubuntu


해당 링크에서 아파치를 제외하고 사용하는 방법을 제시하였다.

이번에는 조금 다른 방식을 쓸건데 바뀐부분을 위주로 설명하도록하고 안바뀐 부분은 위 링크를 찾아서 보아라.


해당 디렉터리를 보면 저번과 전반적으로 비슷한느낌이다.

참고로 .idea는 당연하지만 무시하라 의미없다.

해당 디렉터리에서 추가된거라면 wsgi파일과 000-default.conf파일이다.

000-default.conf는 apache존재하는 설정파일이다.

그럼 docker파일을 통째로 보자.


# Install ubuntu
FROM ubuntu:16.04
MAINTAINER kukaro <justkukaro@naver.com>
RUN apt-get -y update && apt-get -y upgrade

#Set Argument
ENV DEST /var/www/
ENV AP_DIR /etc/apache2

# Install python
RUN apt-get -y update && apt-get -y install python3
RUN apt-get -y update && apt-get -y install python3-pip

# Install apache and mod_wsgi
RUN apt-get -y install apache2
RUN apt-get -y install libapache2-mod-wsgi-py3
RUN a2enmod wsgi

# Make port 80 available to the world outside
EXPOSE 80

# install npm, bower
RUN apt-get -y install git
RUN apt-get -y install nodejs
RUN apt-get -y install npm
RUN apt-get install -y build-essential
RUN cp /usr/bin/nodejs /usr/bin/node
RUN npm install -g bower

# Import python project
ADD FLASKAPPS ${DEST}/FLASKAPPS

# Install module
RUN /usr/bin/pip3 install --upgrade pip && pip3 install -r ${DEST}/FLASKAPPS/requirements.txt
RUN cd ${DEST}/FLASKAPPS/ && bower install --allow-root

# Set apache configulation
ADD 000-default.conf ${AP_DIR}/sites-available/
RUN mkdir -p ${DEST}/FLASKAPPS/logs

# CMD
CMD /usr/sbin/apache2ctl -D FOREGROUND

여러 설정이 겹치다보니 추가된 코드들이 눈에 보인다.

일단 부분부분 나눠서 보도록하자.


# Install apache and mod_wsgi
RUN apt-get -y install apache2
RUN apt-get -y install libapache2-mod-wsgi-py3
RUN a2enmod wsgi

아파치를 설치하고 아파치에 사용할 wsgi를 설치해준다. 우리는 mod-wsgi를 사용한다.

위의 설정대로면 python3를 기반으로한 mod-wsgi를 설치한다.

만약 python2를 기반으로한 mod-wsgi를 설치하고 싶다면 libapache2-mod-wsgi를 설치해준다.

마지막으로는 wsgi를 켜주면된다.


import sys
sys.path.insert(0,"/var/www/")
from FLASKAPPS import app as application

hellowordapp.wsgi파일의 내부 모습이다.

여기서 위치가 굉장히 중요하다. 우리는 /var/www에 있는 FLASKAPPS모듈을 추가해주는 것이다.


# Set apache configulation
ADD 000-default.conf ${AP_DIR}/sites-available/
RUN mkdir -p ${DEST}/FLASKAPPS/logs

그다음 000-default.conf파일을 /etc/apache2/sites-available에 업로드 한다.

사실 위 파일은 이미 존재하지만 이미 존재하는 파일을 add하면 덮어써진다.

우리는 wsgi를 사용하기 위해서 설정을 변경시켰기 때문에 이를 덮었는 것이다.

그리고 에러 메시지를 저장하기 위해 폴더를 따로 만드는데 이는 000-default.conf를 확인해야만 한다.


<VirtualHost *:80>
ServerAdmin jiharu@localhost
ErrorLog /var/www/FLASKAPPS/logs/error.log
CustomLog /var/www/FLASKAPPS/logs/access.log combined

WSGIDaemonProcess helloworldapp user=www-data group=www-data threads=5
WSGIProcessGroup helloworldapp
WSGIScriptAlias / /var/www/FLASKAPPS/helloworldapp.wsgi
Alias /static/ /var/www/FLASKAPPS/static/
<Directory /var/www/FLASKAPPS/static/>
Order allow,deny
Allow from all
</Directory>

</VirtualHost>

해당 폴더를 열어보면 ErrorLog와 CustomLog를 저장할 위치가 보인다.

저 위치가 없다면 아파치에서 에러를 내뿜으면서 실행되지 않으니 반드시 만들어준다.

그리고 밑에 보면 wsgi설정이 보인다.

해당 설명은 여기를 참조하라.


위의 도커파일을 실행시키면 알아서 돌면서 실행한다.

이제 어플이 실행되는지 확인해 보자.



docker build -t <앱이름> .


빌드가 끝나면 실행해준다.



docker run -d -p <외부포트>:80 <앱이름>


단독 플라스크를 쓸때는 5000을 썼는데 아파치를 쓸때는 기본이 80이므로 80으로 사용한다.

만약 80을 열거면 여러분 컴퓨터의 웹서버를종료해주시라.



제대로 작동된다.





+ Recent posts