Contents

도커

VM vs 컨테이너

VM

https://user-images.githubusercontent.com/46465928/162631220-89136cdd-183a-4009-a655-d1c767c74a84.png

하드웨어 인프라스트러처 위에 VMWare나 VirtualBox와 같은 HyperVisor 소프트웨어를 이용해서 각각의 가상의 머신을 만들 수 있다. 한 운영체제 위에서 동일한 어플리케이션을 각각의 고립된 다른 환경에서 구동하기 위해서는 가상 머신을 이용해서 어플리케이션을 구동해야 했다. 이 가상 머신은 각각의운영체제를 포함하고 있기 때문에 맥이라는 OS 위에서 가상머신을 이용하면 윈도와 리눅스를 동시에 구동할 수 있다.

고립된 환경에서 애플리케이션을 구동하기 위해서 VM을 사용하면 운영 체제를 포함하고 있기 때문에 굉장히 무겁고 그리고 시작하는 데도 오래 걸리고 또 컴퓨터 운영체제 인프라스트럭처 리소스를 많이 잡아먹는 범인이 될 수도 있다.

컨테이너

https://user-images.githubusercontent.com/46465928/162631380-1d9fe3ab-62a3-4980-86d4-97210343d7a7.png

VM에서 조금 경량화된 컨셉이 컨테이너이다. 하드웨어에 설치된 운영체제 즉 호스트 OS에서 컨테이너 엔진이라는 소프트웨어를 설치만 하면 개별적인 컨테이너를 만들어서 이 각각의 어플리케이션을 고립된 환경에서 구동할 수 있게 해준다.

가상 머신은 운영체제를 포함했다면 이 컨테이너는 운영체제를 포함하지 않고 이 컨테이너 엔진의 설치된 호스트 OS를 공유한다. 컨테이너가 구동되기 위해서는 이 컨테이너 엔진이 필요하고 이 컨테이너 엔진이 호스트 OS에 접근해서 필요한 것들을 처리해 준다고 볼 수 있다. 그리고 이 컨테이너 엔진 중에 가장 많이 사랑받고 이용되는 것이 바로 도커이다.

도커의 구성요소

도커파일

컨테이너를 만들기 위해서는 먼저 도커 파일을 만들어야 하고 이걸 이용해서 이미지를 만들어서 컨테이너를 구동할 수 있다. 도커 파일은 컨테이너를 어떻게 만들어야 하는지 설명서 또는 요리로 치면 레시피와 같다. 우리 어플리케이션을 구동하기 위해서 꼭 필요한 일들은 무엇이 있는지 어떤 프레임워크나 라이브러리를 설치해야 되는지 외부 의존성에 대해서 명시할 수 있다. 그리고 필요한 환경 변수에 대해서 설정할 수도 있고 어떻게 구동해야하는지 스크립트도 포함 할 수 있다.

도커이미지

도커 파일을 이용해서 이미지를 만들 수 있다. 이 이미지 안에는 우리 어플리케이션을 실행하는 데 필요한 코드 런타임 환경 시스템, 툴 시스템, 라이브러리 모든 세팅들이 포함되어 있다. 한마디로 얘기하면 실행되고 있는 우리 어플리케이션의 상태를 캡쳐해서 이미지로 만들어 둔다 라고 생각할 수 있다. 이렇게 만들어진 이미지는 변경이 불가능하다.

컨테이너

컨테이너는 샌드박스 처럼 우리가 잘 캡쳐해 둔 어플리케이션의 이미지를 고립된 환경에서 개별적인 그 파일 시스템 안에서 실행할 수 있는 것을 말한다. 각각의 컨테이너는 만들어진 인스턴스 라고 볼 수 있다.

참고

https://youtu.be/LXJhA3VWXFA