Docker 사전지식

EBAB!·2023년 7월 12일
0

Docker

목록 보기
1/15

도커 전에는 프로세스를 알아야 합니다.

프로그램, 프로세스(Task)

프로그램은 실행 파일입니다. 실행을 위한 파일이고 말 그대로 파일입니다. 이 실행 파일이라 했으니 이 파일을 실행했을 때 나타나는 것이 프로세스입니다.
이런 프로세스가 여러 개 실행되는 것을 멀티 태스킹이라 하는데, 태스크는 프로세스와 같은 의미로도 쓰이고 스레드를 태스크로 부르기도 합니다.

따라서, 태스크라 하면 프로세스 혹은 스레드를 의미하는 것이고 문맥에 맞게 해석해서 들으면 되는 정도로 이해할 수 있습니다.

Container 프로세스

이렇게 실행된 프로세스는 OS에서 CPU와 메모리를 할당하고 관리합니다. container또한 프로세스로 인식됩니다. 따라서 호스트의 입장에서는 실행된 컨테이너는 하나의 프로세스처럼 보이게 됩니다.

그렇지만 다른 프로세스와의 차이점은 컨테이너라는 말대로 격리가 된다는 점입니다. 격리된 컨테이너이기에, 실행한 호스트와 소통하기위한 설정을 해주어야 합니다.

가상머신과 도커

Virtual Machine (VM)


가상 컴퓨터인 VM은 컴퓨터 내에서 또 다른 컴퓨터를 두는 것입니다.
컴퓨터는 하드웨어(물리), 소프트웨어(가상)인 부분으로 이루어져 있고, 소프트웨어에서 유저, 커널모드로 나뉘고, 프로세스가 유저모드에 존재하면서 소켓을 통해 데이터 통신이 일어납니다.

그리고 컴퓨터 내의 VM도 같은 구조를 가지고, Virtual이 들어가는 이유는 당연하게도 하드웨어 부분도 커널 영역에서 가상으로 구현되어 있기 때문입니다.
실제 가상 하드웨어의 NIC은 Virtual NIC Driver를 통해 밖으로 연결됩니다.
이러한 VM을 GuestOS라 하고 이 GuestOS는 Virtual NIC Driver을 L2 스위치처럼 사용합니다.

예를 들어, GuestOS에서 크롬을 실행했고 그것이 통신으로 나갈 때, 자신에게 연결된 Virtual NIC Driver로 나갑니다.
그럼 Virtual NIC Driver는 0번째 Virtual NIC Driver으로 데이터를 전송하고, 0번째는 NAT역할(공유기)을 하며 실제 호스트의 Driver로 나가게 됩니다.

문제점과 Container

그렇다면 우리가 VM을 굳이 사용한다면 그 이유는 다른 OS 환경에서 실행할 수 있는 프로세스, 어플리케이션을 격리된 형태로 다루기 위해서가 대부분입니다.

여기서 생겨나는 문제는,

  1. VM이 3개가 있다고 했을 때 모두 같은 OS를 사용한다면?
  2. 아니면 다 다른 OS라도 가상화된 하드웨어 부분이 겹치는 부분이 많다면?

정도가 있습니다. 겹치는 부분을 여러개 둘 필요가 없다고 생각하면서 생겨난 개념이 Docker입니다.
3줄 요약

  1. OS 우리가 여러 APP을 실행한다.
  2. 각 OS마다 실행, 관리할 APP이 있다면 가상의 컴퓨터(VM)을 둬서 실행한다.
  3. 너무 무겁다. OS도 제공하는 방식으로 가자.

Docker

위의 그림을 다시보면,

컨테이너 배포에서 컨테이너 내부에 OS가 없기 때문에 확연히 가벼워집니다.
OS를 제외한 것이 아니라, Container Runtime에서 OS를 제공합니다. 이 때 제공하는 방식은 마치 OS를 실행파일처럼 여러 번 실행 가능하도록 제공하여 여러 컨테이너에서 사용하도록 한다는 점입니다.

이런 컨테이너 런타임을 제공하는 도구가 Docker입니다.

profile
공부!

0개의 댓글