🐳 Docker, 도커
컨테이너를 사용해 응용 프로그램을 더 쉽게 만들고 배포, 실행할 수 있도록 설계된 도구
컨테이너 기반의 오픈소스 가상화 플랫폼이다.
리눅스나 윈도우 기반의 애플리케이션 모두 사용할 수 있으며 인프라에 관계없이 항상 동일하게 실행된다.
❓ 컨테이너 & 이미지
📦 컨테이너
컨테이너는 코드와 모든 종속성을 패키지화하여 응용 프로그램이 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행되도록 하는 소프트웨어의 표준 단위라고 Docker의 공식 홈페이지에서 정의하고 있다.
도커의 컨테이너란 우리가 일반적으로 알고 있는 컨테이너와 매우 유사하다.
일반적으로 컨테이너는 화물을 옮길 때 컨테이너에 물건을 넣어 다양한 운송 수단을 통해 쉽게 옮길 수 있도록 한 것이다.
이처럼 도커는 컨테이너 안에 다양한 프로그램과 실행 환경 등을 추상화하고, 동일한 인터페이스를 제공하여 프로그램의 배포와 관리를 단순화해준다.
따라서, 일반적인 개념의 컨테이너와 유사하게 AWS, Google Cloud 등 어디에서든지 실행이 가능하도록 한다.
🖼️ 이미지
코드, 설정, 종속성과 같이 응용 프로그램을 실행하는데 필요한 모든 것을 포함하는 가볍고 독립적이며 실행가능한 소프트웨어 패키지이다.
컨테이너 이미지는 런타임 중에 컨테이너가 된다! 이미지는 컨테이너의 인스턴스 개념
VM 🆚 Docker
기존의 가상화 방식은 OS를 가상화하는 방식을 사용했다. 그런데 왜 현재는 Docker를 많이 사용하게 되었을까?
기본적으로 VM과 컨테이너는 기본 하드웨어에서 격리된 환경 내에 애플리케이션을 배치한다는 공통점을 가지고 있지만 환경을 격리를 얼마나 시키는지에 대한 차이점이 존재한다.
가상 머신(VM)은 호스트 OS와 하이퍼바이저(논리적으로 공간을 분할해 여러 VM을 실행하도록 도움을 줌)와 독립적이다. 가상 머신은 각 VM마다 독립된 하드웨어자원을 가지고 있으며, 독립된 커널 공간을 가진 OS를 생성하는 환경을 가지고 있다. 때문에 OS까지 가상화를 해 느리다는 단점을 가지고 있다.
반면 컨테이너는 프로세스, 하드웨어를 격리하지만 같은 호스트의 다른 컨테이너들과 동일한 커널을 공유한다. 따라서 컨테이너는 전체 OS를 내장할 필요가 없어 매우 가볍다는 특징을 가진다.
컨테이너 : 호스트 OS 위에 애플리케이션의 실행 패키지인 이미지 배포
VM : VM을 띄우고 자원을 할당 → 게스트 OS를 부팅 → 애플리케이션을 실행
⇒ 컨테이너보다 훨씬 무겁고 복잡하게 실행해야하기 때문에 느리다!
📚 Reference
[인프런] 따라하며 배우는 도커와 CI환경
Docker/ What is a Container?