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. 이미지 확보 및 캐싱 전략
- 필요 이미지 식별: 실행할 컨테이너의 정확한 이름과 태그(예:
nginx:stable-alpine)를 확정합니다. - 도커 풀: 필요한 이미지를 로컬로 다운로드합니다.
docker pull [이미지명]:[태그]
2. 이미지 파일 추출 및 전송 준비 (Docker Save 사용)
- 가장 간편한 방법:
docker save를 사용하여 이미지를 단일.tar파일로 만듭니다.# 예시: nginx 이미지를 tar 파일로 저장 docker save -o nginx_image.tar nginx:latest - 팁 (skopeo 사용):
skopeo는 레지스트리나 로컬에서 이미지를 복사/검사하는 데 유용하며, 폐쇄망 전송 시 이미지 레이어의 무결성을 점검하는 데 사용될 수 있습니다.
3. 물리적 전송 매체 활용
- 생성된
.tar파일을 USB 또는 외장 하드에 복사합니다. - 보안 검증: 가능한 경우, 이 파일의 해시 값(SHA256)을 기록하여, 폐쇄망 진입 후 파일이 변조되지 않았는지 검증할 근거를 남깁니다.
III. 🔴 2단계: 폐쇄망 Red Hat 환경 (Deployment Phase)
(이 단계는 인터넷 연결이 완전히 차단된 폐쇄망 서버에서 진행합니다.)
1. 시스템 준비 및 환경 점검
- containerd 설치 확인: 운영체제 레포지토리에서
containerd가 이미 설치되어 있는지 확인합니다. (설치가 안 되었다면, 이 서버가 어떤 경로로 패키지를 받았는지 명확히 기록해야 합니다.)sudo dnf install containerd.io - 서비스 시작:
containerd서비스를 실행합니다.sudo systemctl start containerd
2. 로컬 이미지 주입 (Load Image)
폐쇄망에서 containerd에게 “이 파일이 이미지다”라고 알려주어 로컬 스토리지를 채워야 합니다.
- 파일 이동: USB 드라이브에서
nginx_image.tar파일을 서버 내부의 접근 가능한 디렉토리로 옮깁니다. - 이미지 로드 (Import):
ctr도구를 사용하여 Tarball 파일을 컨테이너 내부 레지스트리로 가져옵니다.# 형식: ctr image import <경로/이미지파일명.tar> sudo ctr image import /mnt/usb/nginx_image.tar
3. 컨테이너 실행 및 테스트
- 컨테이너 생성 및 실행: 로컬에 로드된 이미지를 사용하여 컨테이너를 실행합니다.
# ctr run [이미지 식별자] # 주의: 이미지 식별자(Image Digest)는 로딩 후 출력을 통해 확인해야 합니다. sudo ctr run [로컬 이미지 Digest 또는 이름] - 실행 확인: 서버의 방화벽 및 네트워킹 정책에 따라 포트 포워딩 작업이 필요할 수 있습니다.
IV. 🔵 2단계: 폐쇄망 Windows 환경 (WSL2 기반)

(Windows 환경에서는 반드시 WSL2 리눅스 가상 환경 내에서 Linux 명령을 사용합니다.)
1. WSL2 환경 설정 및 점검
- WSL2 설치: Windows에 WSL2를 설치합니다.
- 진입: WSL2 내부의 리눅스 터미널 (예: Ubuntu 터미널)로 진입합니다.
- 준비: 필요한 도구(
containerd.io,docker-ce등)를 WSL2 내부에서 설치하고 서비스를 활성화합니다.
2. 로컬 이미지 주입 (Load Image)
- 파일 경로 확인: WSL2 환경 내부에서 USB 드라이브가 마운트된 정확한 경로를 확인합니다. (예:
/media/usb/) - 이미지 로드: WSL2 내부의 터미널에서 Linux 명령어를 그대로 사용합니다.
# 이미지 로딩 명령어 (WSL 내부에서 실행) sudo ctr image import /mnt/usb/nginx_image.tar
3. 컨테이너 실행 및 테스트
- 컨테이너 실행: 로컬로 주입된 이미지를 사용하여 컨테이너를 실행합니다.
# (WSL 내부) 컨테이너 실행 sudo ctr run [로컬 이미지 Digest 또는 이름]
V. 공통 컨테이너 운영 실습 (폐쇄망 환경)
| 작업 | 명령어 예시 | 설명 |
|---|---|---|
| 상태 확인 | sudo ctr images |
로컬에 저장된 모든 이미지 목록을 확인합니다. |
| 실행 확인 | sudo ctr pods |
현재 실행 중인 컨테이너 목록을 확인합니다. |
| 로그 확인 | docker logs <container_id> |
컨테이너 내부의 로그를 확인하여 문제점을 진단합니다. |
| 삭제 | docker rm <container_id> |
중지된 컨테이너를 삭제하여 리소스를 확보합니다. |
⚠️ 중요 주의사항: 폐쇄망 환경에서는
docker나containerd같은 컨테이너 런타임 자체의 바이너리 및 종속 라이브러리(Runtime Dependencies)도 미리 확보하고 시스템에 배포해야 정상 작동합니다.