Hacker News
Docker는 이상하다
소프트웨어처음 오른 때 점수 800댓글 330
한 개발자가 직접 컨테이너 런타임(컨테이너를 실행하는 프로그램)을 만들어 보면서 Docker에 대해 알게 된 신기한 점들을 정리한 글입니다.
무슨 일이 있었나요?
글쓴이는 재미로 자신만의 컨테이너 런타임을 만들어 보고 있습니다. 아직 초보 단계지만, 만들면서 Docker가 꽤 특이한 도구라는 것을 알게 되었다고 말합니다. 그래서 배운 내용을 몇 가지로 나누어 소개합니다.
알아두면 좋은 핵심 내용
컨테이너는 가상 머신(VM)과 다릅니다. 컨테이너는 특별한 제한이 걸린 일반 프로세스일 뿐이고, 실행 중인 것은 여전히 같은 운영체제 커널입니다. 또 컨테이너는 '네임스페이스'(무엇을 볼 수 있는지 숨기는 기능), 'cgroups'(자원 사용량을 제한하는 기능), 네트워크 기능 등 여러 리눅스 기능이 함께 얽혀서 만들어집니다. 이미지는 특별한 상자가 아니라 그냥 폴더입니다. Docker는 이 폴더를 컨테이너의 새로운 최상위 폴더로 바꾼 뒤 프로세스를 실행합니다.
글에 나온 주요 사실
왜 이것이 중요할까요?
Docker는 개발자들이 매일 쓰는 도구이지만, 내부에서 어떻게 움직이는지는 잘 모르는 경우가 많습니다. 이 글은 컨테이너가 마법이 아니라 리눅스 기능을 잘 조합한 결과라는 점을 보여 줍니다. 또 보안을 위해 Docker가 보통 root 권한으로 실행된다는 점도 함께 알려 줍니다. 자신만의 도구를 만들어 보는 것이 기술을 이해하는 좋은 방법이라는 메시지도 담겨 있습니다.
앞으로 지켜볼 점
- root 없이 실행되는 rootless 컨테이너 런타임이 얼마나 발전할지 지켜볼 만합니다.
- rootless 환경에서 네트워크 기능을 사용자 공간에서 다시 구현해야 하는 문제가 어떻게 해결될지 살펴볼 수 있습니다.
용어 풀이
- Docker
- 앱을 컨테이너라는 가벼운 상자에 담아 어디서나 실행하게 해 주는 도구입니다.
- runc
- Docker가 실제로 컨테이너를 만들고 실행할 때 쓰는 런타임 프로그램입니다.
- cgroups
- 프로세스가 CPU나 메모리 같은 자원을 얼마나 쓸 수 있는지 정하는 리눅스 기능입니다.
- Go
- 구글이 만든 프로그래밍 언어로, runc를 작성하는 데 쓰였습니다.
- rootless
- 관리자(root) 권한 없이 컨테이너를 실행하는 방식을 뜻합니다.