탕구리's 블로그

서버 가상화? Docker? 본문

devOps

서버 가상화? Docker?

탕구리당 2018. 6. 3. 17:30
반응형



시작하기 전에


해당 블로그에 작성되는 글은 주인장의 지극히 주관적인 생각이 다수이며, 대부분의 지식은 구글링을 통해 얻고 있기 때문에 옳지않은 정보가 있습니다. 

잘못된 부분이나 수정해야 하는 부분이 있다면 과감히 덧글을 남겨주세요! 모르는게 많은 새싹입니다




오늘의 주제


오늘의 주제는 서버 가상화와 Docker에 대해 간단하게 알아보려 합니다.  요즘 Docker가 굉장히 Hot하고 여러 기업에서 많이 쓰이고 있습니다. 물론 Personal하게 쓰기도 굉장히 유용하구요. 저도  우연히 동료개발자 분이 추천해줘서 처음 이용하기 시작했는데, 알아볼수록 재밋고, 신기하고, 편리한 기능이 많아서 2018-06-02에 AWSKRUG에서 주최하는 Container 강연에 다녀온 기념으로 정리하게 되었습니다. 왜 사람들이 Docker에 열광하고 사용하는지 알아봅시다!





서버 가상화란?


가상화는 한 대의 PC 또는 임베디드 컨트로러에서 두 개 또는 그 이상의 운영체제를 실행할 수 있는 기술을 말한다.

잉여 하드웨어 리소스를 좀 더 유용하게 사용하기 위해 고안되었습니다. 하나의 서버 컴퓨터 위에서 여러대의 운영 시스템을 구동 할 수 있기 때문이다 이러한 리소스들은 하이퍼바이저(Hypervisor)에 의해 운영/관리 됩니다.




가상 서버를 생성하는 방식


전가상화

    • 전가상화는 하이퍼바이저(hypervisor)라는 특수한 소프트웨어를 사용한다. 하이퍼 바이저는 물리 서버(host)의 CPU와 디스크에 직접적인 상호작용을 하며, 가상서버를 위한 플랫폼 역할을 합니다. 또한 각각의 가상서버들이 독립적인 운용이 가능하도록 합니다.


반가상화

    • 반가상화는 게스트 서버 간의 상호작용을 진행한다. 반가상화에서 하이퍼바이저는 게스트를 운용하기 위한 자원이 적게든다. 가상서버들에게 분리된 자원이 아닌 모든 가상서버가 자원을 공유하는 방식을 사용한다.


OS레벨 가상화

    • OS레벨 가상화에서 하이퍼바이저는 존재하지 않는다. 대신 Host OS가 Hypervisor의 역할을 모두 포함 합니다. 하지만 가상 서버는 모두 같은 종류의 OS만 구동할 수 있습니다.





서버 가상화의 단점


  • 서버 가상화를 도입하기전에 현재 애플리케이션 운용에 적절한지에 대한 판단이 필요로 된다. CPU 점유율이 높은 애플리케이션의 경우 서버 가상화는 사실 큰 도움이 되지 않는다. 다량의 OS가 높은 CPU를 차지하게 되면 애플리케이션이 다운될 가능성이 높다는 것이 첫번째 예 입니다.


  • 마이그레이션에 대한 문제이다. 물리 서버에 대해 문제가 발생하거나 유지보수가 필요한 경우 게스트 서버는 모두 마이그레션 되어야 합니다. 그렇지 않은 경우 서비스를 운영할 수 없게 됩니다.

    하지만 이 마이그레이션 과정에서 기존 물리서버의 환경과 일치하지 않아 문제가 발생하는경우가 두번째 예 입니다.




Docker란?


도커는 컨테이너 기반의 오픈소스 가상화 플렛폼입니다. (일단 말이 어렵다 ㅠㅠ)

도커는 서버환경( 프로그램, 실행환경 등)을 컨테이너(그릇)에 담아놓고(추상화) 필요에 따라 꺼내쓸 수 있는 환경을 제공합니다.

어떤 프로그램도 추상화하는 것에 대해 제한은 없다. 다양한 환경( 클라우드, 온프레미스 등)에 적용 가능합니다.

도커의 기본 네트워크 모드는  Birdge Mode 입니다.



네트워크 브릿지


네트워크 브릿지는 OSI 모델의 데이터 링크 계층(2계층)의 여러가지 네트워크 세그먼트들을 연결시켜주는 역할을 합니다. 

브릿지는 들어오는 데이터 패킷을 분석하여 브릿지가 주어진 패킷을 다른 세그먼트의 네트워크로 전송할 수 있는지의 여부를 결정할 수 있습니다.





기존 가상화 방식과의 차이점


VMware, VirtualBox는 호스트 OS위에 게스트 OS 전체를 가상화 하여 사용하는 방식 도커는 게스트 OS를 설치하는 방식이 아닌 서버 운영을 위한 라이브러리만 이미지에 담아 설치하게 되므로 기존의 방법들(전가상화, 반가상화)보다 경량화 된 상태입니다. 즉, 하드웨어를 가상화하는 계층이 없어졌기 때문에 기존 가상머신에 대해 보다 빠른 속도를 제공합니다.


기존의 전가상화 방식 이후에  KVM(Kernel-based Virtual Machine)과 반가상화 (Paravirtualization)방식이 출현했습니다. 이러한 방식은 전체 OS를 가상화하는 방식이 아니기 때문에 호스트형 가상화 방식(VMware, VirtualBox)에 비해 성능이 향상되었습니다.


도커에서는 성능문제를 개선하기 위해 프로세스를 격리시키는 방식을 이용한다. 이러한 "프로세스 = 리눅스 컨테이너" 구조이면 리소스의 손실 없이 거의 동일한 성능을 낼수 있습니다.







Docker에 대해 아무것도 모르던 시절 하나의 궁금증이 생겨 지인들에게 물어보았습니다. 


"Docker는 왜 더 빨라? 그냥 기존의 가상화 방식이라 뭐가 달라?"라는 질문이었고 이 질문에 대해 자문자답을 하겠습니다.


좌측은 VM의 서버 가상화에 대한 구조를 나타내고, 오른쪽은 Docker의 가상화 구조를 나타냅니다.


간단한 차이점을 살펴보면 Docker는 Hypervisor와 Guest OS가 존재하지 않는것을 볼 수 있습니다.


위에서 언급한 것 처럼 Hypervisor는 하드웨어의 자원을 관리하고 Guest OS를 적재하기 위한 플랫폼 역할을 하며, VM에서는 각각의 Guest OS는 Hypervisor의 자원관리 하에 각각에 독립된 영역을 가지고 운용되게 됩니다.


Docker Engine은 LXC(LinuxX Container, 여기서 컨테이너 라는 개념이 출현했어요!)를 이용하여 가상화 환경을 제공하게 됩니다. LXC 자체에는 OS가 설치되지 않기 때문에 컨테이너라는 명칭을 사용한다고 합니다. LXC는 리눅스 커널의 cgroups와 namespaces 기능을 활용한  방식을 이용하기 때문에 기존의 전가상화, 반가상화 보다 좀 더 빠른속도로 Host의 하드웨어를 이용할 수 있습니다.

 



도커의 구조와 LXC에 대해 좀 더 자세히 알고싶으면 여기를 방문해 주세요!




Docker를 언제 사용하지?


  • 하나의 서버에 여러개의 프로그램을 설치하는 문제

  • 여러개의 라이브러리의 버전이  다르거나 동일한 포트를 사용하는 경우의 설치문제

  • 시간에 흐름에 따라 서버에는 다양한 환경이 제공되고 서버 개발자는 이에 맞춰 서버 환경을 바꿔야하는 상황이 발생할때 유용합니다.



Docker의 주요 키워드


Docker에는 5개의 주요 개념이 등장합니다. 이 주요 개념에 대해 알아보도록 하겠습니다.


Images

    • 컨테이너 실행에 필요한 파일과 설정값들을 포함하고 있습니다.

      하나의 이미지는 여러개의 컨테이너를 포함할 수 있고, 컨테이너 상에서 추가하거나 변경된 값들은 컨테이너에 저장된다. 즉, 이미지에는 아무런 영향을 미치지 않습니다.

      하나의 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 더 이상 의존성에 대해 눈물을 흘릴일이 없습니다.


Container 

    • 컨테이너는 이미지를 실행한 형태입니다.

    • 하나의 이미지는 여러개의 컨테이너를 실행할수도 있고 아닐수도 있습니다.


Overlay Network

    • 도커는 Overlay Network를 지원합니다.

    • 물리적으로 연결해야하는 다수의 서버를 물리적으로 연결하지 않고 Overlay Network를 통해 Container끼리 통신이 가능하게 합니다.



Union File system (레이어 저장 방식)

    • 커널위에 데비안 리눅스가 설치되어 있습니다.

    • 여러가지 이미지나 컨테이너를 적재합니다.

    • 상위 이미지는 부모 이미지를 참조합니다.

    • 맨 위의 마지막 이미지를 실행시키면 컨테이너가 됩니다.





Server Orchestration

  • 여러개의 Docker Demon을 클러스터링하고 쉽고 편하게 관리할 수 있습니다.



  • 도커 호스트를 관리하기 위한 툴 (Docker Swarm ...)










    간단하게 기존의 서버 가상화와 새로 출현해 인기를 얻고있는  Docker에 대해 알아보았습니다.

    간단한 실습 예제도 만들고 싶었는데. 귀차니즘을 이길 수가 없어 여기까지만 정리하였습니다.

    더욱 자세한 내용을 알고싶으신 분들은 하단 링크를 통해 들어가면 추가적인 내용을 얻을 수 있습니다.

    나중에 기회가 되면 예제를 한번 만들어 보는 시간을 갖도록 할게요 ㅠㅠㅠ

    재미없는글 읽어주셔서 감사합니다 ( _ _ )






내용 및 이미지 참고

https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html

http://www.ni.com/white-paper/8709/ko/

awskrug : AWS 한국사용자 모임 - 1부 모두의 Docker 강의

반응형
Comments