Docker를 사용하면 데이터베이스, 웹 앱, 도구를 격리된 컨테이너에서 실행할 수 있어, 새로운 것을 설치해도 서버의 나머지 부분이 망가지지 않습니다. 이 가이드는 Ubuntu에 Docker Engine과 Docker Compose를 설치하고 첫 실제 서비스를 실행합니다.
1. Docker 저장소에서 설치
sudo apt update
sudo apt 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
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" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo docker run hello-world로 설치를 확인하세요.
2. sudo 없이 Docker 실행
sudo usermod -aG docker $USER
newgrp docker
docker 그룹의 구성원은 사실상 그 머신에서 root 수준의 권한을 가지므로, 신뢰하는 사용자만 추가하세요.
3. 첫 Compose 파일
폴더를 만들고 Uptime Kuma 모니터링 도구를 실행하는 compose.yaml을 작성하세요.
mkdir -p ~/kuma && cd ~/kuma
cat > compose.yaml <<'EOF'
services:
kuma:
image: louislam/uptime-kuma:1
restart: unless-stopped
ports:
- "127.0.0.1:3001:3001"
volumes:
- ./data:/app/data
EOF
docker compose up -d
127.0.0.1에 바인딩하면 포트가 공용 인터넷에 노출되지 않습니다. 외부에서 접속하고 싶다면 앞단에 Nginx나 Caddy 같은 리버스 프록시를 두세요.
자주 쓰는 명령어
docker ps는 실행 중인 컨테이너를 나열합니다.docker compose logs -f는 로그를 계속 따라갑니다.docker compose pull && docker compose up -d는 더 새로운 이미지로 업데이트합니다.docker system prune은 사용하지 않는 이미지와 중지된 컨테이너를 삭제합니다.
방화벽에 관한 보안 경고
Docker는 자체 iptables 규칙을 기록합니다. "8080:80"으로 게시한 포트는 UFW가 차단했다고 표시하더라도 인터넷에서 접근할 수 있습니다. 반드시 공개해야 하는 것만 게시하고, 비공개 서비스는 127.0.0.1에 바인딩하며, 포트 스캐너로 외부에서 테스트하세요.
다음에 실행해 볼 것
인기 있는 셀프호스팅 앱으로는 Nextcloud, Vaultwarden, Gitea, Plausible, n8n, Jellyfin 등이 있습니다. 전체 예시는 Nextcloud 셀프호스팅 가이드를 참고하세요.