정환타 개발노트

Docker/Jenkins를 활용한 웹서버 자동 배포 & Docker Image 자동 배포 본문

DevOps

Docker/Jenkins를 활용한 웹서버 자동 배포 & Docker Image 자동 배포

JungHwanTa 2020. 4. 3. 18:00

Docker with SpringBoot

 

이번에는 Spring Boot로 작성한 프로젝트를 Jenkins와 Docker를 활용하여 이미지를 생성하고 그 이미지를 기반으로 EC2에 자동 배포할 예정이다.

 

Docker image를 생성하기에 앞서 그 이미지를 사용하기 위한 Docker file을 먼저 생성한다.

 

1. 프로젝트 루트에 'Dockerfile' 이라는 파일을 생성하고 다음과 같은 내용을 입력한다.

FROM java:8

LABEL maintainer="pjhyl1127@gmail.com"

VOLUME /tmp

EXPOSE 8080

ARG JAR_FILE=target/Jungstagram-0.0.1-SNAPSHOT.jar

ADD ${JAR_FILE} jungstagram.jar

ENTRYPOINT ["java","-jar","/jungstagram.jar"]

작성 내용에는,

사용 자바 버전과 개방할 포트, jar파일의 위치를 작성하고 마지막의 ENTRYPOINT에는 우리가 프로젝트를 실행시키는 명령을 입력해준다.

 

 

2. 다음으로 자동 빌드 및 배포를 위한 jenkins를 실행한다.

필자는 docker를 사용하기에 로컬에 docker를 이용하여 젠킨스를 사용하였으며, 만일 ec2에 젠킨스를 설치하고 싶다면 다음 링크를 참고하면 된다.

2020/01/23 - [DevOps] - Jenkins 사용환경 구축

 

Jenkins 사용환경 구축

이번에는 CI 환경을 구성하려한다. CI란 코드 버전 관리 시스템에 Push가 되면 자동으로 Test, Build과정을 거쳐 Build 결과까지 서버에 자동배포하는 과정을 말한다. 여기서 가장 중요한 것은 Test 과정까지 자동..

junghwanta.tistory.com

여기서 중요한 것이 ec2에 jenkins를 설치했다면 ec2에 Docker를 설치해주고, docker를 이용하여 젠킨스를 설치한다면 jenkins와 docker가 함께 설치된 이미지를 실행한다.

https://hub.docker.com/r/getintodevops/jenkins-withdocker/(젠킨스 + 도커 이미지)

 


3. Jenkins에서 Github으로 push 된 프로젝트를 자동 빌드하도록 설정한다.

2020/02/25 - [DevOps] - Jenkins를 활용한 빌드&배포(Spring Boot) 

 

Jenkins를 활용한 빌드&배포(Spring Boot)

이전 포스트에서 젠킨스 사용환경을 구축하였다. 2020/01/23 - [DevOps] - Jenkins 사용환경 구축 이번에는 Jenkins와 Git을 연동하여 Master branch로 push된 소스코드를 자동으로 빌드하고 배포하겠다. 먼저 이..

junghwanta.tistory.com

 

4. 빌드 완료 후 Docker Image를 생성하도록 설정한다. 

먼저, docker hub에서 저장소를 만들어 준다.

https://hub.docker.com/repository/create(respository 생성 링크)

 

다음으로 [build]에서 [Execute shell]을 추가한 뒤 다음과 같이 입력한다.

docker build -t <dockerUserNmae>/<repository>:<tag> .
docker push <dockerUserNmae>/<repository>

 

save를 누르고 나오게 되면, 깃헙의 저장소로 push 된 코드가 자동으로 build 된 후에 dockerfile을 기반으로 docker image를 생성하고 docker hub로 배포하게 된다.

 

5. 원격 배포하기

젠킨스에서 빌드 후 이미지 빌드 -> 푸쉬 후에 최근 버전의 이미지를 원격 서버에서 실행하려 한다.

먼저 ec2 인스턴스를 생성하고 docker 설치후에 'docker login'을 통해 도커를 활성화 해준다.

https://blog.cosmosfarm.com/archives/248/%EC%9A%B0%EB%B6%84%ED%88%AC-18-04-%EB%8F%84%EC[BB%A4-docker-%EC%84%A4%EC%B9%98-%EB%B0%A9%EB%B2%95/(필자는 ubuntu를 사용하였기에 ubunut docker 설치 참고링크이다.)

 

다음으로 jenkins 설정에서 ec2 연결설정을 해준다.

[Plugin]에서 'Publish over SSH'를 설치해주고,

젠킨스 [환경설정]에서 Publish over SSH의 설정을 해준다.

Hostname : ec2 dns or ip

Remote Directory : ec2의 사용 디렉토리

Use password authentication, or use a different key 를 체크하고 

Key: ec2 instance pem을 text로 열어 안에 있는 RSA Key를 입력해준다.

 

 

다시 젠킨스 빌드 설정으로 들어와서 

[빌드 환경]의 [Send files or execute commands over SSH after the build runs]를 추가한다.

[Exec command]에 최신 도커 이미지와 컨테이너를 실행하는 명령을 입력한다.

sudo docker stop <dockerUserName>/<repositoryName>
sudo docker pull <dockerUserName>/<repositoryName>
nohup sudo docker run -p 5000:8080 <dockerUserName>/<repositoryName> &

마지막으로 Save를 해준 후에 [Build Now]를 실행하면

github master 브랜치의 소스코드를 가져와 빌드를 실행한 후 도커 이미지를 생성하여(dockerfile 기반으로) 도커 허브에 배포 후. 원격 서버에서 최신 도커이미지를 받아와 웹서버를 실행한다.

 

이상 무!

Comments