Skip to content
VDS · Docker 및 컨테이너

Portainer: 브라우저로 컨테이너 관리하기

웹 컨테이너 관리 패널을 설치하는 방법, 편리한 이유, 보호 없이 인터넷에 노출하면 안 되는 이유를 알아봐요.

업데이트 2026년 8월 23일

Portainer는 Docker용 웹 인터페이스예요. 컨테이너 목록, 로그, 컨테이너 콘솔, 볼륨, 네트워크, Compose 스택을 볼 수 있어요. "뭐가 죽었는지" 확인하려고 매번 SSH로 접속하기 싫을 때 편리해요.

설치

docker volume create portainer_data
docker run -d \
  --name portainer \
  --restart unless-stopped \
  -p 127.0.0.1:9443:9443 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:2.21.4

포트는 로컬 인터페이스에 바인딩돼요. SSH 터널을 통해 제어판을 열 수 있어요.

ssh -L 9443:127.0.0.1:9443 root@<machine-address>

그다음 브라우저에서 https://localhost:9443을 열어요. 인증서가 자체 서명이라서 브라우저가 경고를 띄울 거예요. 터널을 통해 접속할 때는 정상이에요.

첫 번째 관리자는 제어판을 가장 먼저 연 사람이 만들어요. 포트를 인터넷에 노출해 두고 차라도 마시러 갔다 오면, 관리자는 내가 아니게 돼요. Portainer는 시작 후 몇 분이 지나면 등록을 닫지만, 그걸 믿으면 안 돼요. 계정을 바로 만드세요.

왜 위험하고 무엇을 해야 하나요

제어판은 /var/run/docker.sock을 마운트해요. 이 소켓에 접근하는 건 머신의 root 권한과 같아요. 이걸 통해 호스트 root를 마운트한 컨테이너를 시작할 수 있거든요. 그래서 규칙이 있어요.

  • 포트를 인터넷에 노출하지 마세요. SSH 터널을 쓰거나, 인증서와 2단계 인증을 갖춘 웹 서버를 사용하세요.
  • 관리자 비밀번호는 길고 고유하게 만드세요. 머신의 root 비밀번호와 같으면 안 돼요.
  • 공용 로그인 대신 사람마다 권한이 제한된 개별 계정을 주세요.
  • 제어판이 거의 필요 없다면 컨테이너를 중지 상태로 두고 필요할 때 시작하세요: docker start portainer.

무엇이 편리한가요

  • 로그 — 검색과 강조 표시가 있어서 80×24 텍스트 콘솔에서 docker logs를 쓰는 것보다 빨라요.
  • 컨테이너 콘솔 — 브라우저에서 바로 들어갈 수 있어요.
  • 스택 — compose.yaml 내용을 붙여넣고 배포를 누르면 돼요. 일회성 서비스에는 좋지만, 상시 서비스라면 파일을 디스크에 두고 버전 관리를 하는 게 나아요. 제어판에서 만든 스택은 재설치할 때 잃어버리기 쉬워요.
  • 볼륨과 이미지 — 무엇이 얼마나 공간을 차지하는지 볼 수 있어요. 공간 부족 문제를 해결할 때 도움이 돼요.

여기서 하면 안 되는 것

  • 서비스 정의의 유일한 사본을 여기에 두는 것. 디스크의 디렉터리에 있는 compose.yaml 파일이 제어판보다 오래 살아남아요.
  • 볼륨에 무슨 일이 생길지 이해하지 못한 채 "recreate" 버튼으로 컨테이너를 업데이트하는 것. 컨테이너 업데이트를 참고하세요.
  • 모니터링의 대체품으로 여기는 것. Portainer는 현재 상태만 보여주고 이력은 보여주지 않으며 알림도 보내지 않아요. 그게 필요하면 Uptime Kuma를 쓰세요.

리소스

컨테이너는 메모리를 약 100 MB 사용하고 어떤 티어에서도 돌아가요. 데이터는 portainer_data 볼륨에 저장돼요. 계정, 설정, 스택이 여기에 들어가요. 백업에 포함하거나, 제어판을 다시 설정할 각오를 하세요.

흔한 실수

  • 제어판이 이 머신만 관리한다는 걸 잊는 것. 두 번째 머신도 관리할 수 있지만, 그 머신에 에이전트가 있어야 하고 둘 사이에 포트가 열려 있어야 해요.
  • 제어판 자체에 latest 태그를 쓰는 것. 메이저 업데이트는 데이터 형식을 바꿔요. 버전을 고정하세요.
  • 정리를 통해 "사용하지 않는" 볼륨을 삭제하는 것. Portainer가 경고는 하지만, 사람들은 읽지 않고 버튼을 눌러요. 데이터베이스가 있는 볼륨은 컨테이너가 중지된 동안 사용하지 않는 것처럼 보여요. 볼륨을 참고하세요.