RHEL에 Docker Engine 설치하기

RHEL에 Docker Engine 설치하기 (Install Docker Engine on RHEL)

RHEL에서 Docker Engine을 시작하려면 사전 요구 사항을 충족하는지 확인한 다음 설치 단계를 따라요.

출처: 문서

본문

사전 요구 사항 (Prerequisites)

OS 요구 사항 (OS requirements)

Docker Engine을 설치하려면 다음 RHEL 버전 중 하나의 유지 관리되는 버전이 필요해요:

  • RHEL 8
  • RHEL 9
  • RHEL 10

이전 버전 제거 (Uninstall old versions)

Docker Engine을 설치하기 전에 충돌하는 패키지를 제거해야 해요.

Linux 배포판이 비공식 Docker 패키지를 제공할 수 있는데, 이것이 Docker가 제공하는 공식 패키지와 충돌할 수 있어요. 공식 버전의 Docker Engine을 설치하기 전에 이 패키지들을 제거해야 해요.

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

dnf가 이 패키지들 중 하나도 설치되지 않았다고 보고할 수 있어요.

/var/lib/docker/에 저장된 이미지, 컨테이너, 볼륨, 네트워크는 Docker를 제거해도 자동으로 제거되지 않아요.

설치 방법 (Installation methods)

필요에 따라 다양한 방법으로 Docker Engine을 설치할 수 있어요:

  • 설치와 업그레이드 작업의 용이성을 위해 Docker의 저장소를 설정하고 그곳에서 설치할 수 있어요. 이 방법이 권장돼요.
  • RPM 패키지를 다운로드해 수동으로 설치하고, 업그레이드를 완전히 수동으로 관리할 수 있어요. 인터넷에 접근할 수 없는 air-gapped 시스템에 Docker를 설치하는 상황에서 유용해요.
  • 테스트 및 개발 환경에서는 자동화된 편의 스크립트로 Docker를 설치할 수 있어요.

Apache License, Version 2.0. 전체 라이선스는 LICENSE를 참고하세요.

rpm 저장소로 설치 (Install using the rpm repository)

새 호스트 머신에 Docker Engine을 처음 설치하기 전에 Docker 저장소를 설정해야 해요. 그 후에는 저장소에서 Docker를 설치하고 업데이트할 수 있어요.

저장소 설정 (Set up the repository)

(DNF 저장소를 관리하는 명령을 제공하는) dnf-plugins-core 패키지를 설치하고 저장소를 설정해요.

$ sudo dnf -y install dnf-plugins-core
$ sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
Docker Engine 설치 (Install Docker Engine)
  1. Docker 패키지를 설치해요. 최신 버전을 설치하려면 다음을 실행해요:
$ sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

GPG 키를 수락하라는 메시지가 나오면 지문이 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35와 일치하는지 확인하고, 일치하면 수락해요.

이 명령은 Docker를 설치하지만 Docker를 시작하지는 않아요. 또한 docker 그룹을 만들지만 기본적으로 그룹에 사용자를 추가하지 않아요.

특정 버전을 설치하려면 먼저 저장소의 사용 가능한 버전을 나열해요:

$ dnf list docker-ce --showduplicates | sort -r

docker-ce.x86_64    3:29.8.1-1.el9    docker-ce-stable
docker-ce.x86_64    3:29.8.0-1.el9    docker-ce-stable
<...>

반환된 목록은 활성화된 저장소에 따라 다르며 RHEL 버전에 특정해요(이 예시에서 .el9 접미사로 표시).

패키지 이름(docker-ce)과 버전 문자열(2번째 열)을 하이픈(-)으로 구분한 정규화된 패키지 이름으로 특정 버전을 설치해요. 예를 들어 docker-ce-3:29.8.1-1.el9.

<VERSION_STRING>을 원하는 버전으로 바꾸고 다음 명령을 실행해 설치해요:

$ sudo dnf install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-buildx-plugin docker-compose-plugin

이 명령은 Docker를 설치하지만 Docker를 시작하지는 않아요. 또한 docker 그룹을 만들지만 기본적으로 그룹에 사용자를 추가하지 않아요.

  1. Docker Engine을 시작해요.
$ sudo systemctl enable --now docker

이것은 Docker systemd 서비스가 시스템 부팅 시 자동으로 시작되도록 구성해요. Docker가 자동으로 시작되길 원하지 않으면 대신 sudo systemctl start docker를 사용해요.

  1. hello-world 이미지를 실행해 설치가 성공했는지 확인해요:
$ sudo docker run hello-world

이 명령은 테스트 이미지를 다운로드해 컨테이너에서 실행해요. 컨테이너가 실행되면 확인 메시지를 출력하고 종료해요.

이제 Docker Engine을 성공적으로 설치하고 시작했어요.

Tip root 없이 실행하려 할 때 오류가 발생하나요? docker 사용자 그룹이 존재하지만 사용자가 없어서 Docker 명령에 sudo를 사용해야 해요. 비특권 사용자가 Docker 명령을 실행하고 기타 선택 구성 단계를 수행하려면 Linux postinstall을 계속 보세요.

Docker Engine 업그레이드 (Upgrade Docker Engine)

Docker Engine을 업그레이드하려면 설치 지침을 따르고, 설치할 새 버전을 선택해요.

패키지에서 설치 (Install from a package)

Docker의 rpm 저장소로 Docker Engine을 설치할 수 없다면 릴리스용 .rpm 파일을 다운로드해 수동으로 설치할 수 있어요. Docker Engine을 업그레이드할 때마다 새 파일을 다운로드해야 해요.

  1. https://download.docker.com/linux/rhel/로 이동해요.
  2. 목록에서 RHEL 버전을 선택해요.
  3. 적용 가능한 아키텍처(x86_64, aarch64, s390x)를 선택하고 stable/Packages/로 이동해요.
  4. Docker Engine, CLI, containerd, Docker Compose 패키지의 다음 rpm 파일을 다운로드해요:
    • containerd.io-<version>.<arch>.rpm
    • docker-ce-<version>.<arch>.rpm
    • docker-ce-cli-<version>.<arch>.rpm
    • docker-buildx-plugin-<version>.<arch>.rpm
    • docker-compose-plugin-<version>.<arch>.rpm
  5. Docker Engine을 설치하고, 다음 경로를 패키지를 다운로드한 경로로 변경해요.
$ sudo dnf install ./containerd.io-<version>.<arch>.rpm \
  ./docker-ce-<version>.<arch>.rpm \
  ./docker-ce-cli-<version>.<arch>.rpm \
  ./docker-buildx-plugin-<version>.<arch>.rpm \
  ./docker-compose-plugin-<version>.<arch>.rpm

Docker가 설치되지만 시작되지는 않아요. docker 그룹이 생성되지만 그룹에 사용자는 추가되지 않아요.

  1. Docker Engine을 시작해요.
$ sudo systemctl enable --now docker

이것은 Docker systemd 서비스가 시스템 부팅 시 자동으로 시작되도록 구성해요. Docker가 자동으로 시작되길 원하지 않으면 대신 sudo systemctl start docker를 사용해요.

  1. hello-world 이미지를 실행해 설치가 성공했는지 확인해요:
$ sudo docker run hello-world

이 명령은 테스트 이미지를 다운로드해 컨테이너에서 실행해요. 컨테이너가 실행되면 확인 메시지를 출력하고 종료해요.

이제 Docker Engine을 성공적으로 설치하고 시작했어요.

Tip root 없이 실행하려 할 때 오류가 발생하나요? docker 사용자 그룹이 존재하지만 사용자가 없어서 Docker 명령에 sudo를 사용해야 해요. 비특권 사용자가 Docker 명령을 실행하고 기타 선택 구성 단계를 수행하려면 Linux postinstall을 계속 보세요.

Docker Engine 업그레이드 (Upgrade Docker Engine)

Docker Engine을 업그레이드하려면 더 새로운 패키지 파일을 다운로드하고, dnf install 대신 dnf upgrade를 사용하고 새 파일을 가리켜 설치 절차를 반복해요.

편의 스크립트로 설치 (Install using the convenience script)

Docker는 https://get.docker.com/에서 개발 환경에 Docker를 비대화형으로 설치하는 편의 스크립트를 제공해요. 편의 스크립트는 프로덕션 환경에 권장되지 않지만, 필요에 맞는 프로비저닝 스크립트를 만드는 데 유용해요. 패키지 저장소를 사용해 설치하는 방법을 배우려면 저장소를 사용한 설치 단계도 참고하세요. 스크립트의 소스 코드는 오픈소스이며, GitHub의 docker-install 저장소에서 찾을 수 있어요.

인터넷에서 다운로드한 스크립트는 로컬에서 실행하기 전에 항상 검토하세요. 설치 전에 편의 스크립트의 잠재적 위험과 한계에 익숙해지세요:

  • 스크립트는 실행하려면 root 또는 sudo 권한이 필요해요.
  • 스크립트는 Linux 배포판과 버전을 감지해 패키지 관리 시스템을 구성하려 시도해요.
  • 스크립트는 대부분의 설치 매개변수를 사용자 지정할 수 없게 해요.
  • 스크립트는 확인 없이 의존성과 권장 사항을 설치해요. 호스트 머신의 현재 구성에 따라 많은 수의 패키지를 설치할 수 있어요.
  • 기본적으로 스크립트는 Docker, containerd, runc의 최신 안정 릴리스를 설치해요. 이 스크립트로 머신을 프로비저닝할 때 Docker의 예상치 못한 메이저 버전 업그레이드가 발생할 수 있어요. 프로덕션 시스템에 배포하기 전에 항상 테스트 환경에서 업그레이드를 테스트하세요.
  • 스크립트는 기존 Docker 설치를 업그레이드하도록 설계되지 않았어요. 스크립트로 기존 설치를 업데이트하면 의존성이 예상 버전으로 업데이트되지 않아 구식 버전이 될 수 있어요.

Tip 실행 전에 스크립트 단계를 미리 보세요. --dry-run 옵션으로 스크립트를 실행하면 호출될 때 스크립트가 실행할 단계를 알 수 있어요:

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh ./get-docker.sh --dry-run

이 예시는 https://get.docker.com/에서 스크립트를 다운로드하고 실행해 Linux에 최신 안정 릴리스의 Docker를 설치해요:

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
Executing docker install script, commit: 7cae5f8b0decc17d6571f9f52eb840fbc13b2737
<...>

이제 Docker Engine을 성공적으로 설치하고 시작했어요. docker 서비스는 Debian 기반 배포판에서 자동으로 시작돼요. CentOS, Fedora, RHEL 같은 RPM 기반 배포판에서는 적절한 systemctl 또는 service 명령으로 수동으로 시작해야 해요. 메시지가 나타내듯이 비-루트 사용자는 기본적으로 Docker 명령을 실행할 수 없어요.

비특권 사용자로 Docker 사용, 또는 루트리스 모드로 설치? 설치 스크립트는 Docker를 설치·사용하려면 root 또는 sudo 권한이 필요해요. 비-루트 사용자에게 Docker 접근을 부여하려면 Linux 사후 설치 단계를 참고하세요. root 권한 없이 Docker를 설치하거나 루트리스 모드로 실행하도록 구성할 수도 있어요. 루트리스 모드에서 Docker 실행 지침은 비-루트 사용자로 Docker 데몬 실행(루트리스 모드)을 참고하세요.

사전 릴리스 설치 (Install pre-releases)

Docker는 Linux에 Docker의 사전 릴리스를 설치하는 https://test.docker.com/의 편의 스크립트도 제공해요. 이 스크립트는 get.docker.com의 스크립트와 같지만, 패키지 매니저를 Docker 패키지 저장소의 테스트 채널을 사용하도록 구성해요. 테스트 채널은 Docker의 안정 릴리스와 사전 릴리스(베타 버전, 릴리스 후보)를 모두 포함해요. 이 스크립트로 새 릴리스에 조기 접근하고, 안정으로 릴리스되기 전에 테스트 환경에서 평가할 수 있어요.

테스트 채널의 Linux 최신 Docker 버전을 설치하려면 다음을 실행해요:

$ curl -fsSL https://test.docker.com -o test-docker.sh
$ sudo sh test-docker.sh
편의 스크립트 후 Docker 업그레이드 (Upgrade Docker after using the convenience script)

편의 스크립트로 Docker를 설치했다면 패키지 매니저로 직접 Docker를 업그레이드해야 해요. 편의 스크립트를 다시 실행할 이점은 없어요. 다시 실행하면 호스트 머신에 이미 존재하는 저장소를 다시 설치하려 시도해 문제가 발생할 수 있어요.

Docker Engine 제거 (Uninstall Docker Engine)

  1. Docker Engine, CLI, containerd, Docker Compose 패키지를 제거해요:
$ sudo dnf remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
  1. 호스트의 이미지, 컨테이너, 볼륨 또는 사용자 지정 구성 파일은 자동으로 제거되지 않아요. 모든 이미지, 컨테이너, 볼륨을 삭제하려면:
$ sudo rm -rf /var/lib/docker
$ sudo rm -rf /var/lib/containerd

편집한 구성 파일은 수동으로 삭제해야 해요.

다음 단계 (Next steps)

더 알아보기 (Learn more)