본문 바로가기
시스템(Linux)

인터넷 안 되는 리눅스에 Docker 설치하기 (RPM 오프라인 설치)

by forward error correction Circle 2024. 10. 2.
반응형

들어가며

공공기관, 금융권, 군 등 보안이 중요한 환경에서는 인터넷이 차단된 폐쇄망(Offline) 에서 시스템을 운영하는 경우가 많습니다. 이런 환경에서 Docker를 설치하려면 일반적인 yum install docker-ce 같은 방식이 통하지 않아 RPM 패키지를 수동으로 받아 설치해야 합니다.

이 글에서는 Rocky Linux 8 / CentOS 8 기준으로 Docker를 오프라인에서 설치하는 방법과, 설치 중 자주 만나는 의존성 오류·mockbuild 오류를 해결하는 방법을 정리합니다.

💡 이 글의 대상 환경

  • OS: Rocky Linux 8.x / CentOS 8.x
  • 아키텍처: x86_64
  • 인터넷: 폐쇄망 (외부망 격리)

Ⅰ. 설치 흐름 한눈에 보기

[외부망 PC]                          [폐쇄망 서버]
   │                                      │
   ① RPM 다운로드 ──────────────────────→ ② USB/SCP로 전송
                                          │
                                          ③ 의존성 패키지 설치
                                          │
                                          ④ Docker 본체 설치
                                          │
                                          ⑤ 설치 검증 (hello-world)

전체 흐름은 5단계입니다. 핵심은 의존성 패키지를 빠짐없이 챙기는 것이에요.


Ⅱ. Docker 설치 파일 다운로드 (외부망 PC)

1) Docker 공식 저장소에서 RPM 받기

아래 주소에서 OS 버전·아키텍처에 맞는 파일을 다운로드합니다.

🔗 https://download.docker.com/linux/centos/8/x86_64/stable/Packages/

2) 필요한 Docker 패키지 4개

패키지명역할
containerd.io-*.rpm 컨테이너 런타임
docker-ce-*.rpm Docker 엔진 본체
docker-ce-cli-*.rpm Docker CLI 도구
docker-ce-rootless-extras-*.rpm rootless 실행 지원

예시 (2024년 기준)

containerd.io-1.6.32-3.1.el8.x86_64.rpm
docker-ce-26.1.3-1.el8.x86_64.rpm
docker-ce-cli-26.1.3-1.el8.x86_64.rpm
docker-ce-rootless-extras-26.1.3-1.el8.x86_64.rpm

⚠️ 주의: .src.rpm이 아닌 .x86_64.rpm (바이너리) 를 받아야 합니다. .src.rpm은 소스 파일이라 별도 빌드 과정이 필요합니다.

3) 폐쇄망 서버로 파일 전송

USB, SCP, sFTP 등을 이용해 위 파일들을 폐쇄망 서버의 작업 디렉터리(예: /root/docker_install)로 복사합니다.


Ⅲ. Docker 설치 시도 및 의존성 오류 해결

1) 첫 설치 시도

 
cd /root/docker_install

rpm -ivh containerd.io-1.6.32-3.1.el8.x86_64.rpm \
         docker-ce-26.1.3-1.el8.x86_64.rpm \
         docker-ce-cli-26.1.3-1.el8.x86_64.rpm \
         docker-ce-rootless-extras-26.1.3-1.el8.x86_64.rpm

2) 의존성 오류 발생

폐쇄망에서는 다음과 같은 오류를 거의 100% 만나게 됩니다.

warning: containerd.io-1.6.32-3.1.el8.x86_64.rpm: 
         Header V4 RSA/SHA512 Signature, key ID 621e9f35: NOKEY

error: Failed dependencies:
   container-selinux >= 2:2.74 is needed by containerd.io-1.6.32-3.1.el8
   container-selinux >= 2:2.74 is needed by docker-ce-3:26.1.3-1.el8
   libcgroup is needed by docker-ce-3:26.1.3-1.el8
   fuse-overlayfs >= 0.7 is needed by docker-ce-rootless-extras-0:26.1.3-1.el8
   slirp4netns >= 0.4 is needed by docker-ce-rootless-extras-0:26.1.3-1.el8

해석: Docker가 동작하려면 다음 4개 의존성 패키지가 추가로 필요하다는 의미입니다.

의존성 패키지역할
container-selinux 컨테이너 SELinux 정책
libcgroup 리소스 제어 라이브러리
fuse-overlayfs 오버레이 파일시스템
slirp4netns rootless 네트워크

3) 의존성 패키지 추가 다운로드 (외부망 PC)

🔗 https://download.rockylinux.org/pub/rocky/8/

다음 파일들을 받아 폐쇄망 서버로 전송합니다.

container-selinux-2.229.0-2.module+el8.10.0+1843+6892ab28.noarch.rpm
libcgroup-0.41-19.el8.x86_64.rpm
fuse-overlayfs-1.9-1.module+el8.8.0+1325+0a14cb27.x86_64.rpm
slirp4netns-1.2.0-2.module+el8.8.0+1325+0a14cb27.x86_64.rpm

⚠️ 반드시 .x86_64.rpm 또는 .noarch.rpm 을 받으세요. .src.rpm은 받지 마세요.

4) 의존성 패키지 먼저 설치

rpm -ivh container-selinux-*.noarch.rpm \
         libcgroup-*.x86_64.rpm \
         fuse-overlayfs-*.x86_64.rpm \
         slirp4netns-*.x86_64.rpm

5) Docker 본체 설치 (재시도)

rpm -ivh containerd.io-*.x86_64.rpm \
         docker-ce-*.x86_64.rpm \
         docker-ce-cli-*.x86_64.rpm \
         docker-ce-rootless-extras-*.x86_64.rpm

성공하면 Verifying... [100%] 메시지가 나옵니다.


Ⅳ. 자주 만나는 오류 트러블슈팅

Case 1. NOKEY 경고

warning: ... Header V4 RSA/SHA512 Signature, key ID 621e9f35: NOKEY

원인: GPG 서명 검증을 위한 키가 없어서 발생
해결: 단순 경고이므로 무시 가능. 실제 설치는 정상 진행됨.
완전 해결: GPG 키도 함께 설치하려면

rpm --import https://download.docker.com/linux/centos/gpg

Case 2. mockbuild 사용자/그룹 오류

warning: user mockbuild does not exist - using root
warning: group mock does not exist - using root

원인: .src.rpm 패키지를 설치하려 할 때 발생. 빌드 환경에 필요한 사용자/그룹이 없어서 생기는 경고.

가장 확실한 해결: .src.rpm이 아닌 .x86_64.rpm 바이너리 패키지를 받기.

그래도 src.rpm을 써야 한다면:

 
groupadd mock
useradd -m -g mock mockbuild

이후 다시 설치를 시도하면 경고가 사라집니다.

Case 3. SELinux 관련 오류

폐쇄망 서버에서 SELinux가 활성화되어 있으면 컨테이너 실행 시 오류가 날 수 있습니다.

 
# SELinux 상태 확인
getenforce

# 임시 비활성화 (재부팅 시 원복)
setenforce 0

# 영구 비활성화는 /etc/selinux/config 수정 후 재부팅

⚠️ 보안 정책에 따라 SELinux를 끌 수 없는 환경이라면 container-selinux 패키지가 반드시 설치되어 있어야 합니다.


Ⅴ. 설치 검증 (반드시 확인!)

1) Docker 버전 확인

 
docker --version
docker info

2) Docker 서비스 시작 및 자동 시작 등록

 
# 서비스 시작
systemctl start docker

# 부팅 시 자동 시작
systemctl enable docker

# 상태 확인
systemctl status docker

3) 동작 확인 (Hello World)

폐쇄망에서는 docker run hello-world가 안 되므로(이미지 다운로드 필요), 대신 이미지 파일을 외부망에서 받아 옮긴 후 테스트합니다.

 

외부망 PC에서:

 
docker pull hello-world
docker save hello-world -o hello-world.tar

hello-world.tar를 폐쇄망 서버로 전송 후

 

폐쇄망 서버에서:

 
docker load -i hello-world.tar
docker run hello-world

 

다음 메시지가 나오면 성공입니다.

Hello from Docker!
This message shows that your installation appears to be working correctly.

Ⅵ. 폐쇄망에서 Docker 이미지 사용하기 (보너스)

폐쇄망 환경에서는 Docker Hub에서 이미지를 직접 받을 수 없으므로, 외부망에서 받아 옮기는 방식을 사용합니다.

외부망에서 이미지 내보내기

 
docker pull nginx:latest
docker save nginx:latest -o nginx.tar

폐쇄망에서 이미지 불러오기

 
docker load -i nginx.tar
docker images   # 정상 등록 확인
docker run -d -p 80:80 nginx:latest

💡 사내 레지스트리 운영 추천
매번 tar 파일을 옮기는 게 번거롭다면, 폐쇄망 안에 사설 레지스트리(Harbor, Nexus, Docker Registry) 를 구축해서 사내 이미지 저장소로 사용하는 것이 일반적입니다.


Ⅶ. 마무리

폐쇄망에서 Docker를 설치할 때 가장 중요한 두 가지는:

  1. 의존성 패키지를 빠짐없이 챙기기 (container-selinux, libcgroup, fuse-overlayfs, slirp4netns)
  2. .src.rpm이 아닌 .x86_64.rpm 바이너리를 받기

이 두 가지만 지키면 대부분의 오프라인 설치 문제는 해결됩니다. 환경마다 추가로 필요한 패키지가 있을 수 있으니, 오류 메시지의 Failed dependencies: 부분을 잘 읽고 하나씩 추가하시면 됩니다.

🔗 함께 보면 좋은 글

반응형