Docker 중에서도 아주 간단한 소개 및 사용방법을 공유한다. 본 글은 Docker를 처음 보는 사람들을 위해서 정리하였고 특히 꼭 알고 싶어하는 김O호, 박O규를 위해 작성되었다.

Docker?

Docker를 왜 사용할까? 많은 고민을 해볼 수 있지만 가장 주요한 포인트는 독립 환경이라는 점다. 사실 가상화 기술들을 이용하여 다양한 방법으로 독립된 환경 구성하는 방법들이 존재한다. 하지만 그 중에서도 Docker는 아주 쉽게 구성을 도와준다. 사실 LXC(리눅스 커널 컨테이너)와 같은 고급진 말로 설명도 하나 쉽게 이해할 땐 가상 환경이 제일 편하다고 생각한다.

Docker 설치

Docker 설치 배포판은 다양하게 변경되었으나 현재 Docker-Machine 라는 툴(Tool)이 대세이다. 기존에 boot2docker 등이 있었으나 Virtual Box 기반의 환경이었다. Docker-Machine 설치는 다음의 절차를 따른다.

캘리맵 배포 구성 및 실행

캘리맵은 웹프로그래밍을 처음 하는 사람들이 모인 스터디에서 만든 서비스로 위성 지도 위의 알파벳을 찾아주는 서비스이다. Flask 기반의 백엔드와 간단한 UI를 위한 Html 코드로 구성되어 있다.

캘리맵의 배포는 Docker로 하도록 구성하였고 다음의 절차는 캘리맵을 배포하는 절차이다. 아래의 명령들은 반드시 calimap root 폴더에서 수행한다.

$ docker/docker-build.sh
$ docker/docker-run.sh
  1. Docker Image 생성: docker 폴더의 docker/docker-build.sh 실행
  2. Docker 실행: docker 폴더의 docker/docker-run.sh 실행

위와 같이 실행하여 배포판을 서비스하면 http://localhost:10100 주소에 접속하여 확인한다.

칼리맵 서비스 화면

캘리맵 서비스 화면: http://calimap.party

Docker 생성 절차

Docker 사용 방법은 dockerfile을 작성하여 도커로 구성할 OS, 환경, 의존성을 구성하고 도커 이미지로 생성한다. 다음은 calimap을 위한 dockerfile 내용이다.

Dockerfile

캘리맵은 Alpine-flask를 기반으로 환경이 구성하였다. 이미 Alpine-flask에 Nginx + Flask 제공을 위한 구성은 다 되어 있고 캘리맵 파일 복사 및 몇가지 추가적으로 설치할 라이브러리만 추가하였다. 실제 작성한 Dockerfile은 다음과 같다.

FROM alpine
MAINTAINER DONGGEUN,BANG <lubang@lulab.net>

# Reference: https://github.com/jazzdd86/alpine-flask

# basic flask environment
RUN apk add --no-cache bash git nginx uwsgi uwsgi-python py-lxml py-pip \
	&& pip install --upgrade pip \
	&& pip install flask

# application folder
ENV APP_DIR /server

# app dir
RUN mkdir ${APP_DIR} \
	&& chown -R nginx:nginx ${APP_DIR} \
	&& chmod 777 /run/ -R \
	&& chmod 777 /root/ -R
VOLUME ${APP_DIR}
WORKDIR ${APP_DIR}

# expose web server port
# only http, for ssl use reverse proxy
EXPOSE 80

# copy config files into filesystem
COPY nginx.conf /etc/nginx/nginx.conf
COPY app.ini /app.ini
COPY entrypoint.sh /entrypoint.sh

# exectute start up script
ENTRYPOINT ["/entrypoint.sh"]

build-docker.sh

도커 이미지를 생성하는 스크립트로 lubang/calimap이라는 이름으로 생성한다.

$ docker build -t lubang/calimap docker

run-docker.sh

도커를 실행하는 스크립트로 calimap 이란 이름으로 시작한다. 그리고 도커의 80포트를 호스트의 10100으로 연결하고 도커의 /server 경로를 $PWD/server/ 경로로 바인딩 한다.

$ docker run --name calimap -p 10100:80 -v $PWD/server/:/server -d lubang/calimap

build-docker.sh, run-docker.sh는 처음으로 Docker를 사용하는 사람들을 위해 작성한 스크립트일 뿐이고 사실 요즘에는 Kitematic(https://kitematic.com/)을 이용한 설정을 선호한다. 역시 GUI가 최고다!

참고자료