업무에서 Docker 컨테이너 런타임 경험기
현재 내가 담당하는 시스템은 MSA 설계로 쿠버네티스(k8s)로 여러 컨테이너를 오케스트레이션 하고 있다.
하지만 이미 구축된 시스템을 운영하고 있기에 자세한 내부 기동 프로세스는 알지 못했다.
이번에 운 좋게도(?) 관련 개선 건이 오지 않았다면 말이다.
개선 건 내용은 이랬다.
[개선 사항]
Mission. 특정 컨테이너에 설치된 메시지 전송 모듈을 교체하라.
해당 모듈을 start/status/stop 만 했었기에 교체 작업에 대해 막막했다.
대략적으로 컨테이너에 기존 모듈을 지우고,
신규 모듈 설치 및 config 설정 파일 변경하여 개발/운영 테스트 시나리오를 구상했다.
1. 구조 파악하기
- 특정 컨테이너 원본 이미지(Docker) 위치 파악 -> (habor repository)
- Docker file 분석
: 원본 이미지 경로에서 이미지 가져오기
: 추가 실행 명령어
- Jenkins file 분석
: Docker Image 위치 변경 및 생성 배포
2. 교체 모듈 테스트
- 교체 모듈 관련 파일 File Copy(kebectl 명령어 사용)
: 대상 파일 : 신규 모듈, 모듈 인증서
: 명령어 : k cp -n 'namespace' --kubeconfig 'config file' '복사파일' '목적지 경로'
: 예시) k cp -n blog-test --kubeconfig c:\test.config testfile test-base-pod:/TEST/cert/testfile
- 테스트 환경 세팅
: DB Connection 정보 변경
: 메시지 전송 테이블 현행화
: 메시지 전송 프로시저 현행화
- 메시지 전송 테스트 및 로그 테이블 확인
3. 신규 이미지 빌드
- Docker file 작성 (별도 Docker Image 빌드용 Project 생성)
: 신규 메시지 모듈 추가 -> ADD ./TEST /TEST/
: 신규 명령어 추가 -> RUN chmod -R 755 /TEST
-> 이미지를 배포 시 Permission denied 되어 명령어를 추가했다.
4. 배포
- Jenkins file 작성 및 배포
- habor repository 에서 신규 Image 확인
이번 작업을 하면서 난관이 있었던 부분은 빨간색으로 표시했다.
또한 아래 사항을 경험할 수 있었고, 추가적으로 공부해야 할 부분이기도 했다.
1. Docker image 를 가져와서 Customizing 하여 재빌드 과정.
2. k8s 명령어로 컨테이너 조작.
3. 메시지 전송 모듈 구조 파악.
4. Jenkins 구조 파악.