본문 바로가기

Linux is..../TIP

레드햇, Docker와 손잡다.

간만에 블로그에 손대는거같다....

사실 이래저래 귀찮아서 카페나 블로그에 접속조차 하지 않는 일이 많은데.......ㅠㅠ


어쨌거나 저번주에서 RedHat에서 주관하여 매년마다 열리는 포럼이 올해도 어김없이 열렸다.

시기상 다른점은 작년에는 추운11월로 기억하는데....다행히다.ㅠ 감기에 추위에 몹시 고생했던 아픈 추억이....얼굴폐인모드;;;



본론으로 가기전에 여러 세미나행사나 고객에게 많이 들리고 이슈화가 되고 있는 PaaS(Platform as a Services) - Docker에 대해 그동안 과거 포스팅되었던 기사와 문서를 토대로 써보고자 한다.


대다수의 사용자나 특정 솔루션을 요구하는 고객은 항상 이렇게 결론은 단정짓는다. 그래서 그게 뭐가 좋은데?!

근데 그건 잘못된 질문이거나 옳바르지 않은 관점에서 비롯되었다고 본다.

그 여느 기술 Documents를 보아도 기술에 대한 Feature을 열거할뿐 특정 사이트를 겨냥하거나 인더스트리를 나누지는 않는다.


예컨데 Docker도 마찬가지다. 기술이지 솔루션이 아니다. PaaS > IaaS > SaaS?

이 말은 설치나 사용방법이 어려운게 아니라 장기적인 인프라설계에서의 배포나 운영관점의 관리,보안 등에서도 봐야 한다.

그럴려면 그것을 관리하고 운영하고 설계하는 인력이 기술적인 측면이 강해야하는데, DevOps (a portmanteau of "development" and "operations")가 그래서 주요시 되는 시점이라고도 볼수있다.


http://en.wikipedia.org/wiki/DevOps


그럼 이미 익히들 알고 있는 Docker의 특징과 더불어 RHEL7에서 관점에서도 나열해보고자 한다.


1) 자원관리???

RHEL 7 에서는 독립적인 Name Space 로서 자원관리를 위해서 cgroup 을 사용해서 컨테이너를 구현하게 된다.

이 cgroup 은 시스템 자원관리의 목적으로 위해서 프로세스들을 그룹화 하기 위해서 사용을 하는데, CPU 시간, 시스템 메모리, 네트워크 대역폭, 사용자 정의 태스크 그룹사이에서 이들 조합을 할당한다.

RHEL7 에서, cgroup 은 systemd slice, scope 와 service units 으로 관리된다고 볼수 있겠다.


https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html-single/Resource_
Management_and_Linux_Containers_Guide/index.html#part-Resource_Management_With_Control_Groups


오해의 소지가 있을수 있는데, 위의 의미는 컨테이너 자체가 자원관리를 한다는 의미가 아니다.

Virtual Machine 이 사용자의 계획에 의해서 의도된 사양에 따라 만들어지듯이, 컨테이너도 동일하다. 2) 성능 : 가볍다. 가상화에 비해서는..................맞아??! 리눅스 컨테이너가 VM 보다 가볍다라는 의미는 사실 VM 이 최초 생성이 되어지고, 부팅이 되어지는 시간보다는 훨씬

가볍고 빠르다라고 이해하면 될것 같다.

왜냐하면, 컨테이너는 VM 과 같이 독립적인 오퍼레이팅 시스템을 가상으로 하이퍼바이저에 생성이 되는것이 아니라,

부팅하는 과정없이 ( 각 할당받은 가상적인 자원들의 초기화 과정이 없이 ) Name Space 를 기반으로 한 독립적인

실행환경만을 가지기 때문에 실행속도에 있어서는 분명히 가벽고 빠른것이 분명하다.

다만, 성능은 각 컨테이너들이 보장받은 물리적인 자원과 밀접한 관계가 있기 때문에 성능이 빠르다고 말하기는 어렵다.

그러나 레드햇이나 Docker개발자 사이에서는 Native 와 거의 비슷하거나 옵션설정을 통해 제로에 가깝게 할수 있다고는

말한다.


클라우드 환경에서의 성능은 사실 하나의 컨테이너가 보유한 성능이 아닌, 클라우드 인프라스트럭쳐에 생성이

가능한 컨테이너 혹은 VM 의 숫자와 관련이 있다고 보면 된다. 클라우드 환경에서 컨테이너 혹은 VM 하나의 성능이

저하가 되는것은 큰 문제라고 보기 어렵다. 왜냐하면 이 하나를 버리고도 또 다른 하나를 만들고 실행하는데는

예전의 IT 인프라스트럭쳐와는 비교할수 없는 시간내에 생성이 되고 실행이 되기 때문이다.


그렇기 때문에 리눅스 컨테이너가 각광 받는 이유는 하드웨어와 클라우드의 기술의 급격한 변화로 인해서,

IT 인프라스트럭쳐들의 다양한 요구와 개발환경들이 손쉽게 만들어지고, 이들이 손쉽게 Scale Out 혹은 Up 이 되도록

하고, 이렇게 만들어진 이미지 기반의 컨테이너들이 공유되는것이 가능하기 때문이다.

3) 보안 : selinux사용, SELinux 약어도 모르는 사람이 많은걸?....

RHEL7 에서는 컨테이너에 SELinux 의 정첵과 레이블을 적용하므로서, 컨테이너의 보안적인 분리를 제공하게 되었다.

즉, 각 컨테이너들이 독립적인 호스트 시스템과 같이 분리될 수 있도록 구현이 되었고, 한 컨테이너가 몇몇 DOS 공격을

받는다 하더라도, 전체자원을 사용하지 못하도록 cgroup 으로 해당 컨테이너가 사용하는 자원을 제약하는것을 보장한다.


https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html-single/Resource_Management_and_Linux_Containers_Guide/index.html#sec-Secure_Containers_with_SELinux




4) 유연함

RHEL7 컨테이너를 생성한 뒤에 배치 및 관리를 위해서 git 를 사용해서 애플리케이션 빌딩시에 유연성과 성능을 제공한다.

컨테이너에 무언가가 문제가 있을때, git 는 인해서 이를 보장하고, 잘못되었다고 생각하지 않아도 된다. 이럴때, git 의

branch 에서 이들을 시작하고, 만약에 이 컨테이너가 부서지면, 그냥 git rebase 혹은 git reset 을 하면 재빨리 시작이

가능하다.

Docker 는 이러한 operation 을 보장한다. 약간의 테스트나 설치를 해본 이용자라면 이미지를 빌딩하는것은 매우 손쉽고,

기본 이미지로서 다른 이미지들을 사용하는것도 쉽다는 걸 알수 있을 것이다.

모든 이미지들을 배치하는것은 매우 빠르고, 최신것을 사용할수 있다. 이와 같이 다시 rollback을 하는것이 어렵지 않은

유연성을 가지고 있다.




CoreOS = RedHat Atomic HOST????

아마 CoreOS는 많이 들어보았을거다. 그렇다면 Atomic HOST는 뭔데....?

이름에서도 알수 있듯이, Docker동작환경에 몇가지 필요한 구동/운영/관리/설정 등 만을 할수 있게 도와주는 HOST,

예를 들어 가상화의 HOST같은거라고 보면 쉬울수도 있다.




* 레드햇, Docker와 손잡다?! 왜??

Docker 는 Docker.io 프로젝트를 배경으로 현재 IT 산업에서 컨테이너 솔루션을 리딩하고 있는 기업이다.

또한 레드햇은 세계적으로 오픈소스 솔루션을 제공을 하는 기업으로서, 두 회사 사이에서는 현존하는 기술협약을 기반으로

긴밀한 관계를 가지기로 발표했다.

이 확장된 협약의 일부로서 Docker 와 레드햇 은 Docker 의 호스트 서비스와 Red Hat 인증 컨터이너 호스트와 서비스들

사이에서 상호운용성을 배경으로 같이 일하게 되었다. Docker 프로젝트의 급격한 증가는 IT 산업의 표준화, 오픈소스, 애플리케이션 생성으로 컨테이너 기반의 접근, 배치 와 관리

의 중요성을 인지하고, 성장이 필요하다는 반향을 일으켰다.

리눅스 컨테이너 기술의 오랜 리더인, Red Hat 은 2013년 9월에 Docker 전담팀으로 가까이 일을하기 시작하여,

그 이후 새로운 production 환경의 등급 파일시스템 옵션, 통합 systemd 프로세스 관리와 군사등급의 보안을 제공하기

위해서 SELinux 의 사용과 함께 Red Hat Enterprise Linux 에 포함하기 위해서 Docker 를 확대하는 일을 하였다. 그리고, Red Hat 은 또한 Fedora 와 RHEL 을 위한 패키지화 된 Docker 를 가지고 있고, 2014 년 3월에 Red Hat

Container Certification 을 발표했다.


이 노력중에, Red Hat 과 Docker 는 Docker container 기술을 배경으로 협동이 깊어졌고,

Red Hat 은 RHEL 7 을 위해서 high-touch 베타 프로그램으로 Docker 컨테이너 기술을 가져왔다.


OpenShift 로 PaSS 로서( Platform-as-a-Service ) Docker 를 제공하게 되었다.