Doker란?

도커의 원리
도커는 컨테이너 기반의 가상화 기술로, 각각의 애플리케이션이 독립된 환경에서 실행되도록 해준다. 컨테이너는 가상 머신과는 다르게 호스트 운영 체제의 커널을 공유하며, 가벼운 환경에서 격리된 프로세스들을 실행할 수 있다. 이로 인해 여러 개의 컨테이너가 하나의 운영 체제 위에서 실행되지만, 서로 독립적이고 안전하게 동작할 수 있다.
컨테이너는 하드웨어와 운영 체제를 가상화하는 대신, 운영 체제의 커널을 공유하고, 필요한 라이브러리나 의존성만 포함시켜, 가상 머신보다 훨씬 더 효율적이고 경량화된 환경을 제공한다. 이로 인해 빠른 시작 시간과 낮은 리소스 소모가 가능하다.
- 컨테이너는 가볍고 빠른 작은 '상자’라고 생각하면 된다.
- 이 상자 안에는 애플리케이션이 실행되기 위해 필요한 코드, 라이브러리, 설정 등이 모두 들어 있다.
도커와 가상 머신의 차이점

- 가상 머신 (VM) : 가상 머신은 각기 독립적인 운영 체제를 실행하는데, 이를 위해 하이퍼바이저(가상화 소프트웨어)가 필요하다. 각 VM은 별도의 운영 체제와 커널을 갖고 있으므로 많은 자원과 시간이 소모됩니다. 가상 머신은 커널뿐만 아니라 전체 운영 체제를 포함하므로 여러 VM을 실행할 때 상당히 많은 시스템 자원을 요구한다.
- 가상 머신은 운영 체제(OS) 전체를 가상화해서 각각 독립된 OS를 실행한다.
무겁고 시작되는데 오랜 시간이 걸린다.
- 도커 컨테이너 : 도커 컨테이너는 호스트 운영 체제의 커널을 공유하면서, 각 애플리케이션이 격리된 공간에서 실행된다. 컨테이너는 운영 체제의 가상화를 최소화하고, 필요한 애플리케이션과 라이브러리만 포함되기 때문에 훨씬 더 가볍고 빠르며, 동일한 하드웨어에서 훨씬 더 많은 인스턴스를 실행할 수 있다.
- 도커 컨테이너는 호스트 컴퓨터의 운영 체제 커널(핵심 부분)을 공유한다.
즉, OS를 통째로 복제하지 않고 필요한 부분만 묶어서 실행하기 때문에 훨씬 가볍고 빠르다.
<aside>
💡
도커는 자원을 효율적으로 관리할 수 있어, 많은 수의 컨테이너를 한 시스템에서 실행할 수 있으며, 각 컨테이너가 동일한 하드웨어 리소스를 공유하면서도 서로 독립적으로 실행된다. 반면, 가상 머신은 각각 별도의 운영 체제를 포함하고 있기 때문에, 동일한 하드웨어에서 가상 머신을 많이 실행하면 성능 저하가 발생할 수 있다.
- 빠른 시작: 컨테이너는 OS를 부팅할 필요 없이 바로 실행돼서 시작 시간이 매우 짧다.
- 낮은 리소스 사용: 전체 OS를 복제하지 않으니 메모리와 CPU 사용이 적다.
- 이식성: 한 환경에서 만든 컨테이너를 다른 환경에서도 똑같이 실행 가능하다.
- 격리와 보안: 서로 다른 컨테이너는 독립적으로 동작해 충돌이나 보안 문제를 줄여준다.
</aside>
운영 체제 커널 공유
컨테이너는 호스트 OS의 커널을 같이 쓰면서도, 프로세스(작업)를 완전히 분리해 격리된 상태로 실행한다.
그래서 여러 컨테이너가 동시에 실행되어도 서로 영향을 주지 않고 독립적으로 동작할 수 있다.
- 가상 머신은 각자 독립된 집(운영 체제)을 짓는 것과 같다.
집마다 전기, 수도, 가구 등이 모두 새로 설치돼야 하니까 비용과 시간이 많이 드는 것처럼..
- 반면, 도커 컨테이너는 한 아파트(호스트 OS) 안에 여러 개의 방(컨테이너)을 만드는 것이다.
각 방은 독립된 공간이지만, 건물의 전기, 수도 시설은 공유하니까 훨씬 효율적이고 빠르다.
<aside>
💡
하이퍼바이저는 가상화 계층(Virtualization Layer)을 구현해주는 소프트웨어로, 하드웨어 위에서 가상 머신을 생성하고, 필요한 만큼 자원을 할당해주고, 가상 머신들의 요청을 처리해주는 등 가상화를 도와주는 역할을 한다.(물리 하드웨어와 가상 머신의 영역을 분리하고 자신이 그 사이에서 중간 관리자, 즉 인터페이스 역할을 한다.)
https://selog.tistory.com/entry/가상화-가상머신VM과-하이퍼바이저-쉽게-이해하기
커널은 항상 메모리에 상주하는 운영체제의 핵심이 되는 부분이다. 컴퓨터 자원을 관리하는 자원 관리자로서 대표적으로 다음 4가지 기능을 가지고 있다. 커널은 사용자가 물리적인 하드웨어에 접근하고 사용할 수 있도록 하기 위한 목적을 가지고 있고, 사용자가 쉘(Shell)을 통해 입력한 명령어를 해석하여 하드웨어에 전달해주는 역할을 한다.
- 메모리 관리
- 각 프로그램이 어디에서, 무엇을, 얼마나 사용하는지를 추적하고. 메모리 자원을 할당하는 역할을 한다.
- 가상 메모리를 사용할 수 있도록 한다.
- 프로세스 관리 및 CPU 스케쥴링
- 사용자가 시스템에 로그인 함과 동시에 수많은 프로세스가 실행되는데, 커널은 CPU의 시간 자원을 배분하는 역할 - 어떤 프로세스가 언제, 얼마나 사용할지 - 을 하여 여러 개의 프로세스가 동시에 동작하는 것처럼 보이게 한다.
- 디바이스 관리
- 컴퓨터에 연결된 장치들을 드라이버라는 매개체를 통해서 제어하고 관리한다.
- 시스템 콜 인터페이스 및 보안시스템 콜을 제공하여 응용 프로그램 - 프로세스의 서비스 요청을 수신한다.
https://velog.io/@geniee1220/OS-운영체제Operating-System와-커널Kernel
</aside>
도커의 주요 구성 요소