[Spring] Docker를 활용한 배포(2) - Docker 설치 및 이미지 생성

박도연·2024년 10월 23일

Spring

목록 보기
6/7
post-thumbnail

배포 1탄 - EC2, RDS 생성
1탄에 이어 2탄에서는 docker를 설치하고, 이를 활용한 배포를 해보겠다능

Docker는 공부할 게 많은 것 같다.. 나는 가벼운 서버를 다루었기 때문에 도커에 많은 작업을 해두지는 않았다.

Docker를 활용하여 배포를 하는 과정을 간략하게 설명을 해보자면 아래와 같다.

작성한 코드를 로컬에서 Docker Image로 저장
-> 로컬에서 생성한 이미지를 Docker Hub에 Push
-> 리눅스 서버에 접속하여 Docker Hub에 올라온 이미지를 Pull
-> 도커를 실행(Run)하여 배포

Docker 설치

다음 링크를 참고하여 맥북에 도커를 설치해주었다. 그리고 도커 회원가입까지 마쳐준다.
https://happylie.tistory.com/78

IntelliJ에 jar 파일 생성

intelliJ 오른쪽 사이드바를 보면 코끼리 모양의 Gradle이 있는데, 이걸 눌러서 build/bootJar를 누르면 아래처럼 jar파일이 생성된다. 프로젝트 파일 경로의 build>libs에 가면 이렇게 생성된 것을 볼 수 있다.

DockerFile 생성

프로젝트에 DockerFile을 하나 생성해준뒤 아래 코드를 작성해준다.

FROM openjdk:17
ARG JAR_FILE=/build/libs/*.jar    // JAR_FILE이라는 이름의 빌드 인자를 정의
COPY ${JAR_FILE} app.jar         // 빌드 인자로 정의된 JAR 파일을 Docker 이미지 내의 /app.jar 경로로 복사    
ENTRYPOINT ["java", "-jar", "/app.jar"]  // Docker 컨테이너가 시작될 때 실행할 명령

터미널에서 Docker 이미지 생성

그전에 먼저 Docker 로그인을 해보자

우선 도커에 들어가 도커 회원가입을 하고 generate new token을 해준다. access permissions은 Read, Write, Delete로 설정해준다.

그러면 이렇게 비밀번호(personal token)이 생성되는데 이값은 따로 복사하여 저장해두자.

터미널에서 도커에 로그인할때 아래 코드를 작성해주면 된다. (비밀번호는 저장해둔 personal access token 입력) 나는 intelliJ 내부에 있는 터미널에 작성해주었다.

docker login -u <아이디> -p <비밀번호>

이제 이미지를 생성해보자

docker build --platform linux/amd64 -t <도커계정이름>/<이미지이름> .   

‼️ 맥북의 경우 --platform linux/amd64 를 추가해주어야 합니다. 마지막에 .(점)은 꼭 넣어주어야 함 !!
이렇게 하면 도커 이미지가 생성 된 것 !! 타라 ~


생성된 이미를 조회해보자

docker images  //현재 생성된 이미지 조회

이렇게 생성된 도커 이미지들을 볼 수 있다. (왜인지 모르겠지만 날짜는 2주전이라 뜸..)

Docker Desktop에서도 이렇게 확인할 수 있다.

생성된 이미지를 Docker Hub에 Push

터미널에서 도커 이미지를 푸시해준다.

docker push <도커계정이름>/<이미지이름>

Docker Desktop에 접속하여 Hub가면 이미지가 올라온 것을 확인할 수 있다.

리눅스 서버에 접속하여 배포

ssh -i < 이름>.pem ubuntu@<AWS 공용 IP>

aws에서 받은 pem파일이 있는 위치로 이동한 뒤, 위 코드를 입력해준다.
접속 성공 !


도커에 로그인을 해주고, hub에 올라온 이미지를 pull 받는다.

sudo docker login -u <아이디> -p <비밀번호>
sudo docker pull <도커아이디>/<이미지이름>

(우분투 서버에서는 권한때문인지, 앞에 sudo를 붙혀주어야 작동할때가 많다.) pull 성공 !


실행 중인 컨테이너 확인

sudo docker ps

위 명령어를 실행해주면 아래와 같이 현재 실행중인 컨테이너와 이미지를 확인할 수 있다.

도커와 로컬의 포트포워딩

sudo docker run -d -p 8080:8080 <도커사용자이름>/<이미지이름> 

-d는 로그를 백그라운드에 실행하는 것으로 로그가 보이지 않는다. (로그를 확인하고 싶을 때에는 이를 지우고 실행)

자, 이러면 배포가 완료된 것이다 !! 💃🕺🏻
(스웨거에 공용IP 주소를 사용하여 접속하여 확인 가능)

배포 1탄 - EC2, RDS 생성

profile
도여줄게 완전히 도라진 나

0개의 댓글