Docker 모니터링하기

이재홍 http://www.pyrasis.com 2014.08.02 ~ 2014.09.20

애플리케이션 서버 Dockerfile 작성

이제 애플리케이션 서버에서 사용할 Docker 이미지를 만듭니다.


그림 9-3 애플리케이션 서버 Dockerfile 작성

다음 파일들은 저의 GitHub 저장소에 있는 예제 파일을 받아서 사용합니다. 애플리케이션 서버를 구축할 것이므로 애플리케이션 서버로 사용할 각 컴퓨터에 받습니다.

$ git clone https://github.com/pyrasis/dockerbook.git

Dockerfile

FROM ubuntu:14.04

RUN apt-get update
RUN apt-get install -y nginx \
    git make pbuilder python-mock python-configobj \
    python-support cdbs

RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
RUN chown -R www-data:www-data /var/lib/nginx

WORKDIR /tmp
RUN git clone https://github.com/BrightcoveOS/Diamond.git
RUN cd Diamond && git checkout v3.4 && make deb
RUN dpkg -i Diamond/build/diamond_3.4.0_all.deb
RUN cp /etc/diamond/diamond.conf.example /etc/diamond/diamond.conf

ADD entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

EXPOSE 80
EXPOSE 443
  • FROM으로 ubuntu:14.04를 기반으로 이미지를 생성하도록 설정합니다.
  • apt-get update로 패키지 목록을 최신 상태로 업데이트한 뒤 nginx 패키지와 Diamond에 필요한 패키지를 설치합니다.
  • nginx를 데몬이 아닌 foreground로 실행하도록 설정합니다. 그리고 /var/lib/nginx 디렉터리의 소유자와 그룹을 www-data로 설정합니다.
  • /tmp 디렉터리 아래에 git을 사용하여 Diamond를 받고, v3.4 태그를 체크아웃합니다. 그리고 make deb 명령으로 deb 패키지 파일을 생성합니다. dpkg로 deb 파일을 설치할 때 파일명에 버전이 있으므로, 소스도 버전을 맞추어주는 것입니다.
  • dpkg로 빌드된 deb 파일을 설치합니다.
  • Diamond 예제 설정 파일을 기본 설정 파일(diamond.conf)로 복사합니다.
  • 이미지에 entrypoint.sh 파일을 추가합니다.
  • 이미지의 /entrypoint.sh 파일에 실행 권한을 줍니다.
  • ENTRYPOINT로 컨테이너가 생성될 때 entrypoint.sh가 실행되도록 설정합니다.
  • EXPOSE로 80, 443번 포트를 호스트와 연결합니다.

다음은 컨테이너가 시작될 때 실행될 entrypoint.sh 파일입니다.

entrypoint.sh

#!/bin/bash

sed -i "s/host = graphite/host = $GRAPHITE_HOST/g" /etc/diamond/diamond.conf
diamond

cd /etc/nginx
nginx
  • /etc/diamond/diamond.conf 파일의 host$GRAPHITE_HOST 변수 값을 설정합니다. 이 변수는 docker run 명령에서 -e 옵션으로 설정할 수 있습니다.
  • diamond를 실행합니다. 실행하는 즉시 데몬으로 동작됩니다.
  • 저는 예제로 nginx를 실행했습니다. 이 부분은 나중에 여러분이 작성한 애플리케이션을 실행하면 됩니다.

Dockerfile이 있는 디렉터리로 이동한 뒤 docker build 명령으로 이미지를 생성합니다.

~$ cd dockerbook/Chapter09/Diamond
~/dockerbook/Chapter09/Diamond$ sudo docker build --tag diamond .

모니터링 서버와 마찬가지로 애플리케이션 서버도 시간을 정확히 맞추어줍니다.

$ sudo ntpdate time2.kriss.re.kr

diamond 이미지를 컨테이너로 생성합니다. -d 옵션을 사용하여 데몬 모드로 실행하고, 80번 포트를 연결한 뒤 외부에 노출합니다. -e 옵션으로 GRAPHITE_HOST 변수에 모니터링 서버의 IP 주소 또는 도메인을 설정합니다. 192.168.0.40은 저의 모니터링 서버 IP 주소이므로 여러분의 IP 주소 또는 도메인으로 설정합니다.

$ sudo docker run -d --name app1 -p 80:80 -e GRAPHITE_HOST=192.168.0.40 diamond

저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

30 November 2014