-
Docker 자원격리Docker는 컨테이너 내부가 호스트 운영체제와 격리되어 독립적으로 운영되게 하기 위해서 리눅스의 네임스페이스(namespace) 기술을 이용한다. 사용자가 컨테이너를 실행하면, 해당 컨테이너에서 사용할 네임스페이스들을 생성한다. Docker가 사용하는 네임스페이스에는 다음과 같은 것들이 있다.pid 네임스페이스 : 프로세스 격리를 위해 사용한다.net네임스페이스 : 네트워크 인터페이스를 관리하기 위해 사용한다.ipc네임스페이스 : IPC(InterProcess Communication, 내부 프로세스 통신)자원에 대한 접근을 관리한다.mnt네임스페이스 : 마운트 지점을 관리하기 위해 사용uts네임스페이스 : 커널 격리와 버전 식별을 위해 사용Docker의 각 컨테이너는 자신에게 할당된 만큼의 자원만 사용해야 한다. 예를 들어 512m 메모리를 사용하도록 할당된 Docker 컨테이너가 1G의 메모리를 사용하게 된다면 호스트에 여러개의 컨테이너가 떠 있을때 서로간에 자원 간섭이 일어나게되고 심각한 문제를 유발할 수 도 있게된다. 이런 일이 발생하지 않도록 Docker는 각 컨테이너가 할당된 자원만큼만 사용하도록 조정하는데, 이때 리눅스의 cgroups를 이용해서 이 기능을 구현한다.Docker의 기본 컨테이너 형식은libcontainer이다. 초기에는 리눅스의 lxc를 이용하기도 했으나 현재는 자체적은 컨테이너 모델을 사용하고 있다. 물론, 현재도 lxc를 사용할 수 있다. 추후, BSD Jails나 Solaris Zones등도 지원할 예정이다.Docker 파일시스템UnionFS는 Docker에서 사용하는 파일시스템인데 레이어들을 만들고 가볍고 빠르게 작동할 수 있게 해준다. Docker에서는 AUFS, btrfs, vfs, DeviceMapper 등의 다양한 파일시스템을 이용할 수 있다. 이중에서 AUFS를 기본 파일 시스템으로 사용하고 있다.이런 파일시스템의 특징때문에 docker pull 을 해서 이미지를 가져올 때 기존에 가지고 있던 이미지와 중복되는 레이어가 있는 이미지의 경우에는 모든 파일을 가져오는게 아니라 변경된 부분의 레이어만 가져오기 때문에 docker pull 속도가 빠르다.Docker 빌드 캐쉬Docker ProcessDocker의 각 컨테이너는 자신에게 할당된 만큼의 자원만 사용해야 한다. 예를 들어 512m 메모리를 사용하도록 할당된 Docker 컨테이너가 1G의 메모리를 사용하게 된다면 호스트에 여러개의 컨테이너가 떠 있을때 서로간에 자원 간섭이 일어나게되고 심각한 문제를 유발할 수 도 있게된다. 이런 일이 발생하지 않도록 Docker는 각 컨테이너가 할당된 자원만큼만 사용하도록 조정하는데, 이때 리눅스의 cgroups를 이용해서 이 기능을 구현한다. cgroups는 커널 2.6.24부터 리눅스에 포함되었다. cgroup을 통해서 CPU, 메모리, 네트워크 트래픽 제어, 장치에 대한 접근제어 등을 할 수 있다.참고자료
'Container' 카테고리의 다른 글
Docker onbuild 이미지 이용하기 : ruby (0) 2016.03.28 Docker onbuild 이미지 이용하기 : python (0) 2016.03.25 DockerHub 사용하기 (1) 2016.03.21 Docker Toolbox (0) 2016.03.18 Docker Swarm (0) 2016.03.16 댓글