이번 포스팅에서는 폐쇄망에서 Docker 프로그램을 배포하는 방법을 포스팅 하겠습니다.
1. 폐쇄망이란?
폐쇄망(오프라인 네트워크)이란, 외부(인터넷)과의 연결이 전혀 없는 네트워크 환경을 의미합니다.
- 회사 내부망, 보안이 철저한 연구소, 군 기관 등에서 이러한 폐쇄망 환경이 자주 사용됩니다.
- 외부 인터넷 접근이 불가능하므로, 필요한 패키지와 설치 파일, Docker 이미지 등을 사전에 준비해서 내부망(또는 USB, DVD 등 물리 매체)을 통해 옮겨야 합니다.
2. 준비사항
폐쇄망 환경에서 Docker를 설치하고, 프로그램을 배포하기 위해서는 다음과 같은 준비가 필요합니다.
2.1 Docker 설치 RPM 파일 준비
- Docker 설치를 위한 RPM 패키지 다운로드
- 일반적으로 docker-ce, docker-ce-cli, containerd.io 등의 RPM 파일이 필요합니다.
- 인터넷이 되는 환경에서 Docker 공식 저장소를 참고하여 버전에 맞는 RPM 파일들을 미리 다운로드합니다.
- 의존성(Dependencies) 확인
- CentOS 7 버전에 따라 의존 관계가 달라질 수 있으므로, yum localinstall 명령으로 필요한 의존성 패키지를 확인해두면 좋습니다.
- 다만, 폐쇄망에서는 추가 의존 패키지도 오프라인으로 설치해야 하므로, 종속 패키지가 있는지 미리 체크가 중요합니다.
- 파일 이동
- 다운로드 받은 RPM 패키지를 폐쇄망 환경(CentOS 7 서버)으로 옮깁니다.
- USB 메모리, 사내 파일 서버 등을 활용할 수 있습니다.
# Docker 패키지 확인 (버전에 따라 다를 수 있음)
yum list docker-ce --showduplicates | sort -r
# 특정 버전 다운로드 예시 (버전 번호 예시)
yum install --downloadonly --downloaddir=./docker-rpm docker-ce-20.10.10 docker-ce-cli-20.10.10 containerd.io
2.2 Docker 이미지 준비
- docker save 명령으로 이미지 추출
- 배포할 Docker 이미지를 미리 외부에서 다운로드 및 Pull 한 뒤 docker save를 사용해 .tar 파일 형태로 저장합니다.
# 외부 환경에서
docker pull httpd:2.4
docker save httpd:2.4 -o httpd_2.4.tar
2. 이미지 파일 이동
- 저장된 .tar 파일(httpd_2.4.tar)을 폐쇄망 환경으로 옮깁니다.
3. docker load 명령으로 이미지 로드
- 폐쇄망 환경에서 아래와 같이 이미지를 복원합니다
# 폐쇄망(CentOS 7) 환경에서
docker load -i httpd_2.4.tar
3. Docker Compose 파일 준비 (네트워크 설정 포함)
폐쇄망 환경에서도 Docker Compose를 활용해 여러 컨테이너를 쉽게 관리할 수 있습니다. 이를 위해선 사전에 Docker Compose 바이너리 역시 준비해야 합니다.
3.1 Docker Compose 바이너리 다운로드
- 최신 Compose를 사용하고 싶다면 Docker Compose GitHub에서 docker-compose-Linux-x86_64 (버전명 포함) 바이너리를 받아 폐쇄망 서버로 옮깁니다.
- 옮긴 후, 실행 권한을 부여합니다.
chmod +x docker-compose-Linux-x86_64
mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
-
- 정상 설치를 위해 docker-compose --version 명령어로 버전을 확인합니다.
3.2 docker-compose.yml 작성
- 여러 컨테이너를 동시에 실행하려면 docker-compose.yml 파일을 구성합니다.
- 네트워크 설정도 Compose 파일 안에서 따로 정의하거나, 필요하다면 사전에 별도의 Docker 네트워크를 만들어 사용할 수 있습니다.
- 예시:
version: '3'
services:
web:
image: httpd:2.4
container_name: httpd-server
ports:
- "80:80"
networks:
- custom-net
networks:
custom-net:
driver: bridge
3.3 도커 네트워크 생성 (필요 시)
- Compose 파일에서 자동으로 생성되도록 설정할 수도 있지만, 별도로 네트워크를 생성해 관리하고 싶다면 다음 명령어 사용:
docker network create --driver bridge custom-net
컨테이너 간 통신, IP 대역 분리 등에 유리합니다.
4. sh 파일 만들기
폐쇄망 환경에서 배포를 자동화하기 위해 sh 스크립트를 만들어 두면 편리합니다. 서버를 새로 설치하거나, 다른 폐쇄망 서버에 확장해야 할 때도 동일한 스크립트로 빠르게 배포할 수 있습니다.
4.1 Shell 스크립트 예시
#!/bin/bash
# install_docker.sh
echo ">>> Docker 설치를 시작합니다."
# 1) Docker 설치 (RPM 파일 기준)
echo ">>> Docker RPM 설치 중..."
yum localinstall -y docker-ce-20.10.10-3.el7.x86_64.rpm \
docker-ce-cli-20.10.10-3.el7.x86_64.rpm \
containerd.io-1.4.11-3.1.el7.x86_64.rpm
# 2) Docker 서비스 시작 및 부팅 시 자동 실행 설정
systemctl start docker
systemctl enable docker
echo ">>> Docker 설치 및 서비스 설정이 완료되었습니다."
# 3) Docker 이미지 로드
echo ">>> Docker 이미지 로드 중..."
docker load -i httpd_2.4.tar
# 4) Docker Compose로 컨테이너 구동
echo ">>> Docker Compose를 통한 컨테이너 실행..."
docker-compose up -d
echo ">>> 컨테이너가 정상적으로 실행되었습니다."
5. 결론
- 의존 패키지 확인: 폐쇄망 환경에서는 패키지 다운로드가 불가능하므로, 외부에서 미리 의존성을 모두 챙겨와야 합니다.
- 버전 호환성: CentOS 7의 커널 버전에 따라 일부 Docker 기능이 제한될 수 있으므로, 가능한 최신 안정 버전을 사용하는 것이 좋습니다.
- 보안 정책 준수: 폐쇄망은 보안이 중요하므로, Docker 데몬 설정, 방화벽 규칙, SELinux 등 추가 설정을 꼼꼼히 확인해야 합니다.
- 자동화 스크립트: 설치 및 배포 과정을 스크립트로 만들어두면, 유지보수가 쉽고 오류 발생 가능성을 줄일 수 있습니다.
- 폐쇄망 특성상 온라인 접근이 불가능하므로, 사전 준비(필요 RPM, Docker 이미지 등)가 가장 중요합니다.
- 이후 Docker 설치 → 이미지 로드 → Docker Compose 실행 순서로 컨테이너를 구동하면 문제없이 오프라인 배포를 진행할 수 있습니다.