[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가 있었음)
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
현재 STS4에서 우리가 쓰는 17
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에 업로드
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에 대한 실행권한을 부여해야 위의 명령이 실행 가능
chmod +x ./gradlew
./gradlew bootJar
잘 실행이 되면
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 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에 업로드 할 수 있다
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
demo:2.0을 만들어도 그대로 같은 ID 이미지가 생성되는데
** !! 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이 된다.
'Back-end (Spring Boot , JPA, JSP) > 필기일지' 카테고리의 다른 글
240118 [Back-end] git / github / Source Tree 소스트리 (0) | 2024.01.18 |
---|---|
240116 [Back-end] CLI, GUI / Source Tree 소스트리 / git / github (0) | 2024.01.16 |
240112 [Back-end] Spring Boot/ STS 4 설치/ Spring Boot build 빌드 (1) | 2024.01.13 |
231129 [Back-end] JSP/ EL 내장 객체 (0) | 2023.11.29 |
231128 [Back-end] JSP/ 과제풀이 (JSP)/ 지시자 include/ 액션태그 (include, forward, param, bean) (0) | 2023.11.28 |