개요.
도커 관련 정리 포스터.
나는 도커를 모른다.
VM, Hypervisor 링크
VM(Virtual Machines)
- 컴퓨터의 에뮬레이션으로, 프로그램을 실제 컴퓨터처럼 실행한다.
- VM 은 하이퍼바이저를 통해 물리적 기계위에서 구동된다.
- 한편 하이퍼바이저는 호스트머신이나 베어메탈(소프트웨어가 전혀 담기지 않은 하드웨어) 위에서 실행된다.
- 맨 위부터 순서대로 하면 VM → Hypervisor → OS → HW 순서대로 생각할 수 있다.
Hypervisor (하이퍼바이저) (=> VM 의 운영체제라고 볼 수 있다.)
- VM 이 실행되는 소프트웨어나 펌웨어 혹은 하드웨어를 뜻한다. 하이퍼바이저들은 호스트 머신이라 불리는 물리적 기계 위에서 돌아가, 호스트 머신은 VM 에 램과 CPU 자원을 제공한다.
- 해당 자원들은 VM 들이 분배받아서 사용하는데, 사용자가 원하는 대로 할당을 할 수 있어서 다른 VM 보다 특정한 VM 이 더 많은 자원을 할당받을 수 있다.
- 호스트 머신 위에서 동작하는 하이퍼바이저를 이용, 하이퍼바이저 위에 돌아가는 VM 을 게스트머신(Guest Machine) 이라고 부른다.
- 이 게스트 머신은 그 애플리케이션을 실행하기 위한 모든 것들 (시스템 바이너리, 라이브러리 등) 과 같은 애플리케이션을 포함하며, 가상화된 네트워크 어댑터, 저장소, CPU 등의 모든 하드웨어 스택도 포함한다. 즉 자신안에 온전한 하나의 게스트 운영체제를 가지고 있는 것이다.
- 이 게스트 머신은 자신만의 자원을 할당받은, 하나의 독립된 유닛처럼 작동한다. 외부시점에서 보면 이것은 호스트 머신의 자원을 다른 VM들과 공유하는 또 하나의 VM 임을 알 수 있다.
왜 우리가 도커를 사용해야 하는가.
도커가 필요한 이유
- 도커 컨테이너는 프로세스 단위로 격리환경을 만들어놓기 때문에 성능 손실이 거의 없다.
- 컨테이너에 필요한 커널은 호스트의 커널을 공유하여 사용
- 컨테이너 안에는 애플리케이션을 구동하는데 필요한 라이브러리 및 실행파일만 존재하기 용량또한 가상머신에 비해서 상대적으로 작다.
- 컨테이너는 격리된 공간이기 때문에 호스트 OS 에 아무런 영향을 끼치지 않는다.
- 도커 이미지는 가상 머신의 이미지와 달리 커널을 미포함한다. 따라서 이미지의 크기가 크지 않고, 이미지 내용을 레이어 단위로 구성하기 때문에 중복되는 레이어를 재사용할 수 있다. 그러므로 애플리케이션 배포를 빠르게 수행 가능하다.
- 여러 애플리케이션의 독립성과 확장성이 높아진다.
- MSA 에 부합하는 형태로 구성할 수 있다.
Dockerfile
- Dockerfile 을 빌드하면 도커이미지를 만든다.
- Dockerfile 은 서버 운영 기록을 코드화시켜놓은 파일이다.
- Dockerfile 을 빌드하여 생성된 결과물을 image 라고 부른다.
- 도커는 서로 다른 운영기록을 가진 서버를 동일한 환경에서 실행시킬 수 있도록 해준다.
Image vs Container
- Image 는 서비스 운영에 필요한 서버프로그램으로 소스코드, 컴파일된 실행환경을 묶은 형태이다.
- Image 는 docker hub 라는 저장소에 올리고 공유하고 다운받을 수 있다.
- Container 는 애플리케이션을 환경에 구애받지 않고 실행시키는 기술이다. 애플리케이션 뿐만 아니라 애플리케이션을 실행하는데 필요한 모든 환경을 포함하고 있다. Container 는 host os 위에 실행되는 격리된 공간이다.
- Container 는 Image 를 실행한 상태라고 볼 수 있다.
☞ 이미지는 실행파일이고, 컨테이너는 프로세스이다.
docker-compose
- Dockerfile 을 하나씩 관리하면 의존관계가 있는 컨테이너의 실행순서는 특정한 Dockerfile 의존성을 가질 수 밖에 없다. 따라서 해당 컨트롤을 수동으로 하지 않고 자동화하기 위해서 나온 것이 도커 컴포즈이다.
- docker-compose 를 이용하면, 다수의 컨테이너를 의존관계를 설정하여 실행시키기 용이하다.
참고링크
'인프라 관련' 카테고리의 다른 글
20210117 Virtualization (가상화) (0) | 2021.01.17 |
---|---|
20210116 Hypervisors (하이퍼바이저) (0) | 2021.01.16 |
20200226 [docker] docker 윈도우 설치 및 스프링 부트 도커라이징 (0) | 2020.02.26 |
20180627 GCP 06 : SDK For Window & Google Cloud Tools for Eclipse Plugin (0) | 2018.06.27 |
20180624 GCP 05 : Google Cloud SDK (0) | 2018.06.24 |