본문 바로가기

DevOps & Infra/Docker

[Infrastructure/Docker] 도커(Docker)와 컨테이너(Container)

도커(Docker)

도커는 소프트웨어를 빠르게 구축하고 배포하기 위한 소프트웨어 플랫폼입니다. 소프트웨어를 도커의 컨테이너라고 불리우는 표준화된 유닛으로 패키징하고, 이를 사용하여 독립된 환경에서도 동일한 실행 결과를 보장합니다. 우리가 어떤 소프트웨어를 서비스화 할 때, 도커를 사용하면 반복된 배포 작업에 대해서 일관성있고 생산성있는 결과를 제공합니다.

컨테이너(Container)

도커의 컨테이너는 소프트웨어를 실행하기 위한 모든 리소스-코드(Code), 의존성(Dependencies), 런타임(Runtime), 에셋(Assets), 시스템 도구(System tools), 설정(Settings) 등을 표준화된 유닛으로 패키징한 결과입니다. 컨테이너는 소프트웨어의 개발과 독립된 환경에서의 배포를 위한 목적으로 사용됩니다. 

컨테이너화(Containerized) 된 소프트웨어는 그것이 리눅스 또는 윈도우 기반인지에 상관 없이 모든 인프라(Infrastructure)에서 독립적이고 동일한 실행을 보여줍니다. 컨테이너가 소프트웨어를 환경에서 격리하기 때문에 가능한 일입니다.

출처 : https://www.docker.com/resources/what-container

도커의 컨테이너는 도커 엔진에서 실행됩니다. 컨테이너 사용의 장점은 다음과 같습니다.

  • 표준(Standard)
    도커는 컨테이너에 대한 산업 표준을 제시합니다.
  • 경량(Lightweight)
    VM 등 기존의 가상화 방식과 달리 OS 시스템 커널을 공유합니다. 이는 소프트웨어 배포시마다 OS를 할당할 필요가 없어 더 빠르고, 효율적이며 라이센스와 같은 비용을 절감하게 합니다.
  • 보안(Secure)
    컨테이너에서 실행되는 소프트웨어는 더 안전하고, 고립된 상태를 유지합니다.

컨테이너 호환성

도커의 컨테이너는 2013년 도커 엔진이라고 불리우는 오픈 소스에서 시작되었습니다. 리눅스에서의 성공에 이어서, 현재는 윈도우, 데이터 센터, 클라우드, 서버리스 등에서도 도커 컨테이너를 사용 할 수 있습니다.

출처 : https://www.docker.com/resources/what-container

컨테이너와 가상 환경(VMs, Virtual machines)의 차이점

가상 환경은 하드웨어를 에뮬레이션하는 방식을 사용합니다. 하드웨어를 에뮬레이션하는 과정은 가상 디스크, 가상 메모리, 가상 NIC 등 하드웨어 뿐만 아니라 OS와 관련 소프트웨어를 가상화하는 단계를 포함합니다. 따라서 각각의 가상 환경은 게스트 OS를 포함하게 됩니다. 그만큼 무겁고, 재사용성이 약하고, 실행이 느릴 수밖에 없습니다.

컨테이너는 하드웨어 대신 OS를 가상화합니다. 게스트 OS가 별도로 존재하지 않으며, 호스트 OS의 리소스를 빌려서 사용합니다(하나의 커널을 여러 개의 컨테이너가 공유). 그만큼 가볍고, 재사용성이 좋고, 실행이 빠릅니다. 

출처 : https://www.docker.com/resources/what-container