도커와 k8s 강의를 하면서, 개발자들이 가장 어려워하는 부분이 네트워크 동작 원리와 디버깅이라는 사실을 알게 되었다. 가상 머신인 경우에는 SSH로 접속해서 뭔가를 확인할 수 있는데, 컨테이너인 경우에는 격리된 프로세스 형태로 동작하다보니 들어가고 뭐고 할 수가 없다. 물론 bash와 디버깅(!) 용 유틸리티를 컨테이너 이미지 내부에 포함시켜 놓았으면 아쉬운데로 docker exec를 사용해 상태를 파악할 수 있지만 보안을 강화하고 컨테이너 크기를 줄일 목적으로 다이어트를 하기에 항상 이를 기대하기는 어렵다.
그래서 도커 디버거를 찾아봤는데... docker-debug와 Kubectl-debug를 발견했다.
그 중에서도 도커 디버거를 잠깐 소개하자면, 동작 중인 도커 컨테이너에 대한 문제를 해결하기 위한 도구로서 디버깅 목적으로 새로운 컨테이너를 구동한다. 새로운 컨테이너는 목표 컨테이너의 pid, network, user, filesystem, ipc 네임스페이스에 접근하므로 양산 이미지를 건들이지 않고서도 디버깅이 가능하다는 좋은 특성이 있다. 설치는 다음처럼 무척 간단하다:
$ curl -Lo docker-debug \ https://github.com/zeromake/docker-debug/releases/download/0.7.3/docker-debug-linux-amd64 $ chmod +x ./docker-debug $ sudo mv docker-debug /usr/local/bin/
실행도 무척 쉽다. 예를 들어 hello-dock 컨테이너를 디버깅 모드(응?)로 시작하려면 다음과 같이 하면 된다:
$ docker-debug hello-dock bash -l
그리고 나서 셸 프롬프트가 뜨면, 컨테이너 상에서 top, ps -ef, netstat -nplt와 같은 명령을 내릴 수 있다. 이 정도로 성이 안 찬다면... 다음 사례를 보면 놀랄 것이다:
$ docker-debug --image frapsoft/htop hello-dock htop
htop으로 컨테이너에서 사용 중인 각종 프로세스 상태를 모니터링 할 수 있다!
아무쪼록 도커 디버깅에 도움이 되길...
EOB
댓글 없음:
댓글 쓰기