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가 분리 되어 있어 보안에 강함(깊은 격리)
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 |