Ubuntu에 Docker를 설치할 때는 Ubuntu 기본 저장소의 docker.io보다 Docker 공식 apt 저장소를 쓰는 편이 최신 버전과 Compose 플러그인을 함께 받기에 유리합니다. 순서는 충돌 패키지 제거, GPG 키와 저장소 등록, docker-ce 설치, hello-world 확인입니다. 커널 7.0 계열을 쓰는 Ubuntu 26.04 LTS(Resolute Raccoon)도 Docker 공식 문서의 지원 목록에 들어 있습니다.

바로 설치만 하고 싶다면 아래 명령을 순서대로 실행하면 됩니다. 각 단계의 의미와 막혔을 때 볼 곳은 이어지는 본문에 정리했습니다.
# 1) 충돌 패키지 제거 (설치돼 있지 않으면 그냥 넘어갑니다)
sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc | cut -f1)
# 2) GPG 키 등록
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/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 3) 저장소 등록
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
# 4) 설치와 확인
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo docker run hello-world
설치 전에 Ubuntu 버전과 아키텍처는 어떻게 확인하나요?
uname -a에는 커널 버전만 나옵니다. 7.0.0-28-generic 같은 값만으로는 Ubuntu 릴리스를 단정할 수 없으니, 저장소 주소에 들어갈 코드네임은 /etc/os-release에서 직접 확인하는 것이 정확합니다.
cat /etc/os-release | grep -E 'VERSION=|CODENAME'
dpkg --print-architecture
Docker 문서 기준으로 지원되는 64비트 Ubuntu는 26.10(Stonking), 26.04 LTS(Resolute), 24.04 LTS(Noble), 22.04 LTS(Jammy)입니다. 아키텍처는 amd64(x86_64), arm64, armhf, s390x, ppc64el을 지원합니다. 결과가 resolute와 amd64로 나오면 그대로 진행하면 됩니다. Linux Mint 같은 파생 배포판은 동작하더라도 공식 지원 대상은 아니라는 점은 알아 두는 편이 좋습니다.
다음으로 Ubuntu가 따로 배포하는 비공식 패키지를 정리합니다. docker.io, docker-compose, docker-compose-v2, docker-doc, podman-docker가 남아 있으면 공식 패키지와 충돌할 수 있습니다. containerd나 runc를 따로 설치했다면 이것도 지웁니다. Docker 공식 패키지는 이 둘을 containerd.io 하나로 묶어서 제공하기 때문입니다. 제거해도 /var/lib/docker에 있는 이미지와 컨테이너, 볼륨은 자동으로 지워지지 않습니다.
Docker 공식 apt 저장소로 설치하는 방법

저장소 등록은 두 단계입니다. 먼저 패키지 서명을 검증할 GPG 키를 /etc/apt/keyrings/docker.asc에 받아 두고, 그다음 /etc/apt/sources.list.d/docker.sources 파일에 저장소 정보를 적습니다. 요즘 Docker 문서는 예전의 한 줄짜리 docker.list 대신 이 deb822 형식을 안내합니다. 위 빠른 설치 블록의 2번과 3번이 바로 이 과정입니다.
Suites 줄은 /etc/os-release에서 코드네임을 읽어 자동으로 채웁니다. 26.04라면 resolute가 들어가고, download.docker.com에도 resolute 경로가 실제로 열려 있습니다. 코드네임을 손으로 바꿔 넣을 필요는 없습니다.
저장소를 등록하고 sudo apt update를 했을 때 오류가 없으면 패키지를 설치합니다. docker-ce가 엔진이고 docker-ce-cli가 명령줄 도구입니다. docker-buildx-plugin과 docker-compose-plugin을 같이 설치하면 docker compose 명령도 바로 쓸 수 있습니다. 특정 버전으로 맞춰야 한다면 설치 가능한 버전부터 확인합니다.
apt list --all-versions docker-ce
Docker가 제대로 설치됐는지 확인하기 (hello-world)
설치가 끝나면 Docker 서비스는 보통 자동으로 시작됩니다. 아래 명령으로 상태를 보고 테스트 컨테이너를 실행해 봅니다.
sudo systemctl status docker
sudo docker version
sudo docker run hello-world
docker compose version
hello-world는 이미지를 받아 컨테이너로 실행한 뒤 안내 문구를 출력하고 종료합니다. “Hello from Docker!”가 보이면 이미지 다운로드와 컨테이너 실행까지 정상입니다. 서비스가 꺼져 있다면 sudo systemctl enable –now docker로 바로 켜고, 부팅할 때 자동으로 시작되게 설정할 수 있습니다.
sudo 없이 docker 명령을 쓰려면? (docker 그룹)

docker 명령은 /var/run/docker.sock 유닉스 소켓을 통해 root 권한으로 도는 dockerd와 통신합니다. 이 소켓은 root와 docker 그룹만 쓸 수 있으므로, 사용자를 docker 그룹에 넣으면 sudo 없이 쓸 수 있습니다.
sudo groupadd docker # 이미 있으면 메시지만 나오고 넘어갑니다
sudo usermod -aG docker $USER
newgrp docker # 또는 로그아웃 후 다시 로그인
docker run hello-world
편하긴 하지만 주의할 점이 있습니다. docker 그룹 권한은 사실상 root 권한과 같습니다. 호스트의 / 를 컨테이너에 마운트하는 것만으로 시스템 전체를 건드릴 수 있습니다. 메일 서버처럼 외부에 열린 운영 서버라면 신뢰하는 관리자 계정만 그룹에 넣는 것이 좋고, 여러 사람이 함께 쓰는 서버라면 rootless 모드를 검토해 볼 만합니다.
같은 이유로 방화벽도 한 번 짚고 가야 합니다. Docker 문서에 따르면 ufw나 firewalld를 쓰는 서버에서 -p로 컨테이너 포트를 노출하면 그 포트는 방화벽 규칙을 우회합니다. 포트를 외부에 열 생각이 없다면 -p 127.0.0.1:8080:80처럼 로컬 주소에만 바인딩하는 습관이 안전합니다.
Docker 설치 후 자주 나는 오류와 해결 방법

permission denied while trying to connect to the Docker daemon socket
docker 그룹에 들어가지 않았거나, 그룹에 추가한 뒤 세션을 새로 열지 않은 경우입니다. id 명령 결과에 docker가 보이는지 먼저 확인합니다. 없다면 usermod 뒤에 다시 로그인합니다. 예전에 sudo로 docker를 쓰다가 ~/.docker 폴더가 root 소유가 됐다면 아래처럼 소유자를 되돌립니다.
id
sudo chown "$USER":"$USER" "$HOME/.docker" -R
sudo chmod g+rwx "$HOME/.docker" -R
Cannot connect to the Docker daemon at unix:///var/run/docker.sock
권한 문제가 아니라 dockerd가 실행 중이 아닐 때 나는 메시지입니다. 서비스 상태와 로그를 보면 원인이 대부분 드러납니다. daemon.json 문법 오류나 스토리지 드라이버 문제가 흔한 원인입니다.
sudo systemctl status docker
sudo journalctl -u docker --no-pager -n 50
sudo systemctl restart docker
NO_PUBKEY, GPG error, Unable to locate package docker-ce
apt update 단계에서 서명 오류가 난다면 docker.asc 파일이 없거나 읽기 권한이 없는 경우가 많습니다. ls -l /etc/apt/keyrings/docker.asc로 확인하고 chmod a+r을 다시 실행합니다. docker-ce를 찾을 수 없다는 메시지는 저장소 파일이 잘못됐거나 apt update를 빼먹었을 때 나옵니다. 예전 방식의 docker.list와 새 docker.sources가 함께 있으면 Signed-By 값 충돌이 날 수 있으니 하나만 남깁니다.
ls /etc/apt/sources.list.d/ | grep -i docker
cat /etc/apt/sources.list.d/docker.sources
apt-cache policy docker-ce
Ubuntu Docker 설치 자주 묻는 질문
apt install docker.io로 설치하면 안 되나요?
설치는 됩니다. 다만 Ubuntu가 패키징한 비공식 버전이라 Docker가 배포하는 최신 버전보다 늦을 수 있고, 공식 문서도 충돌 패키지로 분류합니다. 문서와 같은 환경을 원한다면 공식 저장소를 쓰는 것이 낫습니다.
Ubuntu 26.04에서도 공식 저장소를 쓸 수 있나요?
네. Docker 문서의 지원 목록에 Ubuntu Resolute 26.04 (LTS)가 있고, 저장소에도 resolute 경로가 있습니다. 코드네임은 /etc/os-release에서 자동으로 읽으므로 명령을 그대로 쓰면 됩니다.
get.docker.com 스크립트로 설치해도 되나요?
Docker 문서는 편의 스크립트를 테스트나 개발 환경에만 권장합니다. 운영 서버라면 저장소를 직접 등록하는 방식이 무엇이 설치되는지 파악하기 쉽습니다.
Docker를 완전히 삭제하려면 어떻게 하나요?
패키지를 purge한 뒤 데이터 디렉터리를 지웁니다. 이미지와 볼륨이 모두 사라지니 필요한 데이터는 먼저 백업합니다.
sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
sudo rm -rf /var/lib/docker /var/lib/containerd