개발/Docker

[Docker] 도커와 가상머신(VM)

ash_ 2022. 6. 23. 15:45

Docker

도커는 리눅스의 응용프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈소스 프로젝트이다. (위키)

 

도커 컨테이너는 일종의 소프트웨어를 소프트웨어의 실행에 필요한 모든 것을 포함하는 완전한 파일 시스템 안에 감싼다. 여기에는 코드, 런타임, 시스템도구, 시스템라이브러리 등 서버에 설치되는 무엇이든 아우른다. 이는 실행중인 환경에 관계 없이 언제나 동일하게 실행될것을 보증한다. (도커 웹페이지 인용)

 

한 소프트웨어를 만들었을 때, 각 서버나 컴퓨터마다 환경이 다르다면 소프트웨어가 제대로 동작하지 않을 수 있다. 따라서 OS위에 컨테이너를 만들고, 그 안에서 소프트웨어 동작 환경을 설정해준다면 그 컨테이너를 이용하여 어떤 환경에서든 소프트웨어가 동작할 수 있게 만들어준다.

또한 매번 소프트웨어를 실행시킬 때마다 컨테이너를 만들고, 그 내부의 환경들을 하나하나 설치하기에는 매우 번거롭기 때문에, 우리는 Dockerfile 을 사용하여 컨테이너에 설치해야 하는 패키지, 소스코드, 명령어, 환경변수 설정 등을 기록할 수 있다.

 

컨테이너 VS 가상머신

가상머신(VM)은 Host OS위에 GuestOS가 실행될 두 있도록 기본 하드웨어를 가상화한다.

Guest OS는 각 OS의 이미지, 애플리케이션, 라이브러리 등을 포함한다.

하이퍼바이저(hypervisor)는 GuestOS들을 관리하고, 시스템 자원을 GuestOS에게 분배할 수 있도록 자원을 가상화 하는 역할을 한다.

 

VM→커널을 따로 만들어줌

컨테이너→커널을 호스트와 공유함

 

컨테이너는 `기본 OS를 가상화`하고 컨테이너화 된 앱이 CPU, 메모리, 파일스토리지, 네트워크 연결 등 OS를 자체적으로 포함하고 있다고 인식하도록 한다.(?)

컨테이너는 호스트OS의 자원인 커널을 공유하므로 OS를 부팅하거나 라이브러리를 로드할 필요가 없다.

컨테이너는 이식 가능하지만, 컨테이너가 정의된 운영체제로 제한된다. 예를들어 Linux용 컨테이너는 Windows에서 실행할 수 없으며, 그 반대의 경우도 마찬가지 이다.

 

컨테이너는 리눅스 상에서 이용되고, 리눅스 자체 기능만으로 구현되어 프로세스 단위로 독립적인 공간을 만드는 기술이다. 도커의 컨테이너는 리눅스의 컨테이너를 이용한 것이고, 리눅스의 컨테이너에 여러 기능을 추가하여 조금 더 이용하기 쉽게 만들어둔 것이다.