[ VirtualBox 7 ] Centos7.x 폐쇄망에 docker 설치하기

식빵·2024년 11월 4일
0

virtual-machine

목록 보기
2/3

🍞 실습 전 주의사항

혹시 같이 실습을 하시고 싶으신 분들은 반드시 아래 참고사항을 꼭 읽고 시작하세요!

먼저 VirtualBox 통해서 동일한 버전의 Centos7.x 를 2개 설치하셔야 합니다.
하나는 인터넷망이 되는 Centos7 환경이고,
다른 하나는 인터넷이 되지 않는 것으로 사용하려 합니다.

설치법은 제가 작성한 Centos 설치법 방식을 따라주시기 바랍니다.

  • 인터넷이 되는 Centos 는 위 설치법의 내용을 따르되, 절대로 yum update 하지 마세요!
  • 인터넷이 안되는 Centos2. SSH 설정 목차 까지만 작업하시면 됩니다.
    마찬가지로 yum update 는 절대 하지마시기 바랍니다.

그리고 추가적으로 각각의 2. SSH 설정 목차 설정의 포트포워딩은 아래처럼 합니다.

  • 인터넷이 되는 Centos 포트포워딩 : Host Port: 8100 <==> Guest Port 22
  • 인터넷이 안되는 Centos 포트포워딩 : Host Port: 8200 <==> Guest Port 22


🍞 docker 설치에 필요한 rpm 일괄 다운로드

먼저 인터넷이 되는 Centos7.x 운영체제에 접속합니다.

진짜 주의할 점:
여러분들이 Centos7.9 가 아니고 그 아래 버전의 폐쇄망에 docker 를 설치할 거면
절.대.로 yum update 를 시도하지 마시기 바랍니다. 버릇같이 virtual box 에
OS 깔리면 update 부터 날리는 건 알지만 참으십쇼!


먼저 docker 와 관련된 yum install 목록을 알아옵니다.
centos docker 설치 가이드 문서 를 참고하면 금방 알 수 있습니다.
docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin


이제 이걸 인터넷이 되는 환경의 Centos 에서
아래와 같이 필요한 모든 위존 rpm 을 설치합니다.

yum install yum-plugin-downloadonly yum-utils createrepo

# 먼저 docker 전용 repo 추가
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum clean all
yum repolist # docker-ce-stable/7/x86_64  라는 repo 가 보이면 된겁니다.

# rpm 목록을 다운로드 받는데 필요한 2개의 디렉토리 생성
mkdir /var/tmp/docker_repo
mkdir /var/tmp/docker-installroot

주의사항 (Centos 7.9 아랫 버전 사용시 필참)

여기서 잠깐 저희가 알아야 될 것들이 있습니다.
만약에 여러분들이 Centos 7.9 아래 버전이면 약간의 작업을 더 해줘야 합니다.

yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

을 입력하고 아래처럼 어떤 작업을 할지 목록을 보여주는 화면이 있습니다.
(설치 여부를 물어보면 N 을 입력해서 설치 작업을 중단해주세요~)

이때 위처럼 Updating for dependencies 라는 구문이 보이고 아래에
몇가지 목록이 있다면, 반.드.시 아래에서 사용할 yum install --downloadonly
명령어 구문에서 해당 패키지명도 추가적으로 작성해줘야 합니다!!!!

이렇게 해야 정확히 모든 패키지의 rpm 파일들이 다운로드 됩니다.
저 같은 경우에는 audit 패키지 정보만 쏙 빠져서 이후 인터넷 안되는 환경의
Centos 에서 yum install 할 때 에러가 났습니다.

# 설치 시작 (폐쇄망 환경이 7.9 이상인 경우)
yum install --downloadonly --installroot=/var/tmp/docker-installroot \
--releasever=7 \
--downloaddir=/var/tmp/docker_repo \
docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 저는 폐쇄망 환경이 centos7.6 이여서 아래처럼 docker 관련 패키지뿐만 아니라
# audit audit-libs policycoreutils 패키지도 추가했습니다.
# yum install --downloadonly --installroot=/var/tmp/docker-installroot \
# --releasever=7 \
# --downloaddir=/var/tmp/docker_repo \
# audit audit-libs policycoreutils \
# docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

createrepo --database /var/tmp/docker_repo # 이러면 repodata 라는 디렉토리가 안에 생기게 됩니다.
rm -rf /var/tmp/docker-installroot # 더 이상 필요없으니 삭제.

# rpm 과 repodata 라는 디렉토리가 있는지 확인
ls -alF "/var/tmp/docker_repo"




🍞 다운로드 받은 rpm 을 인터넷 안되는 환경으로 옮기기

옮기는 방법은 다양하겠지만, 저는 Host PC 가 Window 여서
Window powershell 에서 제공하는 scp 명령어를 통해서 rpm 파일과 repodata
디렉토리를 옮겨봤습니다.

참고: VirtualBox 를 사용한다면 Centos 서버에 설치된 sshd 와 통신이
가능하도록 포트포워딩을 해야 합니다! 설정법은 이 링크를 참고하세요

저는 인터넷이 되는 CentosHOST Port : 8100 <==> Guest Port 22
인터넷이 안되는 CentosHOST Port : 8200 <==> Guest Port 22
... 처럼 세팅했습니다.


먼저 window 에 D:\linux_install\docker_offline\ 라는 디렉토리르 생성하고
나서 Powershell 에서 아래처럼 명령어를 입력합니다.

# 먼저 원격에 있는 파일을 저의 Window 디렉토리로 옮깁니다.
scp -P 8100 -r root@127.0.0.1:/var/tmp/docker_repo D:\linux_install\docker_offline\

# -는 Centos 서버에 ssh 로 접속하기 위해 포트포워딩으로 뚫어 놓은 
# 포트 번호입니다.

주의사항: root@127.0.0.1 바로 다음에 나오는 ":" 은 절대로 생략하면 안됩니다!

scp 명령 수행 후 아래처럼 지정했던 경로에 docker_repo 라는 디렉토리가 생깁니다.
디렉토리 안에 들어가서 rpm 파일들과 repodata 디렉토리가 있는지 눈으로 확인해줍니다.


인터넷이 안되는 Centos 에 접속해서 /docker_install 라는 디렉토리를 생성하고
Host PC(=Window) 에서 Powershell 을 통해 아래처럼 명령어를 입력해주세요.

# 이 명령어는 Host PC (Window) 에서 실행한 겁니다!!!
# 포트포워딩으로 설정했던 23 번 포트를 바라보도록 -P 23 옵션을 줬습니다.
scp -P 8200 -r D:\linux_install\docker_offline\docker_repo\* root@127.0.0.1:/docker_install

주의사항: root@127.0.0.1 바로 다음에 나오는 ":" 은 절대로 생략하면 안됩니다!


이후 인터넷이 안되는 Centos 에서 /docker_install 디렉토리 내부에
rpm 파일들repodata 디렉토리 가 제대로 들어갔는지 눈으로 가볍게 확인합니다.

ls /docker_install




🍞 인터넷 안되는 Centos 에서 yum install

지금부터는 모두 인터넷이 안되는 환경의 Centos 에서 하는 작업들입니다.


Centos 접속해서 새로운 repo mirror 를 생성해줍니다.

# 경로 이동
cd /etc/yum.repos.d

# 새로운 도커 전용 로컬 레포를 생성합니다.
vi docker_local.repo

docker_local.repo 의 내용은 아래와 같습니다.

[docker-local-repo]
name=dockerLocalRepository
baseurl=file:///docker_install
enabled=1
gpgcheck=0
#yum --disablerepo=\* --enablerepo=docker-local-repo install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

혹시나 모르니 baseurl 에 작성한 /docker_install 경로에 정말
rpm 파일들이 있는지 재차 확인해줍시다! ls /docker_install 호오옥시나 모르니까요.
에러는 아주 사소한 곳에서 잘 발생하니까요~


변경된 repo 를 적용하고, 실제로 적용됐는지 yum repolist 를 통해 확인해봅니다.

sudo yum clean all
sudo yum repolist # docker_local repo 잘 적용됐는지 확인

만약 sudo yum clean all 이나 repolist 명령어 사용시 위처럼 짜잘한
에러가 나오는 게 아니라 정말 아무것도 실행이 안되는 에러가 발생하면
아래처럼 저희가 만든 docker_local.repo 만 남겨두고,
나머지는 repo 파일들은 백업 폴더에 넣고 나서 재작업을 해줍니다.

cd /etc/yum.repos.d

# 기존 repo 파일들은 백업 폴더로 이동하고 저희가 만든 것만 남깁니다.
mkdir bak
mv *.* bak # 
mv bak/docker_local.repo ./

# 다시 명령어를 입력해봅시다.
sudo yum clean all
sudo yum repolist # docker_local repo 잘 적용됐는지 확인

이제 그렇게 고대하던 yum install 를 실행해줍니다!

# 설치하기, enablerepo 를 저희가 지금 막 만든 
yum --disablerepo=\* --enablerepo=docker-local-repo install \
docker-ce docker-ce-cli containerd.io docker-buildx-plugin \
docker-compose-plugin

(이미지를 클릭하면 크게 볼 수 있습니다)

잘 설치됐습니다 😂😂😂😂
저 같은 경우는 Centos7.6 에 설치하는 거라서 Update Package 도 있었는데,
해당 업데이트도 정상적으로 된 것을 확인했습니다!


가볍게 아래처럼 docker 설치 내역을 확인해줍니다.

# 설치 된 항목들 한번 쓱 봅시다.
sudo yum list installed | grep docker



🍞 docker daemon 실행

# 데몬 실행
sudo systemctl start docker

# 간단한 테스트. 데몬에 명령어 날리기
sudo docker version




docker 추가 설정

sudo 없이 docker 실행

만약 root 사용자가 아닌 일반 사용자면,
기본적으로 docker 명령어 앞에 sudo 를 붙여야 사용 가능합니다.
하지만 아래처럼 하면 그 제약을 피할 수 있습니다.

sudo usermod -aG docker <계정명>
# 해당 <계정명> 으로 로그인한 상태였으면 한번 로그아웃했다가 다시 로그인해주세요!

부팅 후 자동으로 docker 실행하기

sudo systemctl enable docker.service
sudo systemctl enable containerd.service

이상으로 글을 마치겠습니다. 고생하셨습니다!




🍞 (보충) docker image export/import

인터넷이 되는 곳에서 Docker image 를 아래처럼 tar 파일로 export 합니다.

# 인터넷 되는 곳에서 이미지 pull 하고 docker save 명령어로 export 하기
docker save -o hello-world.tar hello-world # 이러면 tar 파일이 하나 생김.

Host PC 에서 추출된 tar 파일을 인터넷이 안되는 Centos 에 scp 를 통해서 전달합니다.
(아래 명령어 예시참고)

# Window ==> 인터넷 안되는 Centos
scp -P 8200 D:\linux_install\hello-world.tar root@127.0.0.1:/root/hello-world.tar

인터넷이 안되는 Centos 에 접속하고,
전달받은 tar 파일을 docker load 를 통해서 이미지로 import 합니다.

docker load -i /root/hello-world.tar


# 이후 정상적으로 로드가 됐으면 최종적으로 눈으로 확인해봅시다.

sudo docker images # 이미지 목록에서 import 한 이미지 확인
sudo docker run hello-world # 실행도 해보죠.




🍞 참고 링크

profile
백엔드 개발자로 일하고 있는 식빵(🍞)입니다.

0개의 댓글