메뉴 닫기

Docker는 어디에서 왔을까?

리눅스는 보안성능을 향상하기 위해서 모든 리소스의 사용을 제한하고 사용자와 분리하기 원했어요.

그래서 cgroup(control group)namespace를 만들었죠.

cgroupselinux로 대표될 만큼 보안성 강화를 위해 사용했고,

cpu affinity 로 대표되는 cpusets 처럼 cpu를 할당하고 프로세스의 memory 사용량을 설정

할 수 있었지만 가상화나 사용자 격리와는 거리가 멀었습니다. 효율적인 선택이 필요했었죠. 그래서

namespace를 강화했습니다.

namespacemount /uts/ipc/pid/network/user 에 대한 격리를 다루며 커널 2.6.x대에서 구현

하기 시작해서 3.8에서 완성되었습니다. 오래전부터 시작한 기술이 있었다는 걸 말하고 싶었어요.

특히 Network namespace를  생성한다는 것은 device와 주소, 포트, 라우팅, 방화벽 룰셋을 분리할

수 있다는 것을 의미합니다.

트래픽을 해당 namespace에서 처리하기때문에 다른 namespace에서는 다루지 않아서 부하가 줄어

듭니다. 리눅스의 방화벽은 룰셋처리를 순서대로 처리합니다. 그래서 룰셋의 길이가 길어지면 지연시간

또한 길어집니다. namespace로 룰셋을 분산한 만큼 줄어든 룰셋의 길이는 지연시간을 줄여줍니다.

network namespace에 해당하는 conntrack은 slab allocator를 통해 /sys/kernel/slab에 생성하고 관리

합니다.  룰셋뿐만 아니라 conntrack 또한 줄어든다는 의미가 됩니다. 룰셋이 바늘이라면 conntrack은

모래사장이라고 할 수 있습니다. 수많은 접근을 등록하고 추적하기 위해 만든 conntrack은 절망에 가까

울 정도로 넓고도 광활합니다. 단 한줄의 방화벽 룰셋을 찾기위해 일일히 헤쳐나갑니다. namespace

에 해당하는 conntrack 에 한정된 지역을 찾는 것은 그래서 의미가 있는 일입니다. 

사용자에게 리소스를 할당하는 시나리오로 잘 알고 있는 hypervisor(hyper-v, vmware, kvm, xen)

외에도 lxc/vservernamespace/cgroup위에서 커널을 공유하며 먼저 사용되고 있었습니다.

물론 docker도 같은 기술위에서 구동합니다. 

그런데 왜 후발주자로 나온 docker가 왜 인기가 있을까?

사실 dockerlxc+aufs를 제공하기 위해 특화되었죠. 이것이 이미지 저장소(repository)를 활성화

시켰고 사용자의 이미지 저장과 배포가 dockerc라는 하나의 파일로 정의될 만큼 단순화됐습니다.

그래서 간편한 배포설정과 배포설정 공유,   빠른 배포라는 DNA를 가지게 되었습니다

 

참고문서 : 

 

http://man7.org/linux/man-pages/man7/namespaces.7.html

https://lwn.net/Articles/531114/

https://lwn.net/Articles/621006/

https://www.flockport.com/lxc-vs-docker/

https://www.flockport.com/experimenting-with-overlayfs-and-lxc/

http://lxr.free-electrons.com/source/include/net/netns/conntrack.h

 

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x