배경
회사 폐쇄망에서 virtual box로 개발 환경을 설정해야 하는 일이 있었는데, rocky 8.4 OS 이미지만 주어진 상태였다. 그래서 docker 설치를 위해 패키지 rpm 파일을 반입해야 했다. 집에 있는 인터넷망에서 완전히 동일한 환경(virtual box)를 준비하고 그에 맞는 파일들을 다운받기로 했다.
온라인 환경 설정
Virtual box 생성
우선 rocky OS 부터 다운받는다. 공식 사이트에서 "아카이브된 릴리즈 버전"을 선택하고, 원하는 환경에 맞는 폴더를 선택한다. 내 경우 https://dl.rockylinux.org/vault/rocky/8.4/Minimal/x86_64/iso/ 경로의 Rocky-8.4-x86_64-minimal.iso 파일을 받았다. 사실 나도 정확히 뭔지 모르고 일단 다운부터 받아봤는데, 다행히 잘 진행됐다.
virtual box를 설치한 후 새로 만들기 버튼을 통해 위에서 받은 ISO 이미지를 선택해주면 된다.
이제 해당 머신이 사용할 네트워크 설정이 필요한데, 네트워크 설정은 머신이 종료된 상태에서만 변경이 가능하다. 나는 NAT 네트워크로 설정해 주었다.
참고로, NAT 네트워크 사용 시 네트워크 관리자 창에서 포트포워딩 등의 설정도 가능하다. 나는 인터넷망은 아니고, 회사의 폐쇄망에서 SSH 접속을 위해 게스트 IP와 port(22)를 입력하여 putty로 세션을 저장하여 사용했다.
네트워크 설정
기본적인 설정이 완료한 후 머신을 시작하면 계정 생성 등의 절차를 진행한 뒤 터미널에 접속할 수 있게 된다. 이제 이 터미널에서 도커 설치에 필요한 파일들을 받기 위한 명령어를 실행하면 된다. 그런데 나는 호스트가 인터넷에 연결되어 있기 때문에 머신 내에서도 자연스럽게 사용할 수 있을 줄 알았는데, 내 경우에는 별도 설정이 필요했다,
sudo nmcli connection show
sudo nmcli connection up enp0s3
ping 8.8.8.8 -c 4 # 정상 연결 테스트
nmcli를 통해 현재 커넥션을 조회해보니 enp0s3이 내려가 있어서, 연결 설정을 해준 뒤 ping을 통해 정상적으로 인터넷이 동작하는지 확인해줬다.
폴더 마운트 설정
머신 내에서 도커 파일을 받고 나면 이를 외부(호스트)로 반출할 방법이 필요한데, 나는 호스트의 경로를 마운트하여 빼내기로 했다. USB를 연결하는 방법도 있는데, 왜인지 나는 계속 USB 인식이 안돼서 이 방법을 택했다. 우선 사진과 같이 마운트를 원하는 경로를 지정한다. 나는 호스트의 workspace/VM/share라는 폴더와, 머신 내부의 /home/share라는 폴더가 마운트되도록 설정했다.
아래 명령어로 필수 패키지를 설치한 후, 메뉴 탭의 장치 > Guest Additions CD 이미지 삽입(게스트 확장 CD 이미지 삽입)을 선택한다.
sudo dnf install -y epel release
sudo dnf groupinstall -y Development Tools"
sudo dnf install -y kernel-devel kernel-headers dkms gcc make perl bzip2
CD 이미지가 정상적으로 삽입이 됐다면 다음 명령어로 마운트 경로를 설정한다.
sudo mount /dev/cdrom /mnt
cd /mnt
sudo ./VBoxLinuxAdditions.run
sudo reboot
lsmod | grep vboxguest
sudo mkdir -p /home/share
sudo mount -t vboxsf share
ls /home/share # 마운트된 호스트 경로의 파일들이 보임
만약 패키지 버전과 OS 버전이 "정확하게" 일치하지 않는다면 위 과정에서 에러가 발생할 수 있다. 이 경우 다음 명령어를 실행한 후 위 작업을 다시 시도한다. 정상적으로 마운트가 완료되었다면, 호스트의 파일을 머신에서 볼 수 있고 머신의 파일을 호스트에서 볼 수 있게 된다.
sudo dnf install -y kernel-devel-$(uanme -r) kernel-headers-$(uname -r)
docker 다운로드
rpm 파일 다운로드
처음에는 docker 엔진 설치 문서를 참고했는데, 이렇게 진행할 경우 5~8개? 정도의 패키지에 대한 설치 파일만 저장된다. 그런데 내 경우에는 회사에서 사용 중인 OS 이미지가 정말 필수 패키지만 존재하는 상태였기 때문에, 그에 따른 의존성 패키지들도 모두 다운로드할 필요가 있었다. 그래서 repotrack 명령어를 통해 rpm 파일들을 다운받았고, 약 190여 개의 파일들이 저장되었다.
docker dnf install yum-utils-y
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
repotrack docker-ce docker-ce-cli containerd.io docker-compose-plugin
rpm 설치 테스트
회사에 반입하여 테스트하기 전에, 해당 파일들로 docker가 제대로 설치되는지 사전 테스트를 진행해보았다. 우선 rpm 파일은 서로 의존성을 갖고 있어서, 우선적으로 설치되어야 하는 패키지나 버전이 존재한다. 하지만 내가 받은 파일은 모두 190여개에 달했고, 이 파일들의 관계를 모두 파악하기란 현실적으로 불가능하다. 어차피 인터넷망을 통해 필요한 모든 파일들을 받은 것이고, 버전도 그에 맞게 레포지토리에서 가져온 것이므로 문제가 없을 것이라 기대하고 무작정 설치를 진행했다.
우선 그 전에, 최대한 폐쇄망과 동일한 환경을 구성하기 위해 (혹시 몰라) 처음에 설정했던 네트워크 설정을 다시 꺼줬다.
sudo nmcli connection show
sudo nmcli connection down enp0s3
ping 8.8.8.8 -c 4 # 안되는 것 확인
이후 rpm 파일을 모두 설치하는 쉘 파일을 작성했다.
- --force: 기존에 설치된 패키지여도 강제로 설치
- --nodeps: 의존성 무시하고 설치
- -U: i면 install, u면 update
#!bin/bash
cd "test/docker/rpms" || exit 1
for rpm in *.rpm; do
rpm -Uvh --nosignature --force --nodeps "$rpm"
done
설치가 완료되면 도커가 정상적으로 실행되는지 확인한다.
docker -v # docker-ce-cli 정상 설치 시 표시됨
systemctl start docker # 이걸 실행해야 엔진이 실행됨
systemctl status docker # docker-ce, 도커 엔진 정상 설치 시 표시됨
docker ps
그런데 사실, 집에서 해봤을 때는 문제가 없었는데, 회사에서 동일한 파일로 테스트했을 때에는 rpm 설치 도중 core dump 에러가 발생했다. 정확히 에러가 발생하는 패키지 대상을 확인했고, rpm 관련 3개 파일에서 문제가 생기는 것을 발견했다. (rpm, rpm-libs, rpm-plugin-selinux) 버전만 조금 상이할 뿐 이미 설치되어 있는 패키지였기 때문에 이 3개를 제외하고 설치를 진행했고, 이후 docker rootless 모드 설정까지 문제없이 모두 진행되어 큰 문제는 없어보였다.
'Infra' 카테고리의 다른 글
rootless docker란? 개념 및 설정 방법 (0) | 2025.04.20 |
---|---|
CUDA/NVIDIA 드라이버와 GPU 별 버전 확인 방법 (0) | 2025.03.07 |