본문 바로가기
IT/Docker

Docker Container overview (도커 컨테이너에 대하여)

by halizy 2018. 7. 10.


이번 포스팅을 시작으로 그동안 개인적으로 정리해왔던 Docker Container에 대하여 정리해 보고자 합니다.

본 포스팅은 필자의 실무에 있어 Docker의 사용이 필요하여 공부하였던 내용 위주로 작성하였으며 

문의사항이 있을 시 댓글에 남겨주시면 최대한 정확하고 자세하게 답변해드리겠습니다.






Docker 란?

  • 2013년 3월 Docker Inc. 에서 출시한 오픈소스 컨테이너 프로젝트

  • Immutable infrastructure의 개념 (참고URL: http://www.tutorialbook.co.kr/142)

    1. 한번 설정한 운영환경은 절대 변하지 않음.

    2. 호스트OS와 서비스운영환경이 분리되어있음

  • 클라우드에서 서버를 쓰고 버리는 것 처럼 운영환경 이미지도 필요할 때 마다 쓰고 버림.

  • 장점

    1. 편리한 관리 및 확장

    2. 쉽게 사용할 수 있는 테스트환경

    3. 경량





Virtual Machine VS Docker
  • 가상머신
    • VM은 이미지 안에 OS가 포함되므로 용량이 크다
  • Docker
    • Guest 에 OS가 포함되어 있지 않음
    • 설치시 서버 운영을 위한 프로그램과 라이f브러리만 격리하여 설치
    • OS 자원은 Host와 공유
    • 하드웨어 가상화 계층이 없기 때문에 메모리접근, 파일시스템, 네트워크속도가 VM보다 훨씬 빠름
    • Native와 Docker의 성능 차이가 거의 없음

Linux Container (참고URL: https://ko.wikipedia.org/wiki/LXC )
  • 리눅스에서는 chroot가 있어 이를 통해 특정 디렉토리를 루트로 설정하면 Jail환경이 생긴다. 
    해당 Jail마다 실행파일과 공유 라이브러리를 준비해야 되는데 복잡하여 LinuX Container(LXC)라는 것이 생겼다.
  • LXC는 리눅스 커널레벨에서 제공하는 일종의 격리공간 (OS까 없으니 가상머신이 아닌 컨테이너라고 한다)
  • 리눅스 커널의 ControlGroup(cgroup)은 cpu,메모리,디스크,네트워크자원을 할당하여 완전한 가상 공간을 제공한다
  • LXC는 cgroup의 기능과 namespace의 기능을 활용하여 격리된 가상 공간만을 제공한다
  • Docker은 이 LXC에 이미지생성관리 등의 부가기능을 더한 것이다.



Docker 이미지,컨테이너 개념


  • 이미지 : 필요한 프로그램과 라이브러리, 소스등을 설치한 뒤 파일 하나로 만든 것 (UbuntuBase+Java+GDI)

  • 컨테이너: 이미지를 실행한 상태 (운영체제로 보면 이미지=실행파일, 컨테이너=프로세스)

  • Docker: 실행파일 또는 스크립트를 위한 실행 환경

  • 리눅스는 파일 실행에 필요한 구성요소가 잘게 쪼개져있어 시스템 구조가 단순해지는 장점이있지만 의존성이복잡함

  • 그래서 deb.rpm이 있지만 서버를 추가할떄마다 패키지를 설치하는 일은 귀찮다.

 


댓글