인프라(Infrastructure)/Docker

업무에서 Docker 컨테이너 런타임 경험기

라이언 IT 2024. 1. 14. 15:29

현재 내가 담당하는 시스템은 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 구조 파악.