디지털 양피지/Docker2017. 6. 26. 11:22

1. Docker 소개


LXC, Docker Container, VM 등의 가상화 환경으로 볼 수 있다.

 - OS, HW, Network, Storage, Application 등의 가상화로 나눌 수 있다.

 - Docker 는 일종의  OS 가상화로 볼 수 있다.

 - LXC와 VM의 중간 기능 역활을 수행한다고 볼 수 있다. 

 - OS, Application 가상화 관점을 모두 포함하고 있으며 App. 쪽이 성장하고 있음.


LXC 는 namespace, CGroup을 활용한 기술이다.

 - namespace: user, network mount, IPC, PID, UTC

 - cgroup: cpu, memory

Docker는 여기에 Packaging 기술이 포한 된다고 볼 수 있다.

 - UFS: ?

 - Registry: Registry, Repository, Index


Conainters vs. VMs


VM 

 . App. 을 돌리기 위해 Guest OS가 있어야 하며 Host OS 도 필요한 이중 구조이다.

 . App. 을 여러개 돌리므로서 OS 운영이 힘들어지고, 구조가 복잡해서 Scale Out 이 힘들어 지는 구조가 된다.

 . VM 운영을 필요하게 되어 서비스에 집중할 수 없는 구조가 된다.

 . Guest OS와 Host OS가 분리 되어 있어 보안에 강함(깊은 격리)


Image result for docker vs. vm


Container

 . namespace 를 통하여 각각의 App. 을 격리 시켜 실행한다. OS는 공유.(동일한 종류의 OS만 가능)

 . Storage를 절약하고, Guest OS를 거치지 않고 Guest OS가 점유하는 리소스가 없어 더 빠르게 동작한다.

 . 보안에서 OS 즉, 커널이 죽으면 모든 Container가 죽는다. ( OS를 공유 하므로 보안에 취약, 얕은 격리)

 . CGroup은 HW의 Resource 를 격리시켜 준다. (추가로 구성한다.)

 . Docker는 LXC에 더해서 패캐징 기술을 더해서 사용한다. 

  .. Image를 사용항 패캐징하고 다른 시스템에 배포한다.

  .. Image를 저장할 수 있는 Repository를 제공한다.


* Microservice

. Micro service 에서는 Service Discovery 가 핵심이다. 

. 어떤 service를 어디서 제공하는지 알수 없어 discovery 가 필요하게 된다.



www.docker.com


 . Docker EE와 CE로 나누어 진다.

  .. Enterprise Edition은 비용 지불, Community Edition은 무료.

  .. 설치 부터 틀리다.

 . Dock은 오늘쪽 아래에 Version 별로 볼 수 있다.

 . 최신 Docker는 Windows, Mac의 Native를 지원한다.(기존 VMware, Virtual Box 이용)




* 컨테이너 소개

Docker는 Image와 Container로 볼 수 있다.

. Image는 정적 파일이다.

. Container 는 이미지가 올라가서 실행되는 서비스.


System 1번의 PID는 /sbin/init 이다. 

 . 1번이 종료하면 시스템 종료

Container의 PID 1번은 명령으로 실행되는 서비스가 된다. 

 . 역시 Container 종료.


Docker는 runC로 동작한다.(이전 libvirt를 사용하다 변경)


 - 컨테이너의 특징

 . 호스트와 애플리케이션을 분리: OS 레벨의 가상화

 . 적은 시스템 리소스와 디스크 공간 소비

 . 리소스의 사용에 유연성과 효율성 제공

 . 가상머신과는 달리 개별적인 커널을 갖지 않음


- 컨테이너 기반 기술

 . cgroup: 리소스에 대한 제한과 우선 순위를 제어

 . namespace: 애플리케이션에 대한 격리환경을 제공



* Docker 컨테이너의 특징

- Immutable 인프라 환경에 적합

 . 한번 설정하고 나면 거의 변경이나 관리가 필요없는 관리환경


- Stateless 애플리케이션에 적합 

 . 컨테이너로 구성한 애플리케이션은 짧은 컨테이너 라이프 사이클에 따라 구성 정보도 임시적 상태로 유지

 . 컨테이너 파일 시스템은 임시적이고 공간에 제약

 . 컨테이너 실행 호스트에 독립적


- 상태 정보는 컨테이너 외부에 구성

 . Stateful 로 만들기 위해서 컨테이너 외부에 구성한다.

 . MySQL은 컨테이너로 만들수 있지만 DB파일은 외부스토리지에 있어야 한다.


- Docker 볼륨은 이러한 상태정보를 관리한다.


 . State full 서비스는 DB 등 state가 있어 정보를 계속 가지고 있어야 하는 것들이다.


* 1 host의 1 container는 vm과 같이 사용하는 것으로 보여진다. 하지만, 분산 컴퓨팅의 장점도 없어지고, running change가 불가능한 구조로 추천되지 않는다. 마찬가지로 보안 이슈로 생길 수 있다. 


* Microservices 와 Monoliths

- 마이크로서비스

 . 모든 서비스를 개별 요소로 구성

 . 상황에 따라 필요한 리소스만 집중에서 확장

 . 스케일 아웃

 . App 컨테이너(CoreOS, Docker)


- 모노리스(Monoliths)

 . 소프트웨어 개발과 운영에 대한 전통적인 방법

 . 상황에 따라 전체 시스템을 확장

 . 스케일 업

 . OS 컨테이너나 가상머신


IaaC(Infra as a Code) : Infra를 code 한줄로 관리하자






'디지털 양피지 > Docker' 카테고리의 다른 글

2. Docker 설치 후  (0) 2017.06.26
2. Dcoker 아키텍쳐와 설치  (0) 2017.06.26
1.Linux for Docker - LVM(Logical Volume Management)  (0) 2017.06.23
1.Linux for Docker - SELinux  (0) 2017.06.23
1.Linux for Docker - Firewalld  (0) 2017.06.23
Posted by 빨간 양말