당신은 도커를 이용하여 서버를 운영하고 있다. 당분간 일이 생겨서 외부인에게 도커 실행 권한을 가진 계정을 맡겼다. 그러면 당신은 그 사람에게 루트 계정을 준 것과 다름 없다.

리눅스에서 컨테이너가 어떤 원리로 만들어지는 이해한다면 이 문제를 사전에 방지할 수 있다. 이 글이 문제 예방에 도움이 되기를 바란다.

도커로 관리할 수 있는 리눅스 컨테이너는 운영체제 수준의 가상화 기술로 리눅스 커널을 공유하면서 프로세스를 격리된 환경에서 실행하는 기술이다.

이 글은 아래 링크의 "김삼영님의 이게 돼요? 도커 없이 컨테이너 만들기"를 실습해보며 학습한 내용을 내 나름대로 재구성하여 작성하였다.

이게 돼요? 도커 없이 컨테이너 만들기 / if(kakao)2022

리눅스에서 간단한 컨테이너를 직접 만들기 위해 Cgroups, Namespace, 컨테이너 파일시스템을 실제 사용하고 설정해야한다. 그러면서 자원 할당, 격리, 파일시스템 구성 방법에 대해 알 수 있고 실제 리눅스 컨테이너의 동작 원리에 대해서도 이해할 수 있을 것이다.

이 글의 최종 목표는 2개의 리눅스 컨테이너를 만들어 통신시키고 여러 테스트를 통해 컨테이너의 완성을 확인하는 것이다. 자원이 잘 할당되었는지, 컨테이너의 각 요소들이 잘 격리되었는지 등을 직접 확인할 것이다.

컨테이너를 만들기 전에 위에서 말한 Cgroups, Namespace, 컨테이너 파일시스템에 대한 지식이 필요하므로 해당 지식들 부터 알아보자.

컨테이너를 만들기 위해 필요한 지식들

Cgroups - 컨테이너 자원 할당

Cgroups는 Control groups라는 의미로 리눅스에서 프로세스의 자원 할당량을 제어하는 도구다. 참고: https://kubernetes.io/docs/concepts/architecture/cgroups/