HELPER VPS

VPS Docker 설치, Ubuntu, Debian, AlmaLinux와 Compose

Docker 공식 저장소로 설치하면 최신 Docker Engine과 Compose 플러그인을 받고, 이후 업데이트도 시스템 업데이트 한 번으로 끝나요. 운영체제별 명령과 설치 뒤에 꼭 해 둘 설정을 순서대로 정리했어요.

가장 빠른 방법: Docker 이미지로 서버 만들기

새 서버를 만든다면 이미지 목록에서 Docker를 고르는 것이 가장 빨라요. Ubuntu 24.04 LTS 위에 Docker Engine과 Docker Compose가 설치된 상태로 시작해서, 로그인하자마자 docker compose up을 실행해요. 앱 소개와 추천 크기는 Docker VPS 페이지에 있어요.

이미 쓰고 있는 서버에 Docker를 더하거나, Debian, AlmaLinux처럼 다른 운영체제를 쓰고 싶다면 아래 순서대로 직접 설치해요. 모든 명령은 root로 접속한 상태를 기준으로 했어요. 일반 사용자로 접속했다면 명령 앞에 sudo를 붙여요.

설치 전에 확인할 것

Docker는 어떤 크기의 서버에서도 돌아가요. 컨테이너 몇 개를 띄우는 개인 프로젝트는 가장 작은 12GB 일반 서버로도 넉넉하고, 데이터베이스와 웹 서버, 캐시를 함께 돌리려면 24GB 이상이 여유로워요. 이미지를 내려받고 빌드하는 일이 많다면 디스크가 빠른 NVMe VPS가 체감 속도를 높여 줘요.

운영체제 저장소에 들어 있는 옛 Docker 패키지가 있다면 먼저 지워서 공식 패키지와 섞이지 않게 해요. 설치돼 있지 않은 패키지는 건너뛰니 그대로 실행해도 괜찮아요.

Ubuntu, Debian
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do apt remove -y $pkg; done

Ubuntu 24.04에 Docker 설치

1단계. 저장소 키와 주소 추가

Ubuntu 24.04
apt update
apt install -y ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" > /etc/apt/sources.list.d/docker.list

2단계. Docker Engine과 Compose 설치

Ubuntu 24.04
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

설치가 끝나면 Docker 서비스가 자동으로 켜지고, 서버를 다시 시작해도 함께 켜져요. 같은 명령이 Ubuntu 22.04와 26.04에서도 그대로 동작해요. 저장소 주소에 들어가는 버전 이름은 /etc/os-release에서 자동으로 읽어요.

Debian 13에 Docker 설치

Debian은 Ubuntu와 순서가 같고 저장소 주소만 linux/debian으로 바뀌어요. Debian 12에서도 같은 명령을 써요.

Debian 13
apt update
apt install -y ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" > /etc/apt/sources.list.d/docker.list
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

AlmaLinux 10에 Docker 설치

AlmaLinux와 Rocky Linux는 Docker의 RHEL 저장소를 써요. 기본으로 들어 있는 Podman과 겹치지 않도록 먼저 정리하고 설치해요. AlmaLinux 9와 Rocky Linux 9, 10에서도 같은 명령이에요.

AlmaLinux 10
dnf remove -y podman buildah runc
dnf -y install dnf-plugins-core
dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
dnf -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl enable --now docker

처음 설치할 때 저장소 서명 키를 받아들일지 물으면 y를 눌러요. RHEL 계열은 설치 뒤에 서비스가 자동으로 켜지지 않아서 마지막 줄의 systemctl enable --now docker로 지금 켜고, 부팅할 때도 켜지게 해요.

설치 확인과 첫 컨테이너

아래 명령으로 시험 컨테이너를 한 번 띄워 봐요. Hello from Docker로 시작하는 안내가 나오면 엔진, 이미지 내려받기, 컨테이너 실행이 모두 잘 되는 거예요. --rm을 붙여서 실행이 끝나면 컨테이너가 바로 정리돼요.

터미널
docker run --rm hello-world
docker compose version

일반 사용자로도 Docker를 쓰고 싶다면 그 사용자를 docker 그룹에 넣고 다시 로그인해요. docker 그룹은 root와 같은 권한을 가지니, 믿을 수 있는 사용자만 넣어요.

터미널
usermod -aG docker 사용자이름

Docker Compose로 서비스 올리기

Compose는 컨테이너 설정을 YAML 파일 하나에 적어 두고 한 줄로 띄우는 방법이에요. 서버를 옮기거나 새로 만들어도 같은 파일만 있으면 같은 환경이 다시 서요. 예를 들어 Nginx 웹 서버 하나를 띄우는 파일은 이렇게 생겼어요.

터미널
mkdir -p /opt/web && cd /opt/web
cat > compose.yaml <<'EOF'
services:
  web:
    image: nginx:stable
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html:ro
    restart: unless-stopped
EOF
docker compose up -d

브라우저로 http://YOUR_SERVER_IP를 열면 Nginx 화면이 나와요. html 폴더에 index.html을 넣으면 그 파일이 보이고요. 자주 쓰는 명령은 아래 네 가지면 충분해요.

  • docker compose ps: 지금 도는 컨테이너와 포트를 보여 줘요.
  • docker compose logs -f: 실시간 로그를 따라가요. Ctrl+C로 빠져나와요.
  • docker compose pull && docker compose up -d: 새 이미지를 받아 컨테이너를 새 버전으로 바꿔요.
  • docker compose down: 컨테이너를 멈추고 정리해요. 볼륨에 담긴 데이터는 그대로 남아요.

restart: unless-stopped를 적어 두면 서버를 재시작했을 때 컨테이너도 자동으로 다시 떠요. 직접 멈춘 컨테이너만 멈춘 채로 남아요.

방화벽과 포트 공개 설정

Docker는 ports:로 공개한 포트를 직접 방화벽 규칙(iptables)에 넣어서 열어요. 그래서 ufw에 허용하지 않은 포트도 ports:에 적으면 바깥에서 접속돼요. 바깥에 보여 줄 필요가 없는 데이터베이스나 관리 화면은 아래처럼 127.0.0.1에만 묶어 두면 서버 안에서만 접속해요.

compose.yaml
    ports:
      - "127.0.0.1:5432:5432"

웹 서비스는 80번과 443번만 공개하고, 나머지는 같은 Compose 네트워크 안에서 서비스 이름으로 서로 부르게 하면 깔끔해요. 서버 전체의 기본 방화벽은 기본 방화벽 가이드를 따라 SSH, HTTP, HTTPS만 열어 두세요.

로그와 디스크 관리

컨테이너 로그는 따로 정하지 않으면 계속 쌓여요. /etc/docker/daemon.json에 아래처럼 local 로그 드라이버를 지정하면 로그가 압축되고 크기가 정해진 만큼만 보관돼요. 저장한 뒤 systemctl restart docker를 실행하면 새로 만드는 컨테이너부터 적용돼요.

/etc/docker/daemon.json
{
  "log-driver": "local"
}

쓰지 않는 이미지와 멈춘 컨테이너도 디스크를 차지해요. docker system df로 쓰는 양을 보고, docker image prune -a로 지금 쓰지 않는 이미지를 정리해요. 데이터가 많아지면 서버에 NVMe 블록 디스크를 붙여 Docker 데이터 폴더로 쓰는 방법도 있어요.

데이터 지키기와 다음 단계

컨테이너는 언제든 지우고 다시 만들 수 있지만 볼륨에 담긴 데이터는 다시 만들 수 없어요. 데이터베이스는 정기적으로 덤프 파일을 남기고, 서버 전체는 자동 백업이나 스냅샷으로 함께 지키면 든든해요. 방법은 백업과 스냅샷 가이드에 있어요.

Docker로 워드프레스를 올리는 Compose 파일은 워드프레스 설치 가이드에 있어요. 여러 앱을 화면에서 배포하고 HTTPS 인증서까지 자동으로 붙이고 싶다면 Coolify나 Dokploy 이미지로 서버를 만들어 보세요. 컨테이너 전용으로 쓰기 좋은 크기는 컨테이너 VPS에 정리돼 있어요.

함께 보면 좋은 가이드

이 가이드와 이어서 해 두면 좋은 설정이에요.

가이드 전체 보기