일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ubuntu 배포
- AWS
- Amazon Web Service
- 몽고DB
- MongoDB
- 코드프레소
- VPC EC2
- MongoDB 참조
- SrpingBoot
- AWS VPC
- AWS NAT
- AWS CloudTrail
- 소프트웨어 개발과 테스트
- AWS NAT gateway
- 스프링 게시판
- AWS 요금
- Loard Balancer
- MongoDB Reference
- MongoDB DataModel
- 레디스설치
- aws ec2
- codepreosso
- JPA연관관계
- AWS Route53
- codepresso
- EC2 배포
- Datamodel
- AWS #CloudTrail #AWS로그
- EC2 생성
- SpringProject
- Today
- Total
정환타 개발노트
Docker/Jenkins를 활용한 웹서버 자동 배포 & Docker Image 자동 배포 본문
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 사용환경 구축
여기서 중요한 것이 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)
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 기반으로) 도커 허브에 배포 후. 원격 서버에서 최신 도커이미지를 받아와 웹서버를 실행한다.
이상 무!
'DevOps' 카테고리의 다른 글
Kubernetes의 아키텍처에 대하여 (0) | 2020.04.08 |
---|---|
Kubernetes(k8s)에 대하여 (0) | 2020.04.08 |
Jenkins를 활용한 빌드&배포(Spring Boot) (0) | 2020.02.25 |
[조대협 대용량 아키텍처] 성능 엔지니어링 (0) | 2020.02.17 |
[조대협 대용량 아키텍처] 잘나가는 SNS 서비스들의 기술적 특징 (0) | 2020.02.10 |