본문 바로가기

Back-end (Spring Boot , JPA, JSP)/필기일지

240115 [Back-end] Spring Boot 배포 / 로컬 Docker 배포 / AWS 배포

반응형

[24.01.15]  106차

 

<<진도>>

[Back-end] Spring Boot 배포

 / 로컬 Docker 배포

 / AWS 배포

 

<<오늘의 팁>>

- Bash나 터미널에서 붙여넣기 단축키는

shift + insert

 

- aws 인스턴스에서 설치된 파일 보기

sudo rpm -qa

sudo rpm -qa | grep java

| grep java : (java가 들어간 것만 조건걸기)

 

- if. 잘못된 JAVA 버전을 설치했을 경우

삭제 후 다시 설치

sudo yum remove java-(version)

 

- 현재 docker의 모든 컨테이너 이미지 일괄 삭제

docker system prune -a

(캐시된 것까지 모두 포함)

 

- 운영체제(OS)에서의 Process(ps)는 의미가 여러가지인데,

그중 현재 실행중인 프로그램의 의미 <= docker ps의 ps

 

- CMD에서 echo "~~" => ~~ 그대 출력

Spring Boot 배포 (Dockerfile)

 

로컬 Docker 배포

 

배포시 생성 순서

Dockerfile → image → container

(**하나의 image로 여러 container에서 사용가능

 

Spring Boot에서는 내장 jar로 서버실행을하므로 컨테이너에 java설치가 필요하다

(기존 spring에서 톰캣 war에 java가 있었음)

 

 

Dockerfile 생성

https://hub.docker.com/_/openjdk

 

openjdk - Official Image | Docker Hub

Docker Official Images are a curated set of Docker open source and drop-in solution repositories. Why Official Images? These images have clear documentation, promote best practices, and are designed for the most common use cases.

hub.docker.com

 

Tags에서 버전선택

현재 STS4에서 우리가 쓰는 17

 

 

종류에 따라 image용량이 다르다

 

Docker에서의

Linux OS의 실행 파일인 shell .sh 파일 생성

 

## shell script : 리눅스 실행 파일 
## #! : 스크립트 실행할 쉘 지정하는 선언문
## /bin/bash : 명령어 해석기로 bash shell을 쓰겠다 (windows의 cmd같은) 
#!/bin/bash
java -jar demo.jar

 

 

FROM openjdk:17-jdk-slim

## HOME DIR ===========================
## (작업할 위치) 배포 jar 옮겨줄 경로
## 경로가 없을 경우, 생성 후 이동
## 이후 명령어는 WORKDIRECTORY에서 실행
WORKDIR /good

## Copy files
## [문법] COPY 현재파일위치 복사할 위치
## 현재위치 (배포 jar파일 ./은 /good 기준 이름변경가능)
COPY build/libs/demo-0.0.1-SNAPSHOT.jar ./demo.jar

COPY hello.sh ./hello.sh

## RUN 리눅스 명령어
## hello.sh 파일에 실행 권한 추가 chmod(changemod)
RUN chmod +x ./hello.sh

## /good에 hello.sh를 실행하라
ENTRYPOINT [ "sh", "./hello.sh" ]

 

 

*image생성 (첫번째 레이어)

docker build -t demo:1.0 .

 

if. Dockerfile의 이름이 Dockerfile-core  등 다르다면 ! " -f Dockerfile-core " 를 -tag 전에 넣어줘야한다

 

*Container 생성 및 실행

docker run --name demo-1.0 -p 9999:8080 demo:1.0

확인이 가능하다

 

** 로컬 Docker의 컨테이너를 중지하면서 삭제도 하고싶다면

docker run --rm --name demo-1.0 -p 9999:8080 demo:1.0

 

컨테이너 중지 시 컨테이너 삭제도 동시에 실행된다.


 

 

원격 배포 AWS

 

* Git bash 로  원격 repository에 업로드

linux의 bash의 ls 같은 명령어 사용가능

 

git push까지 진행

 

** 만들어놓은 배포용 build폴더와 jar파일은 올라오지않는다 => 서버에서 jar파일 생성이 필요!

 

 

* aws ec2 인스턴스 생성 후 구성요소 설치

더보기

설치

sudo yum install git docker java-17-amazon-corretto

 

docker 실행

sudo service docker start

 

사용자(ec2-user)에게 docker 실행 권한 부여

sudo usermod -a -G docker ec2-user

 

자동 실행 설정

sudo chkconfig docker on

 

docker-compose를 설치하고 

sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

 

 권한부여

sudo chmod +x /usr/local/bin/docker-compose

 

(경로 생성 이동)

깃클론

git clone ~깃주소~

* jar파일을 서버에서 생성

gradlew를 이용하여 jar를 생성해야함

./gradlew bootJar

 

 

그전에 먼저 gradlew에 대한 실행권한을 부여해야 위의 명령이 실행 가능

기존 +x 실행권한이 없는데

chmod +x ./gradlew

권한 생성

 

./gradlew bootJar

 

잘 실행이 되면

build 폴더 생성

 

build - libs 에 jar파일 생성완료

 

* Docker에 image 생성 (local과 동일)

 

docker build -t demo:1.0 .

 

if. Dockerfile의 이름이 Dockerfile-core  등 다르다면 ! " -f Dockerfile-core " 를 -tag 전에 넣어줘야한다

 

*Container 생성 및 실행

docker run --name demo-1.0 -p 9999:8080 demo:1.0

 

* 보안 규칙으로 port를 열고 접속 시

 

접속가능

 


 

Spring Boot 배포 (docker-compose)

 

로컬 Docker 배포

 

docker-compose.yml 생성

docker-compose.yml

 

docker-compose up --build

실행하면 demo-web 컨테이너가 생성되고 로컬 배포 완료

 

 


 

AWS docker-compose 배포

 

생성한 docker-compose.yml을 git 리포지토리에  추가

 

* AWS git 위치에서  git pull 명령실행으로 docker-compose.yml 파일 가져오기

 

* docker-compose 실행 (local과 동일)

docker-compose up --build

=> image 생성 후 Container 생성 실행

 


우리가 만든 image를 docker-hub에 업로드 할 수 있다

Repositories - Create repository

 

Repository를 만들어 관리할 수 있다

 

새 이미지를 생성하고

docker build -t demo:1.0 .

 

docker hub repository에 push하기 위해서는 태그 작업이 필요하다

 

태깅 작업

docker tag demo:1.0 jayom/demo:1.0

[ docker tag 이미지명:태그 (내repository명):태그 ]

 

이름은 다르지만 IMAGE ID가 동일 하므로 같은 이미지 원본이 Repository에 올라간다.

docker push jayom/demo:1.0

Tags에 여러 버전을 관리하게 된다

 

demo:2.0을 만들어도 그대로 같은 ID 이미지가 생성되는데

 

Dockerfile에 변동을 주고 demo:3.0 생성 시

** !! Dockerfile의 변경이 있어야만 다른 아이디가 생성된다.

 

** dockerhub의 이미지를 pull해오기

docker pull jayom/demo:1.0

 

=> 불러오면 기존 이미지와도 ID가 동일하다

 

** : tag를 붙이지 않고 demo . 으로 이미지를 생성하면 demo:latest가 된다.

(latest는 하나밖에 존재 할 수 없기 때문에) 

:latest를 :버전으로 tag demo demo:5.0해주고 => demo로 빌드해주면 이전 latest가 5.0이 된다.

반응형