RHEL 8.6 에 yum 으로 Docker CE 를 설치하고 이미지·컨테이너 저장소를 별도 디스크로 옮기는 절차, 그리고 Red Hat 지원 대상인 Podman(+ podman-docker 호환 레이어)으로 같은 목적을 이루는 절차를 정리했다. Docker Engine 은 stable 채널만 배포하므로 최신 릴리스가 곧 안정 버전이다(2026-07 기준 29.7.1). 29.x 는 containerd 이미지 스토어가 기본이고 최소 API 버전이 1.44 로 올라 v25 미만 클라이언트는 붙지 못한다.
RPM 은 바이너리 경로를 바꿀 수 없으므로 "특정 디렉터리 설치" 는 data-root 변경을 뜻한다.
yum remove -y podman buildah runc
yum module -y remove container-tools
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
x86_64 패키지는 centos 경로에 있으므로 rhel 경로 대신 centos 저장소를 쓴다. 의존성 충돌은 --allowerasing 을 먼저 시도한다.
mkdir -p /data/docker /etc/docker && chmod 711 /data/docker
cat > /etc/docker/daemon.json <<'EOF'
{
"data-root": "/data/docker",
"storage-driver": "overlay2",
"log-driver": "json-file",
"log-opts": { "max-size": "50m", "max-file": "5" }
}
EOF
semanage fcontext -a -e /var/lib/docker /data/docker # policycoreutils-python-utils
restorecon -Rv /data/docker
systemctl enable --now docker
docker info | grep -i "docker root dir"
/data 는 xfs 에 ftype=1 이어야 overlay2 가 동작한다(xfs_info /data). 이미 쓰던 서버는 systemctl stop docker 후 rsync -aHAX --numeric-ids /var/lib/docker/ /data/docker/ 로 옮긴다. 심볼릭 링크 방식은 SELinux·마운트 문제가 잦아 권하지 않는다.
dnf install -y podman podman-docker podman-plugins containers-common
touch /etc/containers/nodocker # "Emulate Docker CLI" 안내 숨김
docker --version # podman 버전이 나오면 정상
# rootless 기반
grep $USER /etc/subuid /etc/subgid
usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $USER
podman system migrate
loginctl enable-linger $USER
# Docker API 소켓이 필요한 도구(compose, SDK)만
systemctl --user enable --now podman.socket
export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/podman/podman.sock
레지스트리 짧은 이름은 /etc/containers/registries.conf 에 unqualified-search-registries = ["docker.io"], short-name-mode = "enforcing" 으로 고정하고 스크립트에서는 항상 완전한 이름을 쓴다. 사설 CA 는 /etc/containers/certs.d/<registry>:<port>/ca.crt 에 두고 insecure = true 는 쓰지 않는다. 저장소 위치는 ~/.config/containers/storage.conf 의 graphroot 로 바꾼다(podman system reset 은 기존 이미지를 지운다).
[storage]
driver = "overlay"
graphroot = "/vector/containers/storage"
runroot = "/run/user/1000/containers"
podman pull docker.io/qdrant/qdrant:v1.15.0
podman save -o qdrant-v1.15.0.tar docker.io/qdrant/qdrant:v1.15.0
sha256sum qdrant-v1.15.0.tar > qdrant-v1.15.0.sha256
# 대상 서버
sha256sum -c qdrant-v1.15.0.sha256 && podman load -i qdrant-v1.15.0.tar
openssl rand -hex 32 | podman secret create qdrant_api_key -
podman run -d --name qdrant -p 6333:6333 -p 6334:6334 \
-v /vector/storage:/qdrant/storage:Z -v /vector/snapshots:/qdrant/snapshots:Z \
--secret qdrant_api_key,type=env,target=QDRANT__SERVICE__API_KEY \
--memory=4g --cpus=4 docker.io/qdrant/qdrant:v1.15.0
curl http://localhost:6333/readyz # 200
curl -s -o /dev/null -w '%{http_code}\n' http://localhost:6333/collections # 키 없이 401 이면 정상
RHEL 8 의 벤더 지원 대상은 Podman 이며 Docker CE 는 지원 밖이다. podman-docker 는 CLI 호환일 뿐 Swarm, 일부 BuildKit 플래그, live-restore 는 매핑되지 않는다. Cloudera ECS 노드에는 별도 컨테이너 런타임을 올리지 말고 다른 서버를 쓴다. 운영에서는 태그 대신 digest(podman image inspect --format '{{.Digest}}')로 이미지를 고정한다.