# 개요
RHEL 9.4 버전의 Linux를 대상으로 docker 명령어를 offline으로 설치해야할 필요성이 있을 때 아래와 같은 절차로 수행한다.
# Mac에서 docker로 linux 실행하여, docker offine rpm 패키지 다운로드하기
# 이미지 풀 시도
docker pull dokken/centos-stream-9:latest
# 컨테이너 실행 (성공 시)
## platform을 이렇게 설정해주어야, M 시리즈 아키텍처가 아니라 x86_64 구조에 맞는 image가 실행된다
docker run --platform linux/amd64 -it dokken/centos-stream-9:latest /bin/bash
### 컨테이너 쉘 내부 ###
# 1. dnf는 기본적으로 설치되어 있지만, 오프라인 패키지 다운로드에 필요한 dnf-utils를 설치
dnf install -y dnf-utils
# 2. 다운로드할 디렉토리 생성
mkdir /tmp/rpms
# 3. docker rpm 패키지 다운로드
## Docker CE 리포지토리 설정: dnf config-manager를 사용하여 Docker CE 레포지토리를 추가
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
## 패키지 다운로드 실행: dnf에서는 download 플래그를 사용하고, destdir로 다운로드 경로를 지정합니다.
## ssl 오류까지 고려하여 추가
dnf install --downloadonly --releasever=9 --downloaddir=/tmp/rpms/ \
--setopt=baseos.sslverify=false \
--setopt=appstream.sslverify=false \
--setopt=extras.sslverify=false \
--setopt=extras-common.sslverify=false \
--setopt=docker-ce.sslverify=false \
docker-ce docker-ce-cli containerd.io
## 설치 잘되었는지 다운로드 폴더 확인
cd /tmp/rpms/ && ls
## 종료
exit
### 컨테이너 쉘 종료 ###
# 다운로드 된 파일, 컨테이너에서 꺼내기
## Mac 호스트 쉘
## 컨테이너 ID 확인 (6bd18c5f1c1f 대신 실제 ID 사용)
## 종료된 컨테이너까지 확인하기 위해 -a(all) 태그 붙이기
docker ps -a
## RPM 파일들을 Mac으로 복사
mkdir docker-rpms
docker cp 6bd18c5f1c1f:/tmp/rpms/ ./docker-rpms
## 컨테이너 정리
docker rm 6bd18c5f1c1f
# rpm 패키지 압축 후, linux로 옮긴 후 docker 설치하기
unzip <rpms 패키지 폴더.zip>
cd rpms
# sudo dnf install *.rpm --disablerepo '*'
# 기존 설치된 의존성 패키지와 충돌이 있는 경우
# 다운로드된 모든 .rpm 파일을 설치하지 않고, 필수 패키지만 지정합니다.
# DNF가 나머지 의존성(.rpm) 파일들을 자동으로 찾아서 해결하도록 합니다.
sudo dnf install --allowerasing --nogpgcheck docker-ce-*.rpm docker-ce-cli-*.rpm containerd.io-*.rpm
# docker 기동하기
# 1. Docker 서비스 시작
sudo systemctl start docker
# 2. Docker 서비스 상태 확인
sudo systemctl status docker
# 3. 부팅 시 자동 시작 설정 (권장)
sudo systemctl enable docker
# 디버깅 - 권한 이슈(Permission Denied)
🔑 권한 거부(Permission Denied)의 원인
Docker 데몬(dockerd)은 기본적으로 루트(root) 권한으로 실행되며, 이 데몬과의 통신은 유닉스 소켓(Unix Socket) 파일(/var/run/docker.sock)을 통해 이루어집니다.
- 소켓 파일 권한: 이 소켓 파일은 보안상의 이유로 기본적으로 루트 사용자와 docker 그룹만 접근할 수 있도록 설정되어 있습니다.
- 일반 사용자 문제: 사용자가 sudo 없이 docker ps를 실행하면, 시스템은 사용자의 현재 그룹 목록을 확인합니다. 만약 현재 사용자 계정이 docker 그룹에 속해 있지 않다면, 소켓 파일에 접근할 수 없으므로 permission denied 오류가 발생합니다.
✅ 해결 방법
이 문제를 해결하는 방법은 크게 두 가지가 있습니다.
1. 명령어 앞에 sudo 붙이기 (임시 방편)
가장 간단한 방법이지만, 매번 sudo를 붙여야 하는 불편함이 있습니다.
sudo docker ps
2. 사용자를 docker 그룹에 추가하기 (권장)
이 방법은 한 번 설정하면 sudo 없이 모든 docker 명령어를 실행할 수 있게 해줍니다.
- 현재 사용자를 docker 그룹에 추가:
- 여기서 $USER는 현재 로그인된 사용자 이름입니다.
sudo usermod -aG docker $USER
- 여기서 $USER는 현재 로그인된 사용자 이름입니다.
- 그룹 변경 사항 적용 (재로그인/재시작): 그룹 변경 사항을 시스템에 반영하기 위해 로그아웃했다가 다시 로그인하거나, 터미널 세션을 다시 시작해야 합니다.
- 재로그인 후 명령어(groups)로 해당 사용자의 그룹 목록에 "docker"가 추가되었는지 확인
- 확인: 재로그인 후 sudo 없이 docker ps를 실행하여 권한 오류가 사라졌는지 확인합니다.
groups
docker ps
'클라우드 & DevOps > 시스템 & OS ∕ Linux' 카테고리의 다른 글
| [Linux] 리눅스 명령어 모음 (1) | 2025.08.20 |
|---|---|
| [리눅스] 쉘스크립트 실행할 때 chmod +x <스크립트 경로>는 무엇을 의미할까? (1) | 2025.08.13 |





최근댓글