이번에 studyground ver 2 업그레이드를 시키며 가장 먼저 진행 중인 것 중 하나가 CI / CD 제대로 하기이다.
Docker와 Github Action 을 통해 배포하기로 하였는데 이번에서야 드디어 Docker와 GitHub Action의 역할들을 이해하게 되었다. 이 역할을 이해하는데는 드림코딩님의 영상이 매우 큰 도움이 되었다!
Docker 이해하기
⚓ Docker 배포하기
✔️배포 전 작업
Docker 가입 / Docker Download
그리고 docker 이미지를 만들 프로젝트가 있어야 한다.
✔️ Dockerfile 생성
1. 프로젝트 루트 경로에 `Dockerfile` 생성
✨ 파일의 위치가 매우 중요하다. 파일은 꼭 spring boot 프로젝트의 루트 경로에 위치해야 한다!
2. 내용 작성하기
# 기본 이미지로 OpenJDK 11의 JDK 버전을 사용
FROM openjdk:11-jdk
# 빌드 과정에서 생성된 JAR 파일을 참조하는데 사용할 ARG (인자) 선언
ARG JAR_FILE=build/libs/*.jar
# JAR 파일을 Docker 이미지 내부의 'app.jar'로 복사
COPY ${JAR_FILE} app.jar
# 컨테이너가 시작될 때 실행될 명령 정의
ENTRYPOINT ["java", "-Dspring.profiles.active=docker", "-jar", "app.jar"]
3. build.gradle 파일에 내용 추가
✨ Boot 2.5v 이후 설정 추가 해줘야 jar 파일 2개 생성되지 않음
jar {
enabled = false
}
4. jar 파일 build
이전에 빌드된 모든 파일을 삭제하여 새로운 빌드가 이전 빌드의 산출물에 영향을 받지 않도록하고 JAR 파일을 생성하고 빌드하는 프로세스 중에 테스트 실행을 건너뛰도록 지시한다.
$ ./gradlew clean build -x test
build 파일 내부 jar 파일 생성된 것을 확인 할 수 있다.
✔️ Docker 이미지 build , push 그리고 run
※ 이미지 생성은 Dockerfile이 위치한 곳에서 작업해야 한다.
나는 cd 명령어로 파일 위치를 찾아 가다 실수를 잘 하기 때문에 보통 폴더 위치에서 CLI 창을 열거나 보통은 IntelliJ 에서 제공하는 터미널 창에서 진행한다. 이번에도 마찬가지로 인텔리제이 터미널 창에서 진행하였다.
1. 도커 허브에 푸쉬를 위해 로그인
- username이 있으면 Password로 넘어가고 로그인에 성공하면 Login Succeeded가 나온다.
( ✨ password가 떴을 때 입력해도 아무것도 나오지 않는 게 정상이다. 아무것도 안 보여도 입력되고 있는 것이니 걱정하지 않아도 된다.)
- 소셜 계정으로 로그인 했을 경우에도 username 은 docker로그인 시 뜨는 이름이 username이니 걱정하지 말고 작성하면 된다.
docker login -u [your_dockerhub_username]
Password:
2. Docker 이미지 빌드
- Dockerfile이 있는 경로에서 이미지를 빌드한다.
$ docker build -t [your_dockerhub_username]/[your_image_name]:[your_tag] .
🚨 문제 발생
COPY 명령이 실행될 때 Docker가 지정된 경로에서 JAR 파일을 찾을 수 없다는 에러가 발생하였다.
문제를 확인 해보니 jar 파일의 경로가 잘못 설정되어 있었는데 builds/libs/*.jar로 해놓았던 것이 문제였다. s를 붙여놓아서 발생한 문제였다. s를 빼고 build/libs/*.jar 로 수정 후 빌드 성공!
3. Docker 이미지 빌드 확인
$ docker images
4. Docker 이미지 push
$ docker push [your_dockerhub_username]/[your_image_name]:[your_tag]
5. Docker 이미지 확인
6. Docker에서 배포하기 위해 환경변수 설정하기
Docker에서 배포를 하기 위해서 환경설정을 직접 설정 해주거나 아니면 명령어로 변수를 입력해주는 방법이 있다. 일일이 변수를 입력해주는 것은 번거로우니 .env 파일로 환경변수를 설정해주었다.
환경변수 파일도 root 파일에 위치해야한다. 그리고 가장 중요한 것 .gitignore 를 잘 시켜주어야 한다.
7. Docker run 하기
docker run -p 8080:8080 --env-file .env [your_dockerhub_username]/[your_image_name]:[your_tag]
8. 테스트
📖 참고 자료
'DevOps' 카테고리의 다른 글
[DevOps] 스케일 아웃(Scale-out)과 스케일업(Scale-up) / 로드밸런싱이란? (0) | 2024.01.31 |
---|---|
DevOps(Development and Operations)란? DevOps와 클라우드 (0) | 2024.01.29 |
클라우드 컴퓨팅이란? 장점과 유형 (0) | 2024.01.15 |
[AWS] AWS Pipeline을 통한 배포 자동화 / 문제 해결 : is not authorized to perform: iam:createrole on resource (1) | 2023.07.29 |
[Docker] Window11 Docker desktop 설치하기 (0) | 2023.07.24 |