[CI/CD] 스프링프레임워크 5, Maven, Docker, AWS EC2 로 무중단 배포하기 1

Jay_u·2023년 5월 25일
0

도커

목록 보기
1/1


                                         Docker Workflow


스프링 부트를 통해서 무중단 배포를 하는 방법은 많았지만
스프링만을 통해서 배포하는 방법을 써놓은 글은 적어서 작성하게 되었다.

현재 내 프로젝트 상태 :
jdk8
db(오라클)는 로컬이 아닌 다른 서버에 연결해놓음
스프링부트가 아닌 스프링 프레임워크만을 사용
윈도우


시작

1. WSL2 설치
윈도우에서 리눅스 파일을 실행할 수 있게 해주는 시스템으로
도커 설치에 사용됨



2. Windows PowerShell 설치
윈도우용 터미널이다.



3. 도커 설치
Windows PowerShell 설치가 끝나면 열고 다음을 입력한다.
Docker Desktop for Windows



4. Dockerfile 작성
도커가 이미지를 빌드하기 위해서는 도커파일이 있어야만 한다.
도커파일을 작성하기 위해서 자신의 프로젝트로 간다.

Dockerfile은 프로젝트 루트에 작성해야 한다.

프로젝트 루트는 어디일까?

[일반적인 프로젝트 구조]
프로젝트명
└ Java Resources
└ src
└ target
└ pom.xml
└ 도커파일 작성위치임

프로젝트 우측 클릭, file 누르고, Dockerfile(확장자 x)을 만들면 된다.

그리고 다음과 같이 작성하자

# 베이스 이미지 설정
FROM tomcat:9.0-jdk8

# 애플리케이션 WAR 파일 복사
COPY target/프로젝트명.war /usr/local/tomcat/webapps/

# 톰캣 실행
CMD ["catalina.sh", "run"]

설명을 하자면 우리는 스프링부트가 아니기 때문에 빌드하면 war 파일이 생선된다.

그런데 war은 별도의 웹서버나 웹컨테이너(WAS) 가 필요하다.

그래서 도커에게 다음과 같이 시키는 것이다.
톰캐 9.0을 깔고 jdk 8을 사용하고
target/프로젝트명.war을 톰캣의 /usr/local/tomcat/webapps/ 경로에 복사해!

그러면 도커가 복사하고 톰캣을 실행시키면 톰캣은 저 경로에 있는 war을 실행시키게 된다.



5. 프로젝트 빌드

프로젝트 우측 클릭 export 프로젝트 폴더의 경로를 찾아서 target 안에다가 프로젝트명.war 로 빌드한다.

꼭 위치가 target 아래에 넣어야 하나요?
target 폴더는 Maven 이 프로젝트를 빌드할 때 생성되며, 컴파일된 클래스 파일, 리소스 파일 및 생성된 WAR 파일 등을 포함한다.

따라서 일반적으로 target에 넣는게 좋습니다.



6. 도커 데스크탑 설치

편리한 도커 관리를 위해 도커 데스크탑을 설치하자.
https://www.docker.com/products/docker-desktop/




7. 도커 허브 계정 만들고 레포지 만들기
계정명과 레포지 이름을 통해 도커 이미지를 만들것이다.
그래야지 도커허브에 푸쉬할 수 있다.

ex) (도허커브계정명)/레포지이름(주로프로젝트명) <= 이런식으로
dockertName/springProject




8. 도커 이미지 빌드
windows powershell 에서 도커파일이 있는 경로로 이동한다.
cd 도커파일경로

다음으로 도커 이미지를 빌드한다.
우리는 도커허브계정명/도커허브레포지토리이름 으로 도커 이미지를 만들것이다.

위에서 자신이 만든 계정명과 레포지 이름을 활용하자.

docker build -t 도커허브계정명/도커허브레포지토리이름 . (이때 . 은 현재위치를 의미하며, 레포지 이름은 소문자로 구성해야함)

docker images
도커상의 이미지를 보여주는 명령어이다 잘만들어졌는지 확인하자.




9. 로컬 환경에서 테스트
docker run -d -p 8080:8080 이미지명

만약 로컬포트가 이미 사용중이라면 앞쪽 포트번호를 바꾸면된다.

docker ps
실행중인 컨테이너 보여줌

잘 작동한다면 로컬호스트로 접속해보자

http://localhost:포트번호/war명/프로젝트 페이지(?)

여기서 헷갈릴 수 있는데 일반적으로 스프링 프로젝트를 was로 돌리고 다음과 같이 접속한다면
localhost:9090/spring/home.go

도커에서는
localhost:설정포트번호/war명/home.go 로 들어가면 된다.




10. 도커 허브에 푸쉬하기

잘 접속이 된다면 도커를 종료한다.
docker ps 에서 컨테이너 아이디 확인하고
docker stop 컨테이너아이디

docker login
계정명과 암호 입력하면 로그인된다.

docker push 도커 이미지명

도커 허브에 가보면 업로드된 도커 이미지를 확인할 수 있다.




11. EC2 에서 도커 이미지 pull 하기

EC2 인바운드 규칙 바꾸기

(저는 8888 포트를 열었습니다)

powershell 에서 ec2에 접속하고

sudo yum install docker
도커 설치

sudo systemctl start docker
도커 시작

sudo docker pull 계정명/도커레포지

sudo docker run -d -p 8888:8080 도커이미지명(계정명/도커레포지)

접속 되는지 확인하기
http://인스턴스ip:8888/war명/접속페이지




다음은 젠킨스나 github action을 활용해 무중단 배포를 완성시켜야지..


참고 글 :

https://devfoxstar.github.io/java/springboot-docker-ec2-deploy/

profile
정확한 정보를 전달할려고 노력합니다.

0개의 댓글