$ mkdir git-from-dockerfile
$ cd git-from-dockerfile
우선 Dockerfile을 저장하기 위한 디렉토리를 생성합니다.
$ vi Dockerfile
FROM ubuntu:bionic
RUN apt-get update
RUN apt-get install -y git
도커 파일을 생성한 후 다음 내용을 작성해줍니다.
FROM: 어떤 이미지로부터 이미지를 생성할 것인지 지정
RUN: 명령어를 실행하라는 의미
만든 Dockerfile로 이미지를 빌드하겠습니다
$ docker build -t ubuntu:git-from-dockerfile .
그 후 git이 잘 생성되었는지 확인해보겠습니다
$ docker run -it ubuntu:git-from-dockerfile bash
root@72d34e612eb2:/# git --version
git version 2.17.1
깃이 설치되고 실행한 것을 볼 수 있습니다.
웹 애플리케이션을 실행하기 위해 도커 이미지를 작성해보겠습니다.
지금 사용할 웹 애플리케이션은 PHP와 아파치를 기반으로 동작하는 모니위키입니다.
애플리케이션을 실행하기 위해 도커 이미지를 만드는 작업을 도커라이징(Dockerizing)이라고합니다.
$ git clone https://github.com/nacyot/docker-moniwiki.git
$ cd docker-moniwiki/moniwiki
moniwiki 디렉토리에 포함된 Dockerfile의 내용을 살펴보겠습니다.
FROM ubuntu:14.04
RUN apt-get update &&\
apt-get -qq -y install git curl build-essential apache2 php5 libapache2-mod-php5 rcs
WORKDIR /tmp
RUN \
curl -L -O https://github.com/wkpark/moniwiki/archive/v1.2.5p1.tar.gz &&\
tar xf /tmp/v1.2.5p1.tar.gz &&\
mv moniwiki-1.2.5p1 /var/www/html/moniwiki &&\
chown -R www-data:www-data /var/www/html/moniwiki &&\
chmod 777 /var/www/html/moniwiki/data/ /var/www/html/moniwiki/ &&\
chmod +x /var/www/html/moniwiki/secure.sh &&\
/var/www/html/moniwiki/secure.sh
RUN a2enmod rewrite
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
EXPOSE 80
CMD bash -c "source /etc/apache2/envvars && /usr/sbin/apache2 -D FOREGROUND"
살펴보시면 &&\을 볼 수 있습니다. 도커 파일은 한 줄 한줄이 레이어 형태로 저장되기 때문에 RUN을 줄이면 레이어가 줄어들고 캐시도 효율적으로 관리가 가능합니다. 여기서 사용한 && 연산자는 여러 명령어를 이어서 실행하기 위한 연산자이고 , \은 명령어를 여러줄에 작성하기 위한 문자입니다.
WORKDIR /tmp
이 명령어는 이후에 실행되는 모든 작업의 실행 디렉토리를 변경합니다.
RUN \
curl -L -O https://github.com/wkpark/moniwiki/archive/v1.2.5p1.tar.gz &&\
tar xf /tmp/v1.2.5p1.tar.gz &&\
mv moniwiki-1.2.5p1 /var/www/html/moniwiki &&\
chown -R www-data:www-data /var/www/html/moniwiki &&\
chmod 777 /var/www/html/moniwiki/data/ /var/www/html/moniwiki/ &&\
chmod +x /var/www/html/moniwiki/secure.sh &&\
/var/www/html/moniwiki/secure.sh
RUN a2enmod rewrite
모니위키를 설치하는 명령어입니다.
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
ENV는 컨테이너 실행 환경에 적용되는 환경변수의 기본 값을 지정하는 지시자입니다.
EXPOSE 80
CMD bash -c "source /etc/apache2/envvars && /usr/sbin/apache2 -D FOREGROUND"
EXPOSE는 가상머신에 오픈할 노드를 지정해줍니다.
마지막 줄의 CMD는 컨테이너에서 실행될 명령어를 지정해줍니다. 앞에서 실행했던 명령어는 docker run이였지만, 모니위키는 아파치를 사용하기 때문에 FOREGROUND에 실행합니다.
$ docker build -t nacyot/moniwiki:latest .
$ docker run -d -p 9999:80 nacyot/moniwiki:latest
0835372255cd077564f98057672debd440aabc7107745e4abd3b2ac84924d463
Dockerfile을 빌드하고 실행해줍니다. -d는 -i의 반댓말로 컨테이너 백그라운드에서 실행합니다 -p는 포트포워딩을 지정하는 옵션입니다.
:을 기준으로 앞에는 외부 포트 뒤에는 내부 포트입니다.
http://127.0.0.1:9999/moniwiki/monisetup.php
로컬 머신의 9999포트를 통해 모니위키 서버가 잘 실행중인지 확인할 수 있습니다.