Docker Ubuntu 설치 스크립트

Ubuntu 서버에 Docker Engine을 설치하는 스크립트와 검증 절차입니다. Docker 공식 apt 저장소, keyring, docker.sources, Compose plugin, 권한과 롤백까지 정리했습니다.

Ubuntu 서버에 Docker Engine을 설치하는 스크립트를 절차입니다. 스크립트는 Docker 공식 저장소를 등록하고 docker-ce를 설치하는 흐름은 맞지만, 최신 Ubuntu 설치 방식에서는 /etc/apt/keyrings/docker.ascdocker.sources를 사용하는 구성이 더 명확합니다. 아래 절차는 Docker 공식 Ubuntu 설치 문서를 기준으로 운영 서버에서 다시 실행해도 추적이 쉽도록 정리한 버전입니다.

설치되는 구성

  • docker-ce: Docker Engine 본체
  • docker-ce-cli: Docker CLI
  • containerd.io: 컨테이너 런타임
  • docker-buildx-plugin: Buildx 플러그인
  • docker-compose-plugin: docker compose 명령 플러그인

설치 전 확인

lsb_release -a
uname -m
systemctl status docker --no-pager 2>/dev/null || true
dpkg -l | egrep 'docker|containerd|runc' || true

배포판 패키지나 과거 설치 패키지가 섞여 있으면 충돌이 날 수 있습니다. 운영 서버에서는 삭제 전 영향 범위를 확인하고, 테스트 서버나 신규 서버에서는 아래처럼 충돌 가능성이 있는 구 패키지를 정리합니다.

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
 sudo apt-get remove -y "$pkg" 2>/dev/null || true
done

install-docker.sh

#!/usr/bin/env bash
set -euo pipefail

DOCKER_USER="${SUDO_USER:-$(whoami)}"

sudo apt-get update
sudo apt-get install -y 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

UBUNTU_CODENAME="$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")"
ARCH="$(dpkg --print-architecture)"

printf '%s\n' \
 'Types: deb' \
 'URIs: https://download.docker.com/linux/ubuntu' \
 "Suites: ${UBUNTU_CODENAME}" \
 'Components: stable' \
 "Architectures: ${ARCH}" \
 'Signed-By: /etc/apt/keyrings/docker.asc' \
 | sudo tee /etc/apt/sources.list.d/docker.sources >/dev/null

sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

sudo systemctl enable --now docker

if ! getent group docker >/dev/null; then
 sudo groupadd docker
fi

sudo usermod -aG docker "$DOCKER_USER"

docker --version
docker compose version
sudo docker run --rm hello-world

실행 방법

chmod +x install-docker.sh
./install-docker.sh

스크립트 실행 후 현재 로그인 세션에는 docker 그룹 권한이 바로 반영되지 않을 수 있습니다. 다시 로그인하거나 아래 명령으로 새 그룹 세션을 열어 확인합니다.

newgrp docker
docker run --rm hello-world

설치 검증

systemctl status docker --no-pager
docker info
docker version
docker compose version
docker run --rm hello-world

docker info에서 Server 정보가 출력되면 Docker daemon과 CLI 통신이 정상입니다. 권한 오류가 나오면 사용자가 docker 그룹에 들어갔는지, 재로그인했는지 확인합니다.

id
getent group docker
groups

docker 그룹 주의사항

docker 그룹에 들어간 사용자는 Docker daemon을 통해 호스트의 root 권한에 준하는 작업을 할 수 있습니다. 개인 실습 서버에서는 편하지만, 운영 서버에서는 docker 그룹 부여 대상을 제한해야 합니다. 자동화 계정이나 일반 사용자에게 무분별하게 부여하지 않는 것이 좋습니다.

자주 나는 오류

증상 확인할 것 조치
Unable to locate package docker-ce Docker apt repository 등록 여부 /etc/apt/sources.list.d/docker.sourcesapt-get update 결과를 확인합니다.
GPG key 오류 /etc/apt/keyrings/docker.asc 권한과 경로 sudo chmod a+r /etc/apt/keyrings/docker.asc를 확인합니다.
permission denied on Docker socket 사용자 docker 그룹 포함 여부 sudo usermod -aG docker $USER 후 재로그인합니다.
daemon이 뜨지 않음 systemd 상태와 journal journalctl -u docker -xe --no-pager로 원인을 확인합니다.

삭제와 롤백

sudo systemctl disable --now docker
sudo apt-get remove -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo rm -f /etc/apt/sources.list.d/docker.sources
sudo rm -f /etc/apt/keyrings/docker.asc
sudo apt-get update

컨테이너 이미지, 볼륨, 네트워크 데이터까지 삭제하려면 /var/lib/docker/var/lib/containerd를 지워야 하지만, 이 작업은 실행 중인 서비스 데이터를 잃을 수 있으므로 반드시 백업과 영향 범위를 확인한 뒤 진행합니다.

# 데이터까지 제거해야 하는 경우에만 실행
sudo rm -rf /var/lib/docker /var/lib/containerd

문서 링크: Docker Engine Ubuntu 설치 문서, Docker Linux post-installation 문서

BGM EVER