Home Jenkins를 이용한 Docker 자동화빌드
Post
Cancel

Jenkins를 이용한 Docker 자동화빌드


Docker란?

Docker란 리눅스 컨테이너를 기반으로 하는 오픈소스 가상화 플랫폼이다.

컨테이너란?

컨테이너란 Host OS상에 어플리케이션을 작동시키기 위해 필요한 라이브러리나 설정등을 하나로 만들어, 별도의 서버인 것 처럼 사용할 수 있도록 하는 것이다.
Docker 사진과 같이 Host OS위에 Guest OS를 따로 올려서 사용하는 기존 가상화 방식과는 달리 Docker Engine위에 바로 컨테이너를 올리기 때문에 OS위에 OS를 올려두는 기존방식보다 훨씬 가볍고 그만큼 성능이 향상되고 이식성이 좋다는 장점이있다.


Docker 설치

1
sudo wget -qO- http://get.docker.com/ | sh

Dockerfile 설정

Dockerfile은 이미지를 구성하기 위한 명령어들을 작성하는 파일이다.
docker build를 할 시 Dockerfile이 실행된다.

  • FROM: 베이스가 되는 이미지
  • ARG: 변수명 지정
  • RUN: 이미지 빌드에 필요한 커맨드를 실행
  • WORKDIR: 이동 할 경로
  • COPY: COPY 로컬경로 CONTAINER내부경로
  • ENTRYPOINT: 이미지를 컨테이너로 띄울 때 항상 실행되야 하는 커맨드를 지정할 때 사용
1
2
3
4
5
6
7
8
9
10
11
FROM adoptopenjdk:11-jre-hotspot //Spring boot가 jdk11이기 떄문에 jdk11 이미지베이스로 실행

ARG WAR_FILE=/build/libs/배포할 파일명.war //배포할 파일지정
ARG APP_NAME=app //app.war라는 이름으로 Container로 옮길예쩡

RUN mkdir -p /home/project //war배포파일 경로 생성
WORKDIR /home/project //폴더이동

COPY ${WAR_FILE} /home/project/app.war //배포할 파일을 app.war로 Container내로 복사

ENTRYPOINT java -Duser.timezone=GMT+09:00 -jar /home/project/app.war //app.war 실행

Jenkins BuildStep 설정

이전 Jenkins자동배포 계시물에서는 폴더를 지정하여 war를 보내고 실행했지만 지금은 Docker Container로 파일을 옮길 예정이기 때문에 Send files or execute commands over SSH 과정을 지워버리고 Script만 실행하는 식으로 진행하였다.

Docker

  • -v: Container에 마운트할 로컬 폴더경로:Container내에서 마운트할 폴더 경로
  • -p: 포트지정
  • -d: 빌드 백그라운드에서 Run
1
2
3
4
5
6
7
8
9
10
11
12
container_name="빌드 할 컨테이너의 명"
# 이미 빌드가 되어있는 동일한 컨테이너가 있는지 체크한다.
if docker ps -a --format '' | grep -q "^$container_name$"; then
  docker stop $container_name
  docker rm $container_name
  echo "Stopped container: $container_name"
else
  echo "No running container found with the name: $container_name"
fi

docker build --tag '빌드 할 이미지 태그명' .
docker run -v /var/log/project/jenkins-project:/var/log/project/jenkins-project  -p 8080:8080 -d --name '컨테이너 명' '빌드 할 이미지 태그명'

빌드

위와 같이 설정 후 Git Push시 컨테이너가 정상적으로 생성된 것을 확인할 수 있다. Docker

This post is licensed under CC BY 4.0 by the author.
Contents