본문 바로가기

DEV/CICD

무중단 배포(Blue-Green Deployment) - Tomcat 구동

반응형

무중단 배포 - Tomcat 구성


앞 장에서 설치한 Nginx를 통해 웹서버 포트(8084번 포트)에 들어온 요청을 톰캣서버 포트로 전달 합니다. 
톰캣서버는 블루 모드(8091번 포트)과 그린 모드(8092번 포트) 2개 포트가 Nginx 서버와 연결되어 구동되어진 서버로 연결이 됩니다.

파일 구조

파일명 설명
Dockerfile 도커 구동을 위한 도커파일
deploy.sh 배치 실행 시 blue/green을 구분하여 실행을 위한 쉘스크립트
docker-compose.blue.yml 무중단 배포 중 blue 모드용 compose 파일
docker-compose.green.yml 무중단 배포 중 green 모드용 compose 파일
ROOT.war 웹 배포용 WAR 파일
   

 

설정

1. Dockerfile

FROM tomcat:8

COPY ROOT.war /usr/local/tomcat/webapps

# java option 추가
#ENV JAVA_OPTS="-DsvrNo=4"

# docker container의 timezone을 서울로 변경
ENV TZ=Asia/Seoul
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

EXPOSE 8080 
CMD ["catalina.sh", "run"]


2. deploy.sh

#!/bin/bash

DOCKER_APP_NAME=projectname

EXIST_BLUE=$(/usr/local/bin/docker-compose -p ${DOCKER_APP_NAME}-blue -f docker-compose.blue.yml ps | grep Up)

if [ -z "$EXIST_BLUE" ]; then
    echo "blue up"
    /usr/local/bin/docker-compose -p ${DOCKER_APP_NAME}-blue -f docker-compose.blue.yml up -d --build

    sleep 10

    /usr/local/bin/docker-compose -p ${DOCKER_APP_NAME}-green -f docker-compose.green.yml down
else
    echo "green up"
    /usr/local/bin/docker-compose -p ${DOCKER_APP_NAME}-green -f docker-compose.green.yml up -d --build

    sleep 10

    /usr/local/bin/docker-compose -p ${DOCKER_APP_NAME}-blue -f docker-compose.blue.yml down
fi

- Docker_APP_NAME에는 프로젝트명칭을 적어줍니다.


3. docker-compose.blue.yml

version: '3'

services:
  app:
    build: .
    image: projectname
    environment:
      - JVM_OPTS=-Xmx1g -Xms1g -XX:MaxPermSize=1024m
    ports:
      - 8091:8080
    volumes:
      - /home/user/files:/usr/local/files 
    container_name: projectname_blue

- ports에는 blue모드로 대기할 포트(8091)와 Dockerfile을 통해 expose된 포트(8080)를 적어줍니다.


4. docker-compose.green.yml

version: '3'

services:
  app:
    build: .
    image: projectname
    environment:
      - JVM_OPTS=-Xmx1g -Xms1g -XX:MaxPermSize=1024m
    ports:
      - 8092:8080
    volumes:
      - /home/user/files:/usr/local/files 
    container_name: projectname_green

- ports에는 green모드로 대기할 포트(8092)와 Dockerfile을 통해 expose된 포트(8080)를 적어줍니다.


Docker 실행


nginx서버를 먼저 구동합니다.
이전 글(2020/12/22 - [DEV/CICD] - 무중단 배포(Blue-Green Deployment) - Nginx설치)을 참고하여 Nginx를 구동합니다.

run_nginx.sh

 

다음은 Docker를 통해 Tomcat을 실행합니다.

deploy.sh


도커 프로세스 확인

- nginx와 블루모드로 구동된 tomcat 웹서버 2개가 구동되어 있음을 확인합니다.


웹 서버 로그 확인

docker logs -f $(docker ps -aq --filter name=도커컨테이너명)

웹서버 로그를 보기 위해서 docker ps를 통해 도커컨테이너명을 조회 후 위 명령어를 치면 톰캣 서버 로그를 확인 할 수 있습니다.

 

 

 

반응형
댓글