Proxmox 게스트의 반복 설치 작업 정리
네이버 블로그에 작성한 Proxmox Commands (2025-05-19) · proxmox8 7 essential steps after installation (2024-04-29)를 바탕으로 설명과 예제를 보완했다.
Proxmox에서 LXC 컨테이너나 VM을 새로 만들 때마다 Docker와 JDK를 설치하는 작업이 반복됐다. 이를 줄이려고 proxmox-commands에 설치 명령을 모았다. 짧은 명령 하나로 실행할 수 있게 만들었지만, 다시 사용하려면 무엇을 어느 환경에 설치하는지부터 구분해야 한다.
호스트와 게스트에 같은 명령을 쓰지 않기
| 실행 위치 | 관리할 대상 |
|---|---|
| Proxmox VE 호스트 | 하이퍼바이저 패키지, 저장소, 네트워크, VM·LXC 설정 |
| Ubuntu VM | Ubuntu 패키지, Docker Engine, 애플리케이션 |
| LXC 컨테이너 | 컨테이너 사용자 공간과 호스트에서 허용한 기능 |
Ubuntu용 Docker 저장소 설정을 Proxmox 호스트에 그대로 적용하면 안 된다. LXC도 VM과 같지 않다. LXC는 호스트 커널을 공유하므로 내부에서 Docker를 실행할 때 권한·namespace·스토리지 조건이 추가로 얽힌다. 독립적인 Docker 실행 환경이 목적이라면 VM 구성을 먼저 검토한다. 이 글의 설치 흐름은 Ubuntu 게스트를 기준으로 한다.
Docker 설치 스크립트가 하는 일
확인한 Ubuntu 설치 스크립트는 다음 순서다.
- APT 인덱스를 갱신하고
ca-certificates,curl을 설치한다. /etc/apt/keyrings에 Docker 저장소의 서명 키를 저장한다.- CPU 아키텍처와 Ubuntu 코드네임을 읽어 APT 저장소 항목을 만든다.
- 인덱스를 다시 갱신하고 Engine·CLI·containerd·Buildx·Compose 플러그인을 설치한다.
이 스크립트는 Docker 설치 명령을 묶은 것이다. 기존 패키지 충돌을 모두 해결하거나 VM을 만들고 방화벽·백업까지 구성하지는 않는다. 또한 현재 원본에는 중간 명령 실패 시 전체 실행을 멈추는 설정이 없다. 자동화에서 사용하려면 실행 결과를 단계별로 확인하고 실패 처리를 보완해야 한다.
다운로드와 실행 분리하기
원문에서는 curl ... | bash로 바로 실행했다. 내용을 검토하거나 특정 버전으로 재현하려면 먼저 파일을 받는 편이 낫다. 아래는 확인한 커밋의 파일을 임시 디렉터리에 다운로드하고 표시하기만 하는 예제다.
workdir=$(mktemp -d) || exit 1
script="$workdir/ubuntu-docker-installation.sh"
curl --fail --show-error --location \
'https://raw.githubusercontent.com/kimbank/proxmox-commands/eaf92541ba9fbe1f6f23e18cd9a9cef450a82629/ubuntu-docker-installation.sh' \
--output "$script" || exit 1
bash -n "$script" || exit 1
sed -n '1,160p' "$script"
bash -n은 셸 문법 검사다. 지원하는 Ubuntu 버전인지, 패키지 저장소가 여전히 유효한지, 실행하면 원하는 결과가 나오는지는 확인하지 않는다. 커밋 고정 역시 내용이 바뀌지 않게 할 뿐 오래된 설치법을 최신으로 만들어 주지는 않는다. 실제 적용 전에 현재 Docker 설치 문서와 비교한다.
설치 명령은 관리자 권한을 요구하며 기존 Docker 패키지나 컨테이너 운영에 영향을 줄 수 있다. 우선 새 테스트 VM에서 검증하고, 필요한 실패 처리를 반영한 스크립트를 실행 대상으로 삼는다.
설치 후 확인할 것
Ubuntu 게스트에서 다음 명령으로 구분해서 확인한다.
cat /etc/os-release
dpkg --print-architecture
docker --version
docker compose version
sudo systemctl status docker --no-pager
CLI 버전 출력은 daemon 연결 성공을 뜻하지 않는다. 실제 통신과 컨테이너 실행은 다음처럼 별도로 확인한다.
sudo docker info
sudo docker run --rm hello-world
마지막 명령은 이미지를 내려받고 컨테이너를 실행한다. 네트워크가 제한된 환경이라면 실패 원인을 저장소 접근·daemon 상태·권한으로 나눠 본다. sudo 없이 실행하기 위해 docker 그룹에 추가하는 것은 단순한 편의 설정이 아니라 높은 권한을 부여하는 결정이다.
Proxmox 8 설치 메모에서 남길 부분
2024년 메모는 설치 후 APT 설정과 웹 콘솔의 구독 안내를 다룬 외부 자료 링크였다. 구독 안내를 숨기는 것과 올바른 패키지 저장소를 사용하는 것은 서로 다른 문제다. UI 파일 패치나 예전 코드네임을 현재 호스트에 그대로 적용하지 않는다.
호스트에서는 pveversion -v와 실제 APT 저장소 설정을 확인한 뒤, 설치한 Proxmox 버전에 맞는 enterprise 또는 no-subscription 저장소 안내를 따른다. 게스트용 Docker 설치와 호스트 업데이트 절차는 별도로 관리한다.
자동화에 남길 기록은 실행한 커밋, 게스트 OS, 설치한 패키지 버전과 확인 결과다. 재실행했을 때 이미 설치된 환경을 어떻게 처리할지까지 정리하면 짧은 명령 모음이 유지할 수 있는 설치 절차가 된다.