이전 게시글에서 배포 과정을 기록했지만 해당 파이프라인에는 이미지 백업에 대한 내용이 없는 상태다.
아래가 현재 진행되는 프로세스의 순서다.
- 새로운 이미지 생성
- 기존 이미지 삭제
- 기존 컨테이너 삭제
- 새로운 컨테이너 생성
만약에 4번에서 문제가 발생한다면? 기존 이미지도 삭제됐기에 배포가 불가능한 이미지가 남는 문제가 발생한다.
그래서 이전 이미지를 백업하는 방법을 고민하게 되었다.
가장 고민이었던 게 이미지 하나의 크기가 400MB가 된다.
이게 여러 개 쌓이면 진짜 테라까지 갈 수 있다는 생각에 도커에 저장해 두는 방식은 불가능하다고 판단했다. 그래서 도커 허브를 사용하기로 결정했다.
도커 허브
도커 허브는 컨테이너 이미지의 원격 저장소이다. 도커 컨테이너의 이미지를 빌드하고 저장하고 공유할 수 있는 중앙 저장소로 사용할 수 있다.
나도 도커 허브를 이용해서 이미지를 저장해놓고 백업으로 사용하려고 한다.
아래처럼 private으로 하나 만들어서 나만 사용하도록 생성.
이제 기존 파이프라인에 도커 허브에 대한 내용을 추가해줘야 한다.
먼저 도커 허브용 Credentials를 하나 추가한다.
username에는 본인의 도커허브 아이디, password에는 비밀번호를 입력해 준다.
이후 파이프라인에 로그인, 도커허브 푸시, 이전 이미지 삭제 과정을 추가해야 한다.
우선 파이프라인의 환경변수는 아래처럼 설정했다.
environment {
DOCKER_HUB_CREDENTIALS_ID = 'restapiDockerhub'
DOCKER_HUB_REPO = 'qkrrlgus114/restapi'
}
위에서 생성했던 Credentials_id와 repo의 이름을 설정해 주었다.
1. 로그인
도커허브를 사용하기 위해서는 먼저 도커허브에 로그인을 진행해서 권한을 얻어야 한다.
stage('login to Docker Hub') {
steps {
script {
withCredentials([usernamePassword(credentialsId: "${DOCKER_HUB_CREDENTIALS_ID}", usernameVariable: 'DOCKER_USERNAME', passwordVariable: 'DOCKER_PASSWORD')]) {
sh "echo $DOCKER_PASSWORD | docker login -u $DOCKER_USERNAME --password-stdin"
}
}
}
}
credentialsId로 우리의 도커 허브 권한을 넣고 DOCKER_USERNAME, DOCKER_PASSWORD로 이름과 패스워드를 지정해 준다. 해당 명령어는 도커 자체의 환경변수이다.
docker login -u {아이디} 명령어로 도커 허브에 로그인을 진행할 수 있다.
2. 도커 허브 푸시
stage('push to Docker Hub') {
steps {
script {
dockerImage.push("${BUILD_NUMBER}")
}
}
}
BUILD_NUMBER 환경변수를 이용해서 오토인크리먼트처럼 숫자를 태그로 이용한다.
그럼 아래처럼 태그가 증가한다.
3. 기존 이미지 삭제
stage('cleanup old images') {
steps {
script {
sh 'docker rmi ${DOCKER_HUB_REPO}:$(($BUILD_NUMBER - 1))'
}
}
}
도커에 400mb가 이미지가 쌓이면 아무래도 용량 부족함이 발생할 수 있다. 기존 백업 이미지는 도커허브로 올려놨기에 도커에 존재하는 이미지는 삭제를 진행한다.
해당 백업 과정을 추가해서 총 9단계의 파이프라인을 구성했다.
이렇게 따로따로 구분하면 유지보수 측면에서 좋을 것이라 판단해서 작업별로 스테이지를 나눴다.
'프로젝트 > RESTAPI 추천 서비스' 카테고리의 다른 글
naver 소셜 로그인 추가하기(feat, 리팩토링) (0) | 2024.07.01 |
---|---|
확장성이 좋은 oauth 코드로 리팩토링하기 (0) | 2024.06.27 |
배포를 위해 진행했던 도커와 젠킨스 정리 (0) | 2024.06.21 |
서비스 내에서 발생하는 쿼리를 분석하고 개선하기 (0) | 2024.06.12 |