Cloud/Docker

1. Docker 가상화 서버 개념 (리눅스용)

jinkwon.kim 2019. 1. 25. 18:00
728x90
반응형

1. Docker 가상화 서버 개념(리눅스용)


관련 포스트◀

1. Docker 가상화 서버 개념 (리눅스용)

2. Docker 가상화 서버 설치 및 image 다운로드 (리눅스용)

3. Docker Container 관리 (리눅스 용)

4. Docker 네트워크 (리눅스 용)

5. Docker Image 만들기 / 삭제 (Linux 용)

6. Docker cluster - swarm (리눅스 용)


- Docker version 18.09.1, build 4c52b90


[미리 보는 Docker의핵심 개념]


  - Docker란?, 리눅스 운영체제에서 프로세스를 격리 시키는 방법으로 가상화를 

    구현 하는 가상화 시스템이다.

  - Docker의 구현 방식은 리눅의 cgroup과 namespace 및 Docker에서 제공하는 

    libcontainer 를 상용하여 구현한다.



▶[Docker 개녑 잡기]


1. Docker란?

  - vmware와 유사한 가상화 시스템이다.

  - OS 레벨의 가상화 이다. OS에서 가상화를 관리 하기 떄문이다.

  - 도커는 리눅스에서만 사용 가능한 가상화 컨테이너이다.

  - 윈도우에서 사용하기 위한 방법(구글에 검색하면 많이 나와있습니다.

    1) 윈도우 10 Pro를 사용 할시 윈도우에서 제공하는 hyper-v 를 사용하여 Docker만 설치하면 사용 가능

    2) 윈도우 10 home 이하에서는 Docker에서 제공하는 Docker Toolbox(Legacy desktop solution) 를 사용

    


2. Docker 지원하는 가상화 방식?

  - Host OS에 "격리된 가상화 공간"을 만드는 방법으로 가상화를 지원한다.

    * "격리된 가상화 공간"에는 Guest OS가 필요가 없다.

  - "격리된 가상화 공간"은 리눅스 자체 기술인 cgroup(control groups), namespace를 사용하여 만듭니다.

  - "격리된 가상화 공간"은 독립된 파일시스템을 제공 받는다.


3. Docker의 장점

  1) Docker  빠르다

    - Docker가 빠른 이유는 "격리된 가상화 공간"에서 동작하는 프로세스들은 Host OS의 커널 및 System call을 

      공유하여 사용하기 때문이다.

      즉, 실제 OS를 공유하여 사용하기 때문에 빠르다.


  2) Docker는 가볍다.

    - Docker는 "격리된 가상화 공간"에서 사용할 "실행 파일"과 "library"를 묶어 놓은 이미지만 있으면 바로

      "격리된 가상화 공간"를 만들 수 있기 때문이다.


4. Docker의 핵심 용어

  - 이미지와 컨테이너

  1) 이미지

    - (실행파일 + library + 설정 값) 을 묶어 놓은 실행 가능한 해키지 이다.

    - 읽기만 가능 하다. 

    - iso 파일과 같다고 볼수 있다.


  2) 컨테이너

    - 이미지가 실행된 "격리된 가상화 공간"이다.

    - 이미지의 변경 사항을 저장 할 수 있다.

    - 컨테이너는 각기 독립 적으로 동작한다.

    - 단, Host OS의 커널은 공유한다.


5. Docker의 철학 

  - 한 컨테이너에 프로세스 하나만 실행하는 것이다.


6. Docker의 전체 구조

  - https://docs.docker.com/engine/docker-overview/ 참조

  - Docker 시스템으 크게 내부(리눅스 Server에 설치된 Docker)와 외부(Docker Hub)의 구조 입니다.

  - Docker 자체는 Client / Server 되어있습니다.


  1) client [내부]

    - 사용자와 상호작용을 하는 프로그램

    - docker damond 에 명령을 보낸다.


  2) docker host - Docker Dameon [내부]

    - Docker API Request를 수신 대기 한다. 

    - image, container, networks, volumns 등을 관리 한다. 

    - docker 서비를 관리 하기 위해서 다른 데몬과 통신을 수행한다.


  3) registry [외부]

    - docker에서 사용 할 수 있는 공용 image를 보관 한다.

    - client에서 pull(다운로드), push(업로드)를 사용 할시 registry에 pull 및 push 를 한다.






[Docker 엔진 동작 방식 파악 하기]


1. Docker와 기존 가상화와 비교

  - "일반 적인 가상화"는 Guest OS가 필수로 필요

  - Docker는 Host OS를 공유하여 사용하기 때문에 Guest OS가 불 필요



2. Docker engine 내부 구조

  



  1) Docker에서 Container 관리를 위해서 사용 하는 주요 기술 

    (1) libcontainer

      - Docker Version 0.9 이후 부터 기본으로 지원

      - OS에서 독립 적이기 위해서 Docker에서 제공하는 Driver 입니다.

      - Linux 플랫폼에 의존적인 LXC(LinuX Contianer)를 대체 하기위 Docker에서만든 컨테이너 관리 기술 입니다.

      - docker에서 container list를 봤을 때 native면 libcontainer를 사용하는 container이고 

        lxc 리면 LXC를 사용하면 container 입니다.

      - 기본적으로사용 Docker에서 사용 합니다.

      - Host OS의 의존성을 제거하고 다양한 플랫 폼 지원(Red Hat, Microsoft Window, Etc ..)


    (2) Cgroup

      - OS가 관리하는 다양한 리소스를 중앙에서 제어하기 위한 도구입니다

      - cgroups에서 관리하는 대상은 파일 시스템이나 프로세스뿐만 아니라 CPU 리소스와 메모리,

        각종 디바이스, 네트워크 패킷, 네트워크 인터페이스 등 입니다.


    (3) namespace

      - namespace 란, 시스템 리소스를 프로세스의 전용 자원처럼 보이게 하고, 다른 프로세스와 

        격리시키는 기능입니다.

      -  namespace 에는 총 6가지 namespace 가 있습니다.

 종류

 설명 

 Mount namespacaes 

 파일시스템의 Mount 를 분할하고 격리합니다

 PID namespacaes

 프로세스를 분할 관리합니다.

 Network namespacaes

 Network 관련된 정보를 분할 관리합니다.

 IPC namespacaes

 프로세스간 통신을 격리합니다.

 UTS namespacaes

 독립적인 hostname 할당합니다

 USER namespacaes

 독립적인 UID를 할당합니다.


3. Docker는 어떻게 컨테이너를 관리 할까??

  - 정답은 리눅스에서 제공하는 

    Cgroup을 이용해서 시스템 자원을 제한 하고

    namespace 를 이용하여 각 프로세스를 격리하여  

    프로세스별로 각각의 가상머신을 운영하는 것과 같은 격리 효과를 주어 가상황를 구현 합니다.

 

4. Docker는 어떻게 Host OS를 공유 할 수 있는가?

  - docker는 cgroup과 namespace를 이용하여 프로세스를 격리 시키는 것 뿐이기 때문에

    격리된 모든 프로세는 Host OS에서 동작 합니다.


5. Docker는 어떻게 다른 OS를 컨테이너에 올릴 수 있는 것인가??

  - Docker는 리눅스에서만 실행 가능하다고 하였습니다. 그런데 어떻게 다른 OS를 올리수 있는 것일까요??

    그 답은, libcontainer 를 사용하여 Docker의 단점인 Host OS 종속성을 제거 하였기 때문에 가능 합니다.






*다음 post는 Docker의 기본 사용 법을 알아 보겠습니다.


참고 자료 

- https://www.slideshare.net/rkawkxms/docker-container

- http://www.digistory.co.kr/?p=733

- https://tech.osci.kr/docker/2018/09/10/45749387/

- https://docs.docker.com/engine/docker-overview/

728x90
반응형