1. Docker 가상화 서버 개념(리눅스용)
▶관련 포스트◀
2. Docker 가상화 서버 설치 및 image 다운로드 (리눅스용)
3. Docker Container 관리 (리눅스 용)
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/
'Cloud > Docker' 카테고리의 다른 글
6. Docker cluster - swarm (리눅스 용) (0) | 2019.02.28 |
---|---|
5. Docker Image 만들기 / 삭제 (리눅스 용) (0) | 2019.02.19 |
4. Docker 네트워크 (리눅스 용) (0) | 2019.01.31 |
3. Docker Container 관리 (리눅스 용) (2) | 2019.01.30 |
2. Docker 가상화 서버 설치 및 image 다운로드 (리눅스용) (0) | 2019.01.30 |