spring-boot 도커로 배포하기
업데이트: Link
GitLab runner 를 통해 도커로 자동 배포 설정하기
gitlab CI/CD 기능을 통한 자동 배포를 활용하는 방법중 자동으로 도커배포 하는 방법을 남겨 놓는다.
프로젝트 DockerFile 설정하기
도커파일로 생성할 수 있도록 DockerFile
파일을 생성해서 수정한다.
FROM openjdk:17-alpine
RUN addgroup -S spring && adduser -S spring -G spring
USER spring:spring
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-Dspring.profiles.active=${USE_PROFILE}", "-jar", "/app.jar"]
🎈 중요: 도커 실행시 스프링 프로파일을 활용할 수 있도록 ENTRYPOINT
설정에 ${USE_PROFILE}
변수를 활용하여 설정 했다. 이 외에도 jdk 버전등의 옵션 정보를 자신에게 맞게 설정해야 한다.
배포될 서버 설정
gitlab 서버가 아닌 gitlab 의 CI/CD를 이용해 배포되는 목표 서버에 해야 할 작업이다.
Docker 설치
Install Docker Engine on Ubuntu 페이지를 참고 하여 도커를 설치한다. OS 별로 설치 방법이 다르지만 도커 문서를 따라가기만 해도 쉽게 설치가 가능하다.
도커 설치가 가능한 우분투 버전이 존재 하니 이 부분은 반드시 미리 확인해 두자.
- Ubuntu Jammy 22.04 (LTS)
- Ubuntu Impish 21.10
- Ubuntu Focal 20.04 (LTS)
- Ubuntu Bionic 18.04 (LTS)
gitlab-runner 설치
배포하고자 하는 프로젝트의 설정
➡ CI/CD
페이지로 이동한다.
Runner 항목의 메뉴를 클릭해 상세 내용을 볼 수 있다.
버튼을 클릭하면 각 OS별 설치 스크립트를 확인하여 설치할 수 있다. 이때 registration token
내용은 gitlab-runner 등록시 필요하다.
내가 필요한 설치 스크립트는 다음과 같다.
# Download the binary for your system
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
# Give it permission to execute
sudo chmod +x /usr/local/bin/gitlab-runner
# Create a GitLab Runner user
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
# Install and run as a service
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start
gitlab-runner 등록
gitlab-runner 설치가 끝났다면 이제 필요한 runner를 등록한다. 이때 빌드에 필요한 runner를 (보통은 docker runner) 등록하고 도커를 등록 및 실행할 shell-runner를 등록해 주어야 한다. 다음은 shell-runner 를 등록하는 예제 코드이다.
⚠ 이 페이지에서는 도커빌드 관련한 내용은 언급하지 않는다.
# shell runner
sudo gitlab-runner register -n \
--url "http://{your_gitlab_domain}/" \
--registration-token "{your_registration_token}" \
--executor "shell" \
--description "shell-runner" \
--tag-list "shell-runner,{your_tags}"
GitLab 서버 설정
배포될 서버의 설정은 대충 마무리 했으니 깃랩 서버에서 어떻게 설정해야 하는지 알아보자.
🔧 설정: 이때 gitlab-ee 사용자는 gitlab-ee container registry
설정이 되어있어야 한다.
설정되어 있지 않다면 GitLab Container Registry administration 페이지를 참고하여 설정해 주어야 한다.
GitLab runner 등록 확인
프로젝트에서 gitlab-runner
등록이 잘 되었는지 확인해 본다. gitlab-runner
설치를 위해 들어갔던 프로젝트의 설정
➡ CI/CD
페이지로 다시 이동한다.
Runner 항목의 메뉴를 클릭해 위에서 등록한 gitlab-runner
가 잘 등록되었는지 확인해 본다.
(위에서 열어두었다면 새로고침해 준다.)
잘 등록되었다면 위와 같은 모양으로 등록된 runner가 보인다.
CI 설정으로 배포
gitlab-ci를 활용하여 배포하기 위한 설정을 추가한다.
변수 설정
이때 container-registry
영역을 이용하기 때문에 container-registry
로그인 정보도 변수로 함께 설정 해 주어야 한다.
- CI_REGISTRY_PASSWORD
- CI_REGISTRY_USER
배포하고자 하는 프로젝트의 설정
➡ CI/CD
페이지로 이동한다.
Variables 항목의 버튼을 클릭하여 다음과 같이 설정한다.
CI config
배포를 위해 .gitlab-ci.yml
파일을 만들거나 수정한다. 이때 variables
항목을 자신에게 맞추어 수정해야 한다. 그 외에도 스프링 부트에 사용되는 프로파일이나 서버 포트 등을 자신에게 맞게 수정한다.
🐦 참고: gitlab 프로젝트 페이지에서 CI/CD
➡️ Editor
메뉴로 이동하여 직접 수정도 가능하다.
stages:
- build
- deploy
variables:
DOCKER_REGISTRY: "registry.your-repo.com:5050"
DOCKER_IMAGE_NAME: "registry.your-repo.com:5050/your-group-or-name/your-project/your-image-name"
APP_NAME: "your-image-name"
before_script:
- echo "Run pipeline - $GITLAB_USER_LOGIN! $CI_COMMIT_BRANCH"
- echo "$CI_REGISTRY_PASSWORD" | docker login "$DOCKER_REGISTRY" --username "$CI_REGISTRY_USER" --password-stdin
build:
stage: build
script:
- echo "Start building ApiApp"
- ./gradlew clean build
- docker build -t "$DOCKER_IMAGE_NAME":latest .
- docker push "$DOCKER_IMAGE_NAME":latest
tags:
- shell-runner
deploy:
stage: deploy
script:
- (if [ "$(docker ps -a | grep "$APP_NAME")" ]; then docker stop "$APP_NAME" && docker rm "$APP_NAME" && docker image tag "$DOCKER_IMAGE_NAME":latest "$DOCKER_IMAGE_NAME":backup && docker rmi "$DOCKER_IMAGE_NAME":latest ; fi);
- docker pull "$DOCKER_IMAGE_NAME"
- docker run -p 8100:8100 -d --restart always -e USE_PROFILE=prod --name "$APP_NAME" "$DOCKER_IMAGE_NAME":latest
tags:
- shell-runner
needs: [build]
댓글남기기