VPS에서 Docker 시작하기
ApexVPS 팀 작성 • 최종 업데이트: 2026년 7월 • 8분 읽기
VPS에서 Docker를 실행하는 것은 빈 Ubuntu 서버에서 실행 중인 웹 앱, 데이터베이스, 또는 자체 호스팅 서비스까지 단 몇 분 만에 도달할 수 있는 가장 빠른 방법입니다. 시스템 패키지와 복잡한 의존성 문제를 해결하는 대신, 미리 빌드된 이미지를 가져와 컨테이너를 시작하면 됩니다. 이 초보자 가이드는 Ubuntu 또는 Debian에 Docker와 Docker Compose를 설치하는 방법, 알아야 할 핵심 개념, 첫 번째 컨테이너 실행, 볼륨으로 데이터 유지, 그리고 보안 문제를 방지하기 위한 몇 가지 기본 사항을 안내합니다.
VPS에서 Docker를 실행해야 하는 이유
가상 사설 서버는 전체 루트 액세스와 전용 리소스를 제공하므로 컨테이너에 딱 맞습니다. Docker를 설치하면 많은 격리된 서비스를 서로 간섭 없이 나란히 실행할 수 있습니다. 각 컨테이너에는 자체 라이브러리가 포함되어 있어 Node 앱, Postgres 데이터베이스, 리버스 프록시가 한 머신에서 깔끔하게 공존할 수 있습니다. 목표가 VPS에서 앱을 자체 호스팅하는 것이라면(개인 클라우드, 위키, 미디어 서버 등) Docker는 모든 서비스를 정돈되고 재현 가능하게 유지해 줍니다.
컨테이너는 이식성도 뛰어납니다. 노트북에서 실행되는 동일한 Compose 파일이 서버에서도 실행되므로 "내 컴퓨터에서는 되는데"라는 고전적인 문제가 사라집니다. 실수 후 서비스를 다시 빌드하는 데는 몇 초면 충분하며, 패키지를 다시 설치하는 데 오후를 허비할 필요가 없습니다.
핵심 개념을 쉬운 말로
명령줄을 다루기 전에 네 가지 구성 요소를 알아 두면 도움이 됩니다:
- 이미지 — 애플리케이션과 실행에 필요한 모든 것이 포함된 읽기 전용 템플릿입니다. Docker Hub 같은 레지스트리에서 이미지를 다운로드합니다. 스냅샷이나 클래스라고 생각하면 됩니다.
- 컨테이너 — 이미지의 실행 인스턴스입니다. 컨테이너는 자유롭게 시작, 중지, 삭제할 수 있습니다. 클래스에서 생성된 객체처럼 동일한 이미지에서 여러 컨테이너를 실행할 수 있습니다.
- 볼륨 — 컨테이너의 쓰기 가능한 계층 밖에 있는 영구 저장소입니다. 컨테이너가 교체될 때 데이터베이스와 업로드된 파일을 안전하게 보호하는 방법이 볼륨입니다.
- 네트워크 — 컨테이너가 이름으로 서로 통신할 수 있게 해주는 가상 네트워크입니다. Docker는 각 Compose 프로젝트에 대해 자동으로 네트워크를 하나 만들어 앱이 친근한 호스트 이름으로 데이터베이스에 접근할 수 있게 합니다.
1단계: Ubuntu 또는 Debian에 Docker 설치
Docker Engine을 설치하는 가장 간단하고 공식적으로 지원되는 방법은 편의 스크립트를 사용하는 것입니다. SSH로 서버에 연결하고 다음을 실행하세요:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
이렇게 하면 Docker Engine과 Compose 플러그인이 설치됩니다. 완료되면 버전을 확인하세요:
docker --version
docker compose version
기본적으로 Docker는 sudo을(를) 필요로 합니다. 일반 사용자로 실행하려면 docker 그룹에 자신을 추가한 후 변경 사항이 적용되도록 로그아웃했다가 다시 로그인하세요:
sudo usermod -aG docker $USER
대부분의 시스템에서 Docker는 부팅 시 자동으로 시작됩니다. 수동으로 활성화해야 하는 경우는 다음과 같습니다:
sudo systemctl enable --now docker
패키지 저장소 방법을 선호하거나 특정 배포판에 대한 전체 세부 정보를 원하시나요? 공식 Docker 설치 문서에서 모든 옵션을 다룹니다. 위의 편의 스크립트는 새 VPS에 이상적입니다.
2단계: 첫 번째 컨테이너 실행
클래식 hello-world 이미지로 설치를 테스트하세요:
docker run hello-world
Docker가 이미지를 가져와 한 번 실행하고 확인 메시지를 출력합니다. 이제 실제로 볼 수 있는 것을 실행해 봅시다. 이 명령은 백그라운드에서 Nginx 웹 서버를 시작하고 호스트의 포트 8080을 컨테이너의 포트 80에 매핑합니다:
docker run -d -p 8080:80 --name web nginx
브라우저에서 http://your-server-ip:8080을(를) 열면 Nginx 환영 페이지가 표시됩니다. 알아 두면 유용한 몇 가지 플래그:
-d컨테이너를 분리된(백그라운드) 상태로 실행합니다.-p 8080:80포트를host:container(으)로 게시합니다.--name web컨테이너에 기억하기 쉬운 이름을 지정합니다.
실행 중인 항목을 확인하고, 작업이 끝나면 컨테이너를 중지하고 제거하세요:
docker ps
docker stop web
docker rm web
몇 가지 명령으로 대부분의 일상 작업을 처리할 수 있습니다. docker images은(는) 가져온 이미지를 나열하고, docker logs web은(는) 문제 해결을 위해 컨테이너의 출력을 표시하며, docker exec -it web bash은(는) 실행 중인 컨테이너 내부에서 셸을 열어 살펴볼 수 있게 합니다. 이 다섯 여섯 개의 명령을 배우면 작은 서버를 자신 있게 관리할 수 있으며, 필요할 때 나머지는 찾아보면 됩니다.
3단계: Docker Compose로 다중 컨테이너 앱 사용
긴 docker run 명령을 입력하는 것은 금방 지겹습니다. Docker Compose를 사용하면 전체 스택을 단일 파일로 설명하고 한 번의 명령으로 실행할 수 있습니다. compose.yaml라는 파일을 만드세요:
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- web-data:/usr/share/nginx/html
restart: unless-stopped
volumes:
web-data:
같은 디렉터리에서 백그라운드로 모든 것을 시작합니다:
docker compose up -d
Compose가 네트워크, 명명된 볼륨, 컨테이너를 자동으로 생성합니다. 유용한 보조 명령:
docker compose ps
docker compose logs -f
docker compose down
restart: unless-stopped 정책 덕분에 서비스는 재부팅이나 충돌 후 자동으로 다시 시작됩니다 — 24시간 내내 지켜보지 않아도 되는 서버에 매우 유용합니다.
4단계: 볼륨으로 데이터 유지하기
초보자가 가장 흔히 실수하는 부분입니다. 컨테이너의 자체 파일 시스템에 기록된 것은 해당 컨테이너가 제거되거나 재생성될 때 사라집니다. 데이터를 유지하려면 볼륨에 저장하세요. 일반적인 방법은 두 가지입니다:
- 명명된 볼륨 — Docker가 관리하며 데이터베이스에 이상적입니다. 위의 Compose 예제는
web-data라는 볼륨을 사용합니다. - 바인드 마운트 — 호스트의 폴더를 컨테이너에 직접 매핑합니다. 예:
./config:/etc/app. 직접 편집하려는 구성 파일에 적합합니다.
명령줄에서 볼륨을 검사하고 관리합니다:
docker volume ls
docker volume inspect web-data
중요한 경로가 볼륨을 가리키는 한, 컨테이너를 하루 종일 삭제하고 재구축해도 데이터는 전혀 손실되지 않습니다. 서버 백업 시 볼륨 디렉터리를 백업에 포함하세요.
5단계: 이미지 및 컨테이너 업데이트
컨테이너 이미지도 다른 소프트웨어와 마찬가지로 보안 및 기능 업데이트를 받습니다. Compose 스택 업데이트는 두 단계로 이루어집니다: 최신 이미지를 가져온 다음 컨테이너를 재생성합니다.
docker compose pull
docker compose up -d
데이터가 볼륨에 저장되므로 재생성은 안전합니다. 시간이 지나면 사용하지 않는 이미지가 쌓여 디스크 공간을 차지하니 가끔 정리하세요:
docker image prune
예측 가능하고 반복 가능한 업데이트를 원한다면 특정 버전 태그(예: latest 대신 postgres:16)에 고정하세요. 예상치 못한 변화를 피할 수 있습니다.
초보자를 위한 기본 Docker 보안
컨테이너는 편리하지만 마법의 보안 경계는 아닙니다. 몇 가지 습관만으로 문제를 예방할 수 있습니다:
- 신뢰하는 이미지만 실행하세요. 공식 이미지나 잘 알려진 게시자를 선호하세요. 튜토리얼에서 권장한다고 해서 임의의 이미지를 root 권한으로 실행하지 마세요 — 신뢰할 수 없는 이미지는 서버에서 코드를 실행할 수 있습니다.
- 컨테이너에서 root 권한을 제거하세요. 많은 공식 이미지가 비-root 사용자를 지원하거나, Dockerfile의
USER지시문으로 설정할 수 있습니다. 제한된 사용자로 실행하면 앱이 손상되었을 때 피해 범위를 줄일 수 있습니다. - 필요한 포트만 공개하세요. 모든
-p플래그는 인터넷에 문을 엽니다. 데이터베이스는 내부 Docker 네트워크에 두고 웹 프론트엔드만 노출하세요. - 호스트 OS를 패치하세요. Docker 보안은 안전한 서버에서 시작됩니다.
sudo apt update && sudo apt upgrade를 정기적으로 실행하고 SSH를 잠그세요.
무언가를 공개적으로 노출하기 전에 VPS를 처음 10분 안에 보호하는 방법에 대한 동반 체크리스트를 확인하세요. SSH 키, 방화벽, 자동 업데이트를 다루며 Docker 호스트와 완벽하게 어울립니다.
Docker에 적합한 VPS 선택
Docker는 저사양 하드웨어에서도 실행되지만, 여러 컨테이너를 운영할 때는 전용 리소스가 큰 차이를 만듭니다. 공유 및 오버셀 호스팅은 최악의 순간에 이웃 사용자가 데이터베이스 성능을 저하시킬 수 있습니다. ApexVPS는 진정한 전용 vCPU, NVMe SSD 스토리지, 전체 root 권한을 제공하므로 컨테이너가 지불한 성능을 온전히 발휘합니다. 모든 요금제는 Ubuntu, Debian 등 인기 있는 배포판을 지원하며, 가입 시 SSH 키를 바로 등록할 수 있습니다.
결제는 OxaPay를 통한 암호화폐만 가능하며, Bitcoin, Ethereum, USDT 및 30개 이상의 암호화폐를 지원합니다. 신용카드, 은행 계좌, KYC가 필요 없습니다. 액세스 세부 정보를 받을 이메일만 제공하면 됩니다. 사양과 리전을 ApexVPS 가격 페이지에서 비교하여 컨테이너 워크로드에 맞는 요금제를 선택하세요.
자주 묻는 질문
VPS에서 Docker를 실행하려면 많은 RAM이 필요한가요?
아니요. Docker 자체는 가볍고 오버헤드가 거의 없습니다. 하나 또는 두 개의 컨테이너는 2GB RAM에서 원활하게 실행되며, 4GB 이상이면 데이터베이스와 여러 서비스를 동시에 실행할 수 있는 여유가 있습니다.
docker-compose인가요, docker compose인가요?
최신 설치에서는 Compose가 플러그인으로 제공되므로 명령어는 docker compose (공백 포함)입니다. 이전 독립 실행형 docker-compose 바이너리도 여전히 작동하지만 단계적으로 제거되고 있습니다. 새로 설치할 때는 플러그인 버전을 사용하세요.
컨테이너를 삭제하면 내 데이터는 어디에 저장되나요?
컨테이너 내부에 기록된 모든 것은 삭제 시 손실됩니다. 중요한 데이터는 명명된 볼륨이나 바인드 마운트에 저장하여 컨테이너 재생성 후에도 유지되도록 하세요. 이것이 데이터베이스와 업로드를 안전하게 보호하는 방법입니다.
Docker 지원 VPS 비용을 암호화폐로 지불할 수 있나요?
네. ApexVPS 결제는 OxaPay를 통한 암호화폐 전용이며 Bitcoin, Ethereum, USDT 및 30개 이상의 코인을 지원합니다. 가입 시 이메일만 필요하며 신용카드나 신원 확인이 없습니다.