도커(Docker) 입문편 : 도커 파일(Dockerfile)

강민범·2024년 2월 28일
0

Dockerfile로 이미지 만들기

$ 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

깃이 설치되고 실행한 것을 볼 수 있습니다.

모니위키(moniwiki) 도커 파일 작성하기

웹 애플리케이션을 실행하기 위해 도커 이미지를 작성해보겠습니다.
지금 사용할 웹 애플리케이션은 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포트를 통해 모니위키 서버가 잘 실행중인지 확인할 수 있습니다.

참고:https://www.44bits.io/ko/post/easy-deploy-with-docker

profile
개발자 성장일기

0개의 댓글