나는 모든 일에 lazydocker를 사용한다 — 단, 사용하지 않을 때는 제외.
dockervis – 최소 Docker 대시보드
저는 lazydocker를 정말 좋아합니다. 솔직히 말해서, Jesse Duffield가 만든 것은 특별합니다 — 새 머신을 세팅할 때 가장 먼저 설치하는 도구이죠. 하지만 90 %의 경우 열어보면 단지 컨테이너가 정상인지 확인하고 싶을 뿐입니다. 이미지 레이어를 살펴보거나, compose 설정을 스크롤하거나, 볼륨 마운트를 파고들 필요가 없습니다. 단순히 현재 상태만 보고 싶을 때가 많죠.
때때로 lazydocker는 대시보드만 필요할 때 제어실을 여는 느낌입니다.
그래서 저는 dockervis 를 만들었습니다 — 터미널 대시보드로, 한 가지 일을 합니다: 현재 Docker 컨테이너가 무엇을 하고 있는지 보여주고, 단 한 번의 키 입력으로 조작할 수 있게 해줍니다.
해결하고자 했던 문제
보통 제 워크플로는 다음과 같습니다:
docker compose로 4‑5개의 컨테이너를 시작한다.- 뭔가 이상함을 느낌 — API가 느리거나, cron 작업이 크래시했을 수도 있다.
- 터미널을 열고
docker ps를 입력해, 잘려 나온 출력을 눈여겨본다.
컨테이너 ID를 복사하고docker stats --no-stream을 실행한다. - 잘못된 컨테이너였다는 것을 깨닫는다.
- 다시 반복한다.
docker stats는 폭포수 같은 출력이고, docker ps는 리소스 사용량을 보여주지 않습니다. 두 명령을 오가며 디버깅하면 새벽 2시에도 금방 지칩니다.
lazydocker가 이 문제를 해결해 주지만, 동시에 모든 이미지, 모든 볼륨, 모든 compose 파일까지 보여줍니다 — 저는 단지 내 애플리케이션 컨테이너가 다시 RAM을 다 먹고 있는지만 알고 싶을 뿐입니다.
dockervis가 하는 일
npm install -g dockervis
dockervis
도구가 전체 화면 모드로 실행됩니다 (q 로 종료).
대시보드 화면은 다음과 같습니다:
┌─────────────────────────────────────────────────────────────┐
│ dockervis - Docker Container Dashboard │
├─────────────────────────────────────────────────────────────┤
│ │
│ ● app (running) CPU: 1.2% │
│ ● db (running) Memory: 256 MB / 512 MB (50.0%) │
│ ○ web (exited) Network RX: 1.2 GB │
│ ● redis (running) Network TX: 512 MB │
│ │
└─────────────────────────────────────────────────────────────┘
q: Quit | r: Refresh | s: Stop | R: Restart | d: Delete
모든 컨테이너와 그 상태, CPU, 메모리, 네트워크 사용량이 실시간으로 업데이트됩니다. 마우스도 필요 없고, 패널을 이동할 필요도 없습니다 — 오직 여러분이 신경 쓰는 정보만 보여줍니다.
실제로 중요한 키보드 단축키
| 키 | 동작 |
|---|---|
j / ↓ | 아래로 이동 |
k / ↑ | 위로 이동 |
s | 컨테이너 정지 |
R | 컨테이너 재시작 |
d | 삭제 (종료된 경우에만) |
r | 강제 새로 고침 |
q | 종료 |
Vim 스타일 네비게이션은, 글쎄요, 근육 기억이 있기 때문이죠.
전형적인 흐름:
문제가 걸렸을 때: j → 선택 → R → 재시작 → 완료.
컨테이너가 종료됐고 제거하고 싶을 때: k/j → 선택 → d.
컨테이너가 너무 많을 때 필터링
제 업무용 머신에는 약 20개의 컨테이너가 있습니다. 오래된 프로젝트에서 남은 것이 많죠. 모두 볼 필요는 없습니다.
# 실행 중인 것만 표시
dockervis --filter running
# 특정 서비스만 집중
dockervis --include app,db,redis
# 잡음 제거
dockervis --exclude test,ci
--exclude 플래그가 가장 마음에 듭니다 — 절대 건드리지 않는 테스트 컨테이너를 없애서 대시보드가 실제로 유용해지거든요.
메트릭 내보내기 (증거가 필요할 때)
때때로 “이 컨테이너가 3일 동안 CPU 80 %를 사용하고 있다”는 걸 누군가에게 보여줘야 할 때가 있습니다. 혹은 시간에 따라 메트릭을 기록하고 싶을 때도요.
# JSON 내보내기
dockervis --export metrics.json
# 스프레드시트에 넣고 싶다면 CSV
dockervis --export metrics.csv --export-format csv
CI 파이프라인에서 사용합니다: 한 번 실행하고 JSON으로 덤프한 뒤 jq 로 파싱해 헬스‑체크 스크립트에 활용합니다. 화려하진 않지만 충분히 동작합니다.
왜 TypeScript인가 (다른 사람들처럼 Go는 안 쓰는 이유)
대부분의 터미널 Docker 도구는 Go로 작성됩니다 — lazydocker, ctop, docui 등. Go가 나쁘진 않지만 저는 하루 종일 TypeScript를 다룹니다. 뭔가 고치거나 기능을 추가하고 싶을 때 가장 빠른 언어가 바로 TypeScript이기 때문이죠.
dockervis가 사용하는 주요 라이브러리:
- dockerode – 검증된 Docker API 클라이언트.
- blessed – 터미널 UI 라이브러리 (lazydocker가 tview/bubbletea 계열을 쓰는 것과 동일).
덕분에 TypeScript/Node 개발자라면 새로운 언어를 배우지 않아도 직접 기여할 수 있습니다. 설치는 npm install -g 로 끝나고, Go 툴체인은 전혀 필요 없습니다.
그래도 lazydocker를 쓰게 되는 경우
dockervis가 lazydocker를 완전히 대체하는 건 아닙니다. 저는 다음과 같은 상황에서 여전히 lazydocker를 사용합니다:
- Docker Compose 설정 파일 탐색
- 이미지 레이어 검사
- 볼륨 및 네트워크 관리
- 컨테이너 로그 상세 조회
5초 안에 “모두 정상인가?”를 확인하거나 “그 컨테이너 하나 빨리 재시작”할 때는 dockervis가 더 빠르고 조용합니다.
빠른 설치
# 설치
npm install -g dockervis
# Docker 소켓 접근 권한 확인
sudo usermod -aG docker $USER # (로그아웃 후 다시 로그인)
# 실행
dockervis
선택적 설정
새로 고침 간격 변경 (기본 2 초):
dockervis --interval 5000 # 5 초
원격 Docker 호스트에 연결:
DOCKER_HOST=tcp://192.168.1.100:2375 dockervis
코드
오픈 소스이며 MIT 라이선스를 따릅니다: github.com/sulthonzh/dockervis
이슈와 PR을 언제든 환영합니다. 저는 주로 macOS + Docker Desktop 환경에서 테스트했으며, Linux와 Windows에서의 사용 후기 특히 환영합니다.
도움이 될 거예요.
* 개발자 도구를 만드는 것이 제 전문입니다.
다른 프로젝트는 [github.com/sulthonzh](https://github.com/sulthonzh) 에서 확인하세요.