Docker?
컨테이너 기반의 오픈소스 가상화 플랫폼이다.
Virtual Machine과 상당히 유사하면서 훨씬 가벼운 형태로 배포가 가능하다.
Image : Dock의 최소 관리 단위. 이 이미지로부터 컨테이너가 실행된다.
Container : 이미지로부터 만들어진 실행중인 도커 프로세스이다.
Container
개별 소프트웨어의 실행에 필요한 실행환경을 독립적으로 운용할 수 있도록 기반환경 또는 다른 실행환경과의 간섭을 막고 실행의 독립성을 확보해주는 운영체제 수준의 격리 기술이다. 프로세스를 실행하는데 필요한 모든 정보들은 이미지에서 제공하기 때문에 개발, 테스트, 배포까지의 모든 단계에서 일관성을 유지한다.
아래 그림과 같이, docker에서는 app과 app에 필요한 바이너리/라이브러리만 올라간다. 이것을 합쳐 컨테이너라고 한다.

Image
이미지는 컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 것으로 불변한다. (read-only)
컨테이너는 이미지를 실행한 프로세스이고 실행 후 추가되거나 변하는 값은 컨테이너에 저장이 된다. (read-write)
컨테이너의 상태를 변경하거나 컨테이너를 삭제해도 이미지에는 영향이 없다.
하나의 이미지로 여러개의 컨테이너를 생성할 수 있다.
도커 이미지는 Docker hub(hub.docker.com)에 등록하거나 Docker Registry 저장소를 직접 만들어(docs.docker.com/registry/) 관리할 수 있다.
Layer
이미지는 여러 개의 read-only 레이어로 구성된다.
컨테이너를 생성할 때는 이미지 레이어 위에 read-write 레이어를 추가한다.
파일이 추가되거나 수정되면 새로운 레이어가 생성된다.

업데이트시 새로 추가된 레이어만 받아온다.
VM이 전체 이미지를 매번 받아와야 했던 것과 비교해서 효율적이다.

Virtual Machine vs. docker

VM과의 유사점: 호스트 운영체제에서 구동되면서 소프트웨어 서비스 구동을 위한 격리 환경을 마련해준다.
Hypervisor 기반의 단점
불필요한 기능의 중복 : Host OS와 Guest OS 간의 기능 중복
상대적 무거움 : 오버헤드가 많이 발생
가상화 머신 배치의 어려움 : 여러 개의 가상화 머신을 띄우는 경우 어렵다
Virtual Machine은 하드웨어와 그 위에 올라가는 운영체제를 가상화한다.
운영체제를 포함한 거대한 이미지를 배포해야하기 때문에 자원(CPU, memory, disk)을 많이 잡아먹는다.
가상머신 안의 프로그램을 실행하기 위해서는 운영체제를 실행하는 과정을 거쳐야 하기 때문에 시간도 그만큼 소모된다.
Docker는 하드웨어를 추상화하지 않고 도커를 실행한 운영체제의 자원을 모두 공유한다.
사실상 프로세스로 간주되어 자원을 효율적으로 사용할 수 있고, 운영체제를 실행하는 과정이 없는 만큼 빠르다.
그러면서도 가상화의 장점인 네트워크, 디스크, 유저 격리를 할 수 있다.
| Docker | VM | |
| 애플리케이션 격리 | O | O |
| 일관성 있는 런타임 환경 | O | O |
| 작은 디스크 크기 | O | X |
| 낮은 오버헤드 | O | X |
'etc' 카테고리의 다른 글
| [Docker] How to use docker #3 (0) | 2019.12.26 |
|---|---|
| [Docker] How to use docker #2 (0) | 2019.12.24 |
| [Docker] How to use docker #1 (0) | 2019.12.24 |
| 프린트 없이 정부사이트 PDF 출력 (0) | 2018.08.16 |
| 안드로이드 애플리케이션의 주요 구성요소 (0) | 2018.04.30 |