Information Security Study
240709 도커 이미지 배포로 전환하기 본문
도커 이미지 배포로 전환하기
배포 프로세스
1) 사용자가 깃허브에 push
2) push를 감지한 깃허브는 젠킨스 서버에 webhook 요청을 보낸다.
3) 젠킨스 서버는 해당 깃허브 레포지토리에 업로드된 코드를 이미지로 만든 후 도커허브에 업로드한다.
4) 해당 코드들을 배포 인스턴스들이 pull해서 이미지를 갱신한다.
5) 갱신된 이미지로 컨테이너를 생성해 배포를 한다.
이번 실습에서는 3, 4, 5번을 했다.
젠킨스 서버에서 이미지화를 해야 하기 때문에 젠킨스 서버 내부에 도커를 설치해야 한다. (설치 절차 노션 참고)
젠킨스 브라우저 접속 전 ssh 로 도커 설치 및 로그인을 해야 한다.
젠킨스 서버를 킨 후 접속, 새 아이템 생성
docker 명령어로 도커가 설치되었는지 확인
빌드 후 콘솔을 확인하면 젠킨스 서버가 도커 명령어를 인식한다. 설치가 잘 된 것이다.
원격 레포지토리인 깃허브에 있는 프로젝트를 빌드해서 이미지화를 해 볼 것이다.
이미지화를 위해 연동을 한다.
소스코드 관리를 깃허브에서 하도록 git 옵션을 선택하고
이미지화할 원격 레포지토리의 주소를 작성한다.
빌드 전 위 명령어로 권한을 줘야 한다.
에러가 나서 위 파일에 대한 권한을 줬다.
이미지를 빌드하고
빌드된 이미지를 조회하는 명령어이다.
로컬에서는 애플리케이션 내부에 target 폴더가 있는데 gitignore 때문에 업로드 되지는 않는다.
그래서
chmod 544 ./gradlew
./gradlew clean build
로 먼저 빌드를 해서 target 폴더를 생성해야 한다.
이미지가 조회되었다.
위 결과는 로컬에 있는 이미지들이다.
로컬에서 도커허브로 업로드를 해야 도커허브에서 조회할 수 있다.
도커허브에 이미지를 업로드를 하기 전에
docker login을 해야 한다.
하지만 스크립트에 직접 docker login으로 아이디, 비밀번호를 입력하는 것은
보안상 좋지 않기 때문에 credentail 탭에서 인증 정보를 저장해 사용할 것이다.
add credentials로 생성한다.
생성 완료
그리고 빌드 환경에서 use secret test(s) or file(s)를 선택한다.
그리고나서 방금 생성한 credentail을 사용한다.
# 이미지 빌드
docker build -t 도커계정명/저장소명 .
# 도커허브에 빌드한 이미지를 업로드하기 위한 로그인(등록한 Credential 사용)
echo $PASSWORD | docker login -u $USERNAME --password-stdin
# 도커허브에 업로드
docker push 도커계정명/저장소명
# 원격저장소에 업로드된 이미지 로컬에서 삭제
docker rmi 도커계정명/저장소명
빌드 스크립트는 위와 같이 수정한다.
빌드하면 도커허브에 이미지 업로드(push) 후 로컬에서 삭제된 것을 볼 수 있다.
도커허브에 업로드되었다.
이제는 도커허브에 업로드된 이미지를 개별 cpu에서 끌어와 배포할 것이다.
# 가동중인 도커 컨테이너 중단 및 삭제
sudo docker ps -a -q --filter "name=[이름]" | grep -q . && docker stop [이름] && docker rm [이름] | true
# 기존 이미지 삭제
sudo docker rmi 계정명/레포명
# 도커허브 이미지 pull
sudo docker pull 계정명/레포명
# 도커 run
docker run -d -p 8080:8080 --name [이름] 계정명/레포명
# 사용하지 않는 불필요한 이미지 삭제 -> 현재 컨테이너가 물고 있는 이미지는 삭제되지 않는다.
docker rmi -f $(docker images -f "dangling=true" -q) || true
배포 인스턴스 1, 2에도 도커를 설치해줬다.
docker.sock의 권한도 젠킨스 서버와 동일하게 변경해 준다.
그리고 빌드 후 조치에서 인스턴스 1, 2를 추가하고 위 명령을 작성한다.
빌드 성공
배포용 인스턴스의 공개 ip, nginx ip로도 모두 접속이 잘 된다!
롤링 배포를 하려면 2번 인스턴스에 sleep을 주면 된다.
'네트워크 캠퍼스 > NHN클라우드-Jenkins' 카테고리의 다른 글
240711 ~ 12 파이프라인으로 배포 고도화하기, 스크립트로 CI/CD 실습하기(롤백 트러블슈팅) (0) | 2024.07.12 |
---|---|
240710 젠킨스 파이프라인 사용하기 (0) | 2024.07.10 |
240702 webhooks로 자동 배포하기(이어서), 아틸러리로 스트레스 테스트하기, Nginx로 무중단배포 스크립트 작성하기 (0) | 2024.07.02 |
240701 백그라운드 실행으로 다중 인스턴스 배포하기, webhooks로 자동 배포하기 (0) | 2024.07.01 |
240628 NHN클라우드 젠킨스 실습, 젠킨스에서 빌드한 파일 배포 (0) | 2024.06.28 |