728x90

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

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

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

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

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

그 주소는 아래와 같다.


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

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


Php를 어느 정도의 사람이 하는지는 필자도 잘 모른다.

필자가 Php를 하는 것도 순전히 취미이기 때문에 한국에서는 php를 선택하는 사람이 얼마 없는걸로 알고있다.

그래도 만약 php를 사용한다면 보통 프레임워크를 선택할것이다.(개발자라면)

Php는 유명한 프레임워크로는 laravel과 codeigniter가 있다.

그래도 소수지만 만난 php유저들 중에서는 laravel이 인기가 좀 있는 편인거 같다.

하지만 필자는 codeigniter로 시작했고 이 역시 인기 있는 편이다.

이번에는 codeigniter를 apache에서 사용할 건데 사실 초기 설정이 매우매우 귀찮다.

php의 장점인 쉽다는걸 무시해도 좋을 만큼 초기 설정이 귀찮은 편이다.

하지만 우리는 Docker가 있으므로 Docker를 쓰면 여러모로 편리하게 사용할 수 있다.

CodeIgniter를 사용하기 앞서 참고할 부분은 아래와 같다.


[CodeIgniter]CodeIgniter설치하기

[CodeIgniter]url에서 index.php 제거하기


또한 우리는 FrontEndPackageManager를 쓸거고 Bower를 쓸것이다.

사실 안쓰고 싶으면 안써도 된다.

만약 쓰기 싫다면 빼라. 설명을 듣고싶다면 아래링크를 참조하라.


[Docker]FrontEndPackageManager(Bower)-Flask-Python-Ubuntu


이제 사용하려면 CodeIgniter의 특성을 알아야한다.



코드 이그나이터는 여러분이 사용했다면 알겠지만 다른 프레임워크와는 사용법이 다르다.

패키지를 인스톨받아서 api로 사용헀던 방식과는 달리

투박하게 그냥 압축파일 풀고 해당 압축파일에 집어넣는 방식이다.

그래서 Docker를  쓸 때 코드이그나이터를 아예 통째로 집어놓고 쓸것이냐

아니면 코드 이그나이터는 웹에서 받고 파트만 부분부분 붙이냐로 나뉜다.

필자의 생각으로는 아무리그래도 통째로 집어넣는건 좀 아닌거 같아서 wget으로 내려받기로 결정했다.


전체 프로젝트의 구조를 우선 보자.



codeigniter에 덮어 쓸 부분을 project에 넣는다. 사실 폴더이름은 뭐든 좋다.

그리고 apache설정파일인 conf와 .htaccess, 그리고 프론트엔드의 관리에쓸 bower도 보인다.

이 전체적인 프로젝트는 단순한 기능을 하기 위해서 구현한거지만 꽤 준비물이 많다.

그 이유는 codeigniter의 성격 때문에 그렇다.

index.php주소를 없애야하기때문에 그에 대한 설정이 필요하기 때문이다.


그럼 Dockerfile을 보도록 하자.


# 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/html
ENV CI_VER 3.1.8

# Install php
RUN apt-get -y install php

# Install apache
RUN apt-get -y install apache2
RUN apt install libapache2-mod-php7.0 libapache2-mod-php
RUN a2enmod php7.0
RUN a2enmod rewrite

# 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

# Install CodeIgnither
RUN apt-get -y install wget
RUN apt-get -y install unzip
RUN cd ${DEST} && wget https://github.com/bcit-ci/CodeIgniter/archive/${CI_VER}.zip
RUN cd ${DEST} && unzip ${CI_VER}.zip
RUN cd ${DEST} && rm ${CI_VER}.zip
RUN mv ${DEST}/C*/* ${DEST}
RUN rm -rf ${DEST}/C*
RUN rm ${DEST}/index.html

# Add codeigniter file
ADD project ${DEST}/application

# Install front end lib and make assets(called static or public) folder
ADD bower.json ${DEST}
ADD .bowerrc ${DEST}
RUN cd ${DEST} && bower install --allow-root

#Set apache configulation
ADD 000-default.conf /etc/apache2/sites-available/
ADD apache2.conf /etc/apache2/
ADD .htaccess ${DEST}

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

길이가 꽤 된다. apache설정과 codeigniter설정등을 보면 매우 길게 있는 내용들이 보인다.

그 가운데 하나하나 뜯어보자.


# Set Argument
ENV DEST /var/www/html
ENV CI_VER 3.1.8

코드를 길게 다 적을순 없으므로 변수를 설정해준다.

물론 길게 적어도 되겠지만 유연한 코딩을 하기 위해서는 변수로 지정하는게 좋다.


# Install php
RUN apt-get -y install php

# Install apache
RUN apt-get -y install apache2
RUN apt install libapache2-mod-php7.0 libapache2-mod-php
RUN a2enmod php7.0
RUN a2enmod rewrite

또한 당연하지만 php와 apache를 설치해준다.

또한 php와 apache를 연동해주는 모듈도 설치해주고 모듈을 enable해준다.

마지막 줄에 rewrite모듈이 있는데 이는 리다이렉팅 시켜주는 모듈로서

index.php를 url에서 지우려면 반드시 필요하므로 켜둔다.


# 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

fornt end framework는 bower로 관리할 생각이다.

npm설치는 실제로 조금 까다로운 편인데 먼저 npm설치를 위해서는 git과 nodejs가 필요하다.

그리고 설상가상으로 nodejs를 설치한다고 node라는 명령어가 자동으로 만들어지지 않는다.

그래서 우리가 만들어줄 필요가 있다.

마지막으로는 npm을 사용해서 bower를 설치한다.

만약 bower가 아닌 npm이나 yarn등을 사용할수도, 혹은 안쓸수도 있는데 본인이 알아서 잘 하리라 믿는다.


# Install CodeIgnither
RUN apt-get -y install wget
RUN apt-get -y install unzip
RUN cd ${DEST} && wget https://github.com/bcit-ci/CodeIgniter/archive/${CI_VER}.zip
RUN cd ${DEST} && unzip ${CI_VER}.zip
RUN cd ${DEST} && rm ${CI_VER}.zip
RUN mv ${DEST}/C*/* ${DEST}
RUN rm -rf ${DEST}/C*
RUN rm ${DEST}/index.html

대망의 코드이그나이터이다.

코드이그나이터를 웹에서 설치할건데 wget을 이용해서 받자.

사실 git을 받았으므로 git clone을 해도 되긴한다.

wget으로 받으면 압축파일이므로 압축을 해제하기 위해서 unzip을 설치한다.

그리고 git에서 코드이그나이터를 내려받고 압축을 해제한다.

그리고 압축으로 해제한 내용물을 /var/www/html로 옮겨준다.

그리고 압축파일과 자잘한 폴더, 그리고 원래 아파치 설치시에 존재하는 index.html을 지워준다.

이 과정이 끝나면 /var/www/html에 코드이그나이터의 내용물이 들어가 있을 것이다.


# Add codeigniter file
ADD project ${DEST}/application

이제 우리가 만든 프로젝트를 codeigniter에 덮어준다.


# Install front end lib and make assets(called static or public) folder
ADD bower.json ${DEST}
ADD .bowerrc ${DEST}
RUN cd ${DEST} && bower install --allow-root

bower로 프론트 엔드 프레임워크를 설치한다.


{
"directory" : "assets"
}

bowerrc를 보면 설치를 assets에 하는데 원래 php는 정적파일들을 assets라는 폴더에 넣는 문화가 있다.


#Set apache configulation
ADD 000-default.conf /etc/apache2/sites-available/
ADD apache2.conf /etc/apache2/
ADD .htaccess ${DEST}

마지막으로 설정들을 추가하거나 덮어 씌어준다. 이는 rewrite를 사용하기위해서 쓰는 조치들이다.

설명은 윗단의 링크들을 참조하라.


이제 실행해보자.



docker build -t <앱이름> .


그럼이제 빌드를 해주자.



docker run -d -p <외부포트>:80 app


내부포트는 아파치이므로 80을 쓴다. 외부포트는 아무거나 해도되는데 간단하게 하려면 80이 좋다.

단 80을 하기전에 웹서버를 끄는게 좋다.



보다시피 제대로 작동하는걸 볼 수 있다. 프론트엔드 프레임워크까지 제대로 설치되었고 제대로 실행된다.

+ Recent posts