🚫 폐쇄망 환경을 위한 containerd 사용 가이드

I. 개요 및 필수 준비 사항

1. containerd의 역할 재정립

  • containerd는 컨테이너의 실행 엔진(Runtime) 그 자체입니다.
  • 폐쇄망 환경에서는 외부 레지스트리(Docker Hub 등)에 접속할 수 없으므로, 사전에 필요한 이미지를 파일 형태로 확보하여 내부 로컬 저장소에 수동으로 주입(Load)해야 합니다.

2. 폐쇄망 환경의 특성 이해 (매우 중요)

  • 핵심 제한: 인터넷 접속 불가.
  • 작업 흐름: 모든 작업은 ① 인터넷 연결 환경에서 이미지 파일을 다운로드하고 ② 이 파일을 **물리적 매체(USB, 외장 하드)**를 통해 ③ 폐쇄망 내부로 옮겨서 실행해야 합니다.
  • 도구: 로컬 파일 시스템과 containerd의 CLI 도구(ctr 또는 crictl)를 사용합니다.

3. 전제 조건: 이미지 확보 및 전송 (준비 작업)

구분 내용 사용 도구 비고
이미지 Pull 실행할 컨테이너의 이미지를 인터넷 환경에서 다운로드합니다. docker pull 기본 작업
이미지 저장 다운로드한 이미지를 Portable Archive 파일 형태로 만듭니다. docker save 또는 skopeo 이 파일이 물리적 전송 대상입니다.
이미지 전송 Archive 파일을 USB 등을 이용해 폐쇄망으로 옮깁니다. USB Drive 전송 과정에서 파일 무결성을 확인해야 합니다.

II. 🌐 1단계: 인터넷 접속 가능한 환경 (Preparation Phase)

(이 단계는 반드시 인터넷에 연결된 준비용 워크스테이션에서 진행합니다.)

1. 이미지 확보 및 캐싱 전략

  1. 필요 이미지 식별: 실행할 컨테이너의 정확한 이름과 태그(예: nginx:stable-alpine)를 확정합니다.
  2. 도커 풀: 필요한 이미지를 로컬로 다운로드합니다.
    docker pull [이미지명]:[태그]
    

2. 이미지 파일 추출 및 전송 준비 (Docker Save 사용)

  • 가장 간편한 방법: docker save를 사용하여 이미지를 단일 .tar 파일로 만듭니다.
    # 예시: nginx 이미지를 tar 파일로 저장
    docker save -o nginx_image.tar nginx:latest
    
  • 팁 (skopeo 사용): skopeo는 레지스트리나 로컬에서 이미지를 복사/검사하는 데 유용하며, 폐쇄망 전송 시 이미지 레이어의 무결성을 점검하는 데 사용될 수 있습니다.

3. 물리적 전송 매체 활용

  1. 생성된 .tar 파일을 USB 또는 외장 하드에 복사합니다.
  2. 보안 검증: 가능한 경우, 이 파일의 해시 값(SHA256)을 기록하여, 폐쇄망 진입 후 파일이 변조되지 않았는지 검증할 근거를 남깁니다.

III. 🔴 2단계: 폐쇄망 Red Hat 환경 (Deployment Phase)

(이 단계는 인터넷 연결이 완전히 차단된 폐쇄망 서버에서 진행합니다.)

1. 시스템 준비 및 환경 점검

  1. containerd 설치 확인: 운영체제 레포지토리에서 containerd가 이미 설치되어 있는지 확인합니다. (설치가 안 되었다면, 이 서버가 어떤 경로로 패키지를 받았는지 명확히 기록해야 합니다.)
    sudo dnf install containerd.io
    
  2. 서비스 시작: containerd 서비스를 실행합니다.
    sudo systemctl start containerd
    

2. 로컬 이미지 주입 (Load Image)

폐쇄망에서 containerd에게 “이 파일이 이미지다”라고 알려주어 로컬 스토리지를 채워야 합니다.

  1. 파일 이동: USB 드라이브에서 nginx_image.tar 파일을 서버 내부의 접근 가능한 디렉토리로 옮깁니다.
  2. 이미지 로드 (Import): ctr 도구를 사용하여 Tarball 파일을 컨테이너 내부 레지스트리로 가져옵니다.
    # 형식: ctr image import <경로/이미지파일명.tar>
    sudo ctr image import /mnt/usb/nginx_image.tar
    

3. 컨테이너 실행 및 테스트

  1. 컨테이너 생성 및 실행: 로컬에 로드된 이미지를 사용하여 컨테이너를 실행합니다.
    # ctr run [이미지 식별자]
    # 주의: 이미지 식별자(Image Digest)는 로딩 후 출력을 통해 확인해야 합니다.
    sudo ctr run [로컬 이미지 Digest 또는 이름]
    
  2. 실행 확인: 서버의 방화벽 및 네트워킹 정책에 따라 포트 포워딩 작업이 필요할 수 있습니다.

IV. 🔵 2단계: 폐쇄망 Windows 환경 (WSL2 기반)

🚫 폐쇄망 환경을 위한 containerd 사용 가이드

(Windows 환경에서는 반드시 WSL2 리눅스 가상 환경 내에서 Linux 명령을 사용합니다.)

1. WSL2 환경 설정 및 점검

  1. WSL2 설치: Windows에 WSL2를 설치합니다.
  2. 진입: WSL2 내부의 리눅스 터미널 (예: Ubuntu 터미널)로 진입합니다.
  3. 준비: 필요한 도구(containerd.iodocker-ce 등)를 WSL2 내부에서 설치하고 서비스를 활성화합니다.

2. 로컬 이미지 주입 (Load Image)

  1. 파일 경로 확인: WSL2 환경 내부에서 USB 드라이브가 마운트된 정확한 경로를 확인합니다. (예: /media/usb/)
  2. 이미지 로드: WSL2 내부의 터미널에서 Linux 명령어를 그대로 사용합니다.
    # 이미지 로딩 명령어 (WSL 내부에서 실행)
    sudo ctr image import /mnt/usb/nginx_image.tar
    

3. 컨테이너 실행 및 테스트

  1. 컨테이너 실행: 로컬로 주입된 이미지를 사용하여 컨테이너를 실행합니다.
    # (WSL 내부) 컨테이너 실행
    sudo ctr run [로컬 이미지 Digest 또는 이름]
    

V. 공통 컨테이너 운영 실습 (폐쇄망 환경)

작업 명령어 예시 설명
상태 확인 sudo ctr images 로컬에 저장된 모든 이미지 목록을 확인합니다.
실행 확인 sudo ctr pods 현재 실행 중인 컨테이너 목록을 확인합니다.
로그 확인 docker logs <container_id> 컨테이너 내부의 로그를 확인하여 문제점을 진단합니다.
삭제 docker rm <container_id> 중지된 컨테이너를 삭제하여 리소스를 확보합니다.

⚠️ 중요 주의사항: 폐쇄망 환경에서는 docker나 containerd 같은 컨테이너 런타임 자체의 바이너리 및 종속 라이브러리(Runtime Dependencies)도 미리 확보하고 시스템에 배포해야 정상 작동합니다.