Rocky Linux 9 Docker 설치와 첫 컨테이너 실행 방법

·

, ,

Rocky Linux 9 서버에 Docker를 올릴 때는 명령어 몇 줄보다 저장소를 어떻게 잡을지가 더 중요했습니다. 예전 습관대로 yum을 치기 쉬운데, Rocky Linux 9에서는 dnf 기준으로 정리해두는 편이 나중에 서버를 다시 만들 때도 덜 헷갈립니다.

이번 구성은 Rocky Linux 9.x / Docker Engine 공식 RHEL 저장소 / Docker Compose v2 플러그인 기준으로 확인했습니다. Docker 설치 흐름은 공식 문서의 RHEL 계열 설치 안내를 참고했습니다.

참고: https://docs.docker.com/engine/install/rhel/

홈서버 구축 참고 이미지

설치 전에 정리한 기준

Rocky Linux 9에서는 기본 저장소에 있는 패키지보다 Docker 공식 repo를 추가해서 설치하는 쪽으로 잡았습니다. 홈서버는 한 번 올려두면 업데이트를 계속 따라가야 하므로, 처음부터 공식 저장소 흐름으로 맞춰두는 편이 관리하기 좋습니다.

항목 Rocky Linux 9 기준
패키지 관리자 dnf 사용
저장소 Docker 공식 RHEL repo 추가
설치 패키지 docker-ce, docker-ce-cli, containerd.io, buildx, compose plugin
서비스 시작 systemctl enable –now docker
일반 유저 실행 docker 그룹 추가 후 재로그인

먼저 예전 Docker 관련 패키지가 남아 있다면 정리합니다. 새 서버라면 대부분 없다고 나오지만, 이미지 템플릿을 여러 번 바꿔 쓴 서버라면 한 번 확인하는 편이 낫습니다.

sudo dnf remove docker \
  docker-client \
  docker-client-latest \
  docker-common \
  docker-latest \
  docker-latest-logrotate \
  docker-logrotate \
  docker-engine \
  podman \
  runc

Docker 공식 repo 추가하기

핵심은 기본 repo만으로 바로 설치하지 않는 것입니다. dnf config-manager --add-repo로 Docker 공식 저장소를 먼저 추가합니다.

sudo dnf -y install dnf-plugins-core

sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo

그다음 Docker Engine과 Compose v2 플러그인까지 함께 설치합니다. 요즘은 docker-compose 단독 바이너리보다 docker compose 형태의 v2 플러그인을 쓰는 경우가 많아서, 처음부터 같이 넣어두는 편이 편합니다.

sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

설치 중 GPG 키 확인이 뜨면 Docker 공식 문서에 나온 fingerprint와 맞는지 확인하고 진행합니다. 제가 확인한 공식 문서 기준 fingerprint는 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35입니다.

서비스 시작과 부팅 자동 실행

설치가 끝났다고 Docker가 바로 실행되는 것은 아닙니다. 이 부분을 놓치면 docker ps부터 막히기 쉽습니다.

sudo systemctl enable --now docker

상태와 버전은 아래처럼 확인했습니다.

systemctl status docker
docker version
docker compose version

enable --now부팅 자동 실행 등록과 즉시 시작을 한 번에 처리합니다. 홈서버에서는 재부팅 뒤 서비스가 올라오지 않아 당황하는 일이 있으니, 처음부터 enable까지 같이 걸어두는 편이 좋습니다.

sudo 없이 Docker 쓰기

처음에는 sudo docker ps로 확인해도 되지만, 매번 sudo를 붙이는 것은 번거롭습니다. 일반 유저를 docker 그룹에 넣으면 됩니다.

sudo usermod -aG docker $USER

다만 이 명령을 실행해도 현재 SSH 세션에 바로 반영되지는 않았습니다. 재로그인이 필요합니다. 급하면 아래처럼 새 그룹을 적용할 수 있지만, 저는 보통 SSH를 끊었다가 다시 접속해서 확인합니다.

newgrp docker
docker run hello-world

주의할 점도 있습니다. Docker 공식 문서에서도 docker 그룹은 사실상 높은 권한을 갖는다고 안내합니다. 혼자 쓰는 홈서버라면 편의성이 크지만, 여러 사람이 접속하는 서버라면 아무 유저나 넣지 않는 것이 맞습니다.

참고: https://docs.docker.com/engine/install/linux-postinstall/

첫 컨테이너 띄워보기

설치 확인용으로는 hello-world가 가장 가볍습니다.

docker run hello-world

조금 더 실제 서비스에 가까운 형태로 보려면 Nginx를 하나 띄워볼 수 있습니다.

docker run -d --name web-test -p 8080:80 nginx

확인은 이렇게 했습니다.

docker ps
curl http://localhost:8080

외부 브라우저에서 접속하려면 서버 방화벽과 클라우드 보안 규칙까지 같이 봐야 합니다. Oracle Cloud 같은 환경에서는 OS 안의 방화벽만 열었다고 끝이 아니라, 콘솔 쪽 인바운드 규칙도 맞아야 합니다.

firewalld에서 한 번 막힌 부분

Rocky Linux 계열은 firewalld가 켜져 있는 경우가 많습니다. Docker가 bridge 네트워크와 iptables/nftables 쪽을 만지다 보니, 컨테이너는 떠 있는데 외부 접속이 애매하게 안 되는 상황을 만날 수 있습니다.

먼저 상태부터 확인합니다.

sudo systemctl status firewalld
sudo firewall-cmd --state

단순 테스트용으로 8080 포트를 열어야 한다면 이렇게 처리할 수 있습니다.

sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --reload

저는 여기서 컨테이너 문제라고 생각하고 docker run 옵션만 계속 바꿨는데, 실제로는 방화벽과 클라우드 보안 규칙을 함께 봐야 했습니다. 홈서버에서 Docker 네트워킹이 꼬였다고 느껴질 때는 컨테이너 로그보다 방화벽 상태를 먼저 확인하는 것이 시간을 줄여줍니다.

마무리 메모

Rocky Linux 9에 Docker를 올리는 흐름은 단순합니다. yum이 아니라 dnf를 쓰고, Docker 공식 repo를 추가한 뒤 설치하고, systemctl enable --now docker로 서비스까지 올리면 됩니다.

마지막으로 일반 유저를 docker 그룹에 넣었다면 재로그인까지 해야 실제로 반영됩니다. 첫 컨테이너는 hello-world로 확인하고, 실제 서비스는 포트와 firewalld, 클라우드 인바운드 규칙까지 같이 맞춰두면 다음 컨테이너부터는 훨씬 수월하게 올릴 수 있습니다.

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다