Docker란
도커란 컨테이너 기반의 가상화 오픈소스 플랫폼으로 애플리케이션을 개발, 배포 및 실행을 용이하게 해주는 도구입니다. 컨테이너라는 격리된 환경에서 애플리케이션을 독립적으로 실행하여 종속성을 해결하고 이식성을 높일 수 있습니다.
컨테이너(Container)와 이미지
컨테이너는 애플리케이션과 그 애플리케이션을 실행하기 위해 필요한 종속성(라이브러리, 실행환경, 설정 등)을 포함한 격리된 환경입니다. 컨테이너는 가상화 기술을 사용하여 호스트 운영체제로부터 분리되어 실행됩니다. 이를 통해 애플리케이션 간의 충돌을 방지하고 이식성을 높이며, 애플리케이션 배포 및 관리를 간편하게 할 수 있습니다. 컨테이너는 이미지를 기반으로 생성되며, 필요한 종속성과 실행환경을 포함합니다.
도커 이미지는 애플리케이션을 실행하는데 필요한 파일과 설정(소스 코드, 라이브러리, 종속성 등)을 담은 패키지로 애플리케이션의 실행에 필요한 모든 요소를 포함하고 있습니다. 도커이미지는 애플리케이션을 독립적인 단위로 캡슐화하고 이식성을 제공하며, 다른 환경에서도 쉽게 배포하고 실행할 수 있게 합니다. 이미지를 생성한 후에는 변경되지 않으며(불변), 읽기 전용으로 스냅샷 또는 템플릿으로 볼 수 있습니다.
Docker와 VM(Virtual Machine, 가상머신)
도커와 가상머신은 애플리케이션 가상화를 위한 2가지 주요 접근법입니다. 도커는 가상화 기술의 한 형태로, 가상머신과는 다른 독특한 특징을 가지고 있습니다.
가상머신
가상머신은 기존의 가상화 기술로, 호스트 운영체제 위에 가상의 하드웨어 계층을 만들어서 여러 개의 운영체제를 동시에 실행할 수 있게 해 줍니다. 가상머신은 Hypervisor(하이퍼바이저)를 통해 호스트 시스템과 게스트 운영체제 간의 상호작용을 관리합니다. 각각의 가상머신은 독립된 운영체제와 자원(메모리, CPU, 디스크 등)을 할당받아 독립적으로 동작하며, 서로 간섭 없이 독립된 환경에서 실행됩니다.
가상머신은 호스트 시스템과 완전히 분리된 환경을 제공하여 애플리케이션 간의 충돌을 방지하고 보안을 강화할 수 있습니다. 또한 각각의 가상머신은 독립된 운영체제를 가지므로 다양한 운영체제와 환경을 지원할 수 있습니다. 하지만 가상머신은 추가적인 운영체제와 자원을 가상화하기 위해 상대적으로 높은 시스템 자원을 필요로 하며, 무겁고 느린 성능을 보일 수 있습니다.
Hypervisor(하이퍼바이저)
하이퍼바이저는 호스트 컴퓨터에서 다수의 운영체제(Operating System)을 동시에 실행하기 위한 논리적인 플랫폼입니다. 컴퓨터 시스템에서 하드웨어를 가상화하여 여러 개의 가상 머신을 동시에 실행하고 관리합니다. 호스트 시스템과 게스트 시스템 간의 인터페이스 역할을 하며, 하드에어 리소스를 가상 머신에 할당하여 가상화 환경을 제공합니다.
도커
도커는 컨테이너 기반 가상화 기술로, 가상머신과는 다른 접근법을 가지고 있습니다. 도커는 호스트 운영체제 커널을 공유하며 실행되는 프로세스를 격리하는 방식을 사용합니다. 이를 통해 도커는 컨테이너라는 독립된 환경을 가지면서도 호스트 운영체제와 상호작용으로 실행될 수 있습니다.
도커는 가상머신과는 달리 가볍고 빠른 성능을 제공합니다. 이미지 단위로 애플리케이션과 종속성을 패키징하여 이식성과 확장성을 높일 수 있으며, 이미지(불변)를 사용하기 때문에 일관된 실행 환경을 보장할 수 있는 장점이 있습니다. 하지만 도커는 호스트 운영체제의 커널을 공유하기 때문에 보안에 취약점이 있을 수 있습니다.
Docker | VM | |
단위 | 애플리케이션 | OS |
구조 | 호스트 운영체제의 커널 공유 | 각각 독립된 운영체제와 커널 |
속도 | 상대적으로 빠름 | 상대적으로 느림 |
이미지 | 가벼움 | 무거움(Guest OS) |
확장성 | 빠른 스케일링과 확장성 제공 | 상대적으로 제한적 |
자원 | 적은 자원 필요 | 더 많은 자원 필요 |
격리 | 커널을 공유하며 격리된 환경 제공 | 완전한 격리 |
보안 | 호스트 커널을 공유하므로 취약성이 있을 수 있음 | 호스트 커널과 분리 |
Docker를 사용하는 이유
도커의 주요 장점 중 하나는 가볍고 빠른 성능입니다. 도커는 호스트 운영체제의 커널을 공유하고 프로세스를 격리하는 방식을 사용하여 가상머신에 비해 자원 사용이 효율적이며, 실행 속도가 빠릅니다.
또한 도커는 애플리케이션을 컨테이너라는 독립된 환경에 담아 실행합니다. 컨테이너는 애플리케이션과 그에 필요한 종속성을 포함한 격리된 환경이며, 가상화 기술을 사용하여 호스트 운영체제로부터 분리되어 실행됩니다. 이를 통해 애플리케이션 간의 충돌을 방지합니다.
그리고 도커는 이미지 단위로 애플리케이션과 종속성을 패키징합니다. 도커 이미지는 애플리케이션을 실행하는데 필요한 모든 요소를 포함하고 있습니다. 따라서 이미지를 사용하여 일관된 실행 환경을 보장할 수 있습니다. 이미지를 생성하여 다른 환경에서도 쉽게 배포하고 실행할 수 있어서 일관성을 유지할 수 있습니다.
도커는 확장성과 유연성을 제공합니다. 도커는 여러 개의 컨테이너를 동시에 실행하고 관리할 수 있으며, 필요에 따라 컨테이너를 추가하거나 제거하여 애플리케이션의 성능과 용량을 조절할 수 있습니다.
이러한 장점들로 인해 도커는 애플리케이션 개발, 배포, 실행 등을 효율적으로 관리하고 최적화할 수 있는 강력한 도구로 폭넓게 사용되고 있습니다.
참고
Docker: Accelerated, Containerized Application Development
Docker is a platform designed to help developers build, share, and run modern applications. We handle the tedious setup, so you can focus on the code.
www.docker.com
댓글