Debian에 Docker Engine 설치하기

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

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

출처: 문서

본문

사전 요구 사항 (Prerequisites)

방화벽 제한 (Firewall limitations)

Warning Docker를 설치하기 전에 다음 보안 영향과 방화벽 비호환성을 고려하세요.

  • ufw 또는 firewalld로 방화벽 설정을 관리한다면, Docker로 컨테이너 포트를 노출할 때 이 포트들이 방화벽 규칙을 우회한다는 점에 유의하세요. 자세한 내용은 Docker와 ufw를 참고하세요.
  • Docker는 iptables-nftiptables-legacy와만 호환돼요. nft로 만든 방화벽 규칙은 Docker가 설치된 시스템에서 지원되지 않아요. 사용하는 모든 방화벽 규칙셋이 iptables 또는 ip6tables로 만들어졌는지 확인하고 DOCKER-USER 체인에 추가해야 해요. 패킷 필터링과 방화벽 참고.

OS 요구 사항 (OS requirements)

Docker Engine을 설치하려면 다음 Debian 버전 중 하나가 필요해요:

  • Debian Trixie 13 (stable)
  • Debian Bookworm 12 (oldstable)

Debian용 Docker Engine은 x86_64(또는 amd64), armhf(arm/v7), arm64, ppc64le(ppc64el) 아키텍처와 호환돼요.

이전 버전 제거 (Uninstall old versions)

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

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

제거할 비공식 패키지는:

  • docker.io
  • docker-compose
  • docker-doc
  • docker-buildx
  • podman-docker

또한 Docker Engine은 containerdrunc에 의존해요. Docker Engine은 이 의존성들을 containerd.io라는 단일 번들로 묶어요. 이전에 containerd 또는 runc를 설치했다면 Docker Engine과 함께 번들된 버전과의 충돌을 피하기 위해 제거해요.

다음 명령으로 충돌하는 모든 패키지를 제거해요:

$ sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-doc docker-buildx podman-docker containerd runc | cut -f1)

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

/var/lib/docker/에 저장된 이미지, 컨테이너, 볼륨, 네트워크는 Docker를 제거해도 자동으로 제거되지 않아요. 깨끗한 설치로 시작하고 기존 데이터를 정리하는 것을 선호한다면 uninstall Docker Engine 섹션을 읽으세요.

설치 방법 (Installation methods)

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

  • Docker Engine은 Linux용 Docker Desktop과 함께 번들로 제공돼요. 시작하는 가장 쉽고 빠른 방법이에요.
  • Docker의 apt 저장소에서 Docker Engine을 설정·설치해요.
  • 수동으로 설치하고 업그레이드를 수동으로 관리해요.
  • 편의 스크립트 사용. 테스트 및 개발 환경에서만 권장돼요.

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

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

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

  1. Docker의 apt 저장소를 설정해요.
# Add Docker's official GPG key:
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/debian
Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

sudo apt update

Note Debian testing이나 Kali Linux 같은 파생 배포판을 사용한다면, 버전 코드네임을 출력할 것으로 예상되는 이 명령의 일부를 대체해야 할 수도 있어요:

$(. /etc/os-release && echo "$VERSION_CODENAME")

이 부분을 trixie 같은 해당 Debian 릴리스의 코드네임으로 바꾸세요.

  1. Docker 패키지를 설치해요. 최신 버전을 설치하려면 다음을 실행해요:
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

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

$ apt list --all-versions docker-ce

docker-ce/bookworm 5:29.8.1-1~debian.12~bookworm <arch>
docker-ce/bookworm 5:29.8.0-1~debian.12~bookworm <arch>
...

원하는 버전을 선택해 설치해요:

$ VERSION_STRING=5:29.8.1-1~debian.12~bookworm
$ sudo apt install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin

Note 설치 후 Docker가 실행 중인지 확인해요:

$ sudo systemctl status docker

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을 업그레이드하려면 설치 지침의 2단계를 따르고, 설치할 새 버전을 선택해요.

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

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

  1. https://download.docker.com/linux/debian/dists/로 이동해요.
  2. 목록에서 Debian 버전을 선택해요.
  3. pool/stable/로 이동해 적용 가능한 아키텍처(amd64, armhf, arm64, s390x)를 선택해요.
  4. Docker Engine, CLI, containerd, Docker Compose 패키지의 다음 deb 파일을 다운로드해요:
    • containerd.io_<version>_<arch>.deb
    • docker-ce_<version>_<arch>.deb
    • docker-ce-cli_<version>_<arch>.deb
    • docker-buildx-plugin_<version>_<arch>.deb
    • docker-compose-plugin_<version>_<arch>.deb
  5. .deb 패키지를 설치해요. 다음 예시의 경로를 Docker 패키지를 다운로드한 위치로 업데이트해요.
$ sudo dpkg -i ./containerd.io_<version>_<arch>.deb \
  ./docker-ce_<version>_<arch>.deb \
  ./docker-ce-cli_<version>_<arch>.deb \
  ./docker-buildx-plugin_<version>_<arch>.deb \
  ./docker-compose-plugin_<version>_<arch>.deb

Note 설치 후 Docker가 실행 중인지 확인해요:

$ sudo systemctl status docker

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 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 apt purge 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
  1. 소스 목록과 키링을 제거해요
$ sudo rm /etc/apt/sources.list.d/docker.sources
$ sudo rm /etc/apt/keyrings/docker.asc

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

다음 단계 (Next steps)

더 알아보기 (Learn more)