Docker로 애플리케이션 배포하기

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

서버에 Git Hook 설정하기

개발자 PC에서 git push 명령으로 소스를 올렸을 때 Docker 이미지와 컨테이너를 생성하도록 Git Hook을 설정합니다.


그림 8-7 서버에 Git Hook 설정

다음 내용을 서버의 /home/<서버 사용자 계정>/exampleapp/.git/hooks 디렉터리에 post-receive로 저장합니다.

~/exampleapp/.git/hooks/post-receive

#!/bin/bash

APP_NAME=exampleapp
APP_DIR=$HOME/$APP_NAME
REVISION=$(expr substr $(git rev-parse --verify HEAD) 1 7)

GIT_WORK_TREE=$APP_DIR git checkout -f

cd $APP_DIR
docker build --tag $APP_NAME:$REVISION .
docker stop $APP_NAME
docker rm $APP_NAME
docker run -d --name $APP_NAME -p 80:80 $APP_NAME:$REVISION
  • APP_NAME 변수에 현재 애플리케이션의 이름을 설정합니다. 이 이름은 저장소 이름과 같아야 합니다.
  • APP_DIR **변수에 저장소 디렉터리 경로를 설정합니다. 셸에서 **HOME 변수에는 사용자 홈 디렉터리 경로(/home/<사용자 계정>)가 들어있습니다.
  • git rev-parse 명령으로 Push된 최신 리비전을 구한 뒤 앞의 7자리만 REVISION 변수에 저장합니다.
  • git checkout -f 명령으로 Push된 소스를 저장소 디렉터리에 받습니다. 반드시 GIT_WORK_TREE 변수를 설정해주어야 합니다.
  • exampleapp 저장소 디렉터리로 이동합니다.
  • docker build 명령으로 이미지를 생성합니다. 이미지 이름은 exampleapp이고 태그에는 방금 구한 Git 리비전을 설정합니다.
  • docker stop, rm 명령으로 현재 실행되고 있는 Docker 컨테이너를 정지한 뒤 삭제합니다.
  • docker run 명령으로 새로 만든 이미지를 컨테이너로 생성하고, -p 옵션으로 80번 포트를 연결하고 외부에 노출합니다. 이미지 이름은 exampleapp이고 태그에는 앞에서 구한 Git 리비전을 설정합니다.

post-receive 파일에 실행 권한을 부여합니다.

~/exampleapp/.git/hooks$ chmod +x post-receive

저작권 안내

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

Published

30 November 2014