왜 Portainer인가
Filebrowser, Immich, Vaultwarden, Prometheus, Grafana… 서비스가 하나씩 늘어나다 보니 컨테이너가 어느새 8개가 넘었다. 매번 SSH 접속해서 docker ps, docker logs, docker compose restart 치는 게 점점 번거로워졌다.
Portainer CE는 Docker를 웹 UI로 관리할 수 있는 오픈소스 도구다. 컨테이너 시작/중지/재시작, 실시간 로그 확인, 볼륨/네트워크 관리까지 브라우저에서 다 된다. CE(Community Edition)는 무료다.
설치
1. 디렉토리 생성
mkdir -p ~/portainer && cd ~/portainer
2. docker-compose.yml 작성
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: always
ports:
- "19000:9000"
- "18000:8000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
volumes:
portainer_data:
핵심은 /var/run/docker.sock을 마운트하는 것이다. 이를 통해 Portainer가 호스트의 Docker 데몬에 직접 접근할 수 있다.
포트는 기존 서비스들과 충돌하지 않도록 10000번대로 설정했다.
| 포트 | 용도 |
|---|---|
| 19000 | Portainer 웹 UI |
| 18000 | Edge Agent 터널 (원격 환경 연결용) |
3. 실행
docker compose up -d
4. 초기 설정
브라우저에서 http://100.109.108.36:19000 접속 후 admin 계정을 생성한다.
⚠️ 컨테이너 실행 후 5분 이내에 초기 계정을 만들어야 한다. 시간이 지나면 보안상 접근이 차단되므로
docker compose restart portainer로 재시작해야 한다.
결과

설치 후 현재 홈서버에서 실행 중인 모든 컨테이너를 한눈에 볼 수 있다.
| 컨테이너 | 상태 |
|---|---|
| filebrowser | healthy ✅ |
| grafana | running ✅ |
| immich_machine_learning | healthy ✅ |
| immich_postgres | healthy ✅ |
| immich_redis | healthy ✅ |
| immich_server | healthy ✅ |
| portainer | running ✅ |
| prometheus | running ✅ |
컨테이너별로 로그 확인, 시작/중지, 환경변수, 마운트 볼륨 정보까지 GUI에서 바로 볼 수 있다.
접근 방식
Portainer는 Docker 소켓에 직접 접근하는 민감한 도구라 외부에 열지 않고 Tailscale VPN 안에서만 접근한다.
Portainer UI → http://100.109.108.36:19000 (Tailscale VPN으로만 접근)
Nginx 리버스 프록시로 외부에 노출하지 않는다. 누군가 Portainer에 접근하면 서버의 모든 컨테이너를 제어할 수 있기 때문이다.
정리
- Docker Compose 파일 하나로 설치가 끝난다
/var/run/docker.sock마운트가 핵심- 컨테이너 실행 후 5분 안에 초기 계정 생성할 것
- 보안상 VPN 안에서만 접근하고 외부에는 절대 열지 말 것
다음 편에서는 Prometheus + Grafana + Node Exporter로 홈서버와 OCI 서버를 동시에 모니터링하는 환경을 구성한다.