Docker
Docker란?
Docker 플랫폼은 오픈소스 기술을 기반으로 개발자가 컨테이너에 애플리케이션을 구축할 수 있어 개발 과정에서 애플리케이션을 쉽게 수정하고 업데이트할 수 있습니다.
개발자가 Docker를 사용해야 하는 이유
Docker를 사용하면 개발자가 컨테이너라는 가상화 환경에서 애플리케이션을 패키징하고 실행할 수 있습니다. 이러한 격리와 보안을 통해 단일 호스트 시스템에서 여러 컨테이너를 독립적으로 동시에 실행할 수 있습니다. Docker는 컨테이너의 라이프 사이클을 관리하는 툴과 플랫폼을 제공합니다.
Docker의 이점
2013년에 출시된 Docker는 소프트웨어 개발 시 컨테이너 사용을 대중화하는 데 일조했습니다. Docker를 사용하면 컨테이너화된 애플리케이션을 손쉽게 구축하고 공유하며 실행할 수 있습니다. 모든 애플리케이션 종속성을 포함하여 몇 분 안에 새 컨테이너를 설정할 수 있습니다. 그런 다음 컨테이너화된 애플리케이션을 모든 인프라에서 실행할 수 있어 이동성이 뛰어납니다.
컨테이너가 유용한 이유
컨테이너는 민첩하고 애플리케이션을 실행하는 데 필요한 모든 것을 담고 있으며 호스트 인프라에서 소프트웨어를 추상화합니다. 컨테이너도 서로 격리되어 있어 전체 시스템이 더욱 안정됩니다. 컨테이너를 사용하면 큰 프로젝트를 여러 개발 팀이 나눠서 수행할 수 있으며 업무를 분산하고 구축 속도를 높일 수 있습니다.
Docker 작동 방식
Docker는 Linux 커널의 몇 가지 특성을 바탕으로 기능을 제공합니다. 예를 들면, 네임스페이스를 사용하여 컨테이너를 제공합니다. 컨테이너를 실행하면 해당 컨테이너에 대한 네임스페이스 세트가 작성됩니다. 이러한 네임스페이스는 컨테이너의 격리 계층을 제공합니다. 컨테이너의 각 측면은 별도의 네임스페이스에서 실행되며 해당 네임스페이스로 액세스가 제한됩니다.
호스트 시스템 리소스를 하드웨어 수준에서 추상화하는 VM(가상 시스템)과 달리 Docker는 OS(운영 체제) 수준에서 추상화합니다. 이 수준에서 가상화하면 VM보다 컨테이너 인스턴스가 더 민첩해지고 빨라집니다.
Docker를 선택해야 하는 이유
Docker는 소프트웨어 개발 워크플로를 단순화하고 가속화합니다. 개발자는 각 프로젝트에 요구되는 특정 사항에 맞춰 툴과 애플리케이션 스택, 구축 환경을 선택하여 자유롭게 혁신할 수 있습니다.
Docker는 민첩하고 빠르기 때문에 하이퍼바이저 기반 VM으로 실행할 수 있는 것보다 더 많은 워크로드를 동일한 호스트 시스템에서 실행할 수 있습니다. 따라서 고집적 환경과 더 적은 리소스로 더 많이 작업해야 하는 중소 규모의 구축 환경에 모두 적합합니다.
Docker의 컨테이너 기반 플랫폼은 워크로드의 이동성을 높여줍니다. Docker 컨테이너는 개발자의 로컬 장치, 물리적 온프레미스 또는 코로케이션 데이터 센터 하드웨어, VM 인스턴스, 퍼블릭 클라우드 플랫폼 또는 하이브리드 환경에서 실행될 수 있습니다. 이러한 이동성 덕분에 워크로드를 동적으로 관리하여 비즈니스의 필요에 따라 애플리케이션과 서비스를 거의 실시간으로 확장하거나 축소할 수 있습니다.
개발자는 Docker를 사용하여 라이브 서버 환경과 일치하도록 로컬 환경을 설정하고 구성이 다른 여러 개발 환경을 실행할 수 있습니다. 소프트웨어를 신속하게 테스트하여 환경과 조건의 범위에서 새로운 변경 사항이 올바르게 작동하는지 확인할 수 있으며 CI/CD(지속적인 개선과 지속적인 개발)라는 목표를 지원합니다.
또한 Docker를 사용하면 대규모 개발 프로젝트를 민첩한 여러 소규모 팀으로 분할하여 워크로드를 분산하고 구축 속도를 높일 수 있습니다. 기업은 이러한 효율적인 DevOps 워크플로를 통해 소프트웨어를 훨씬 더 자주 구축하고 장애로부터 더 신속하게 복구하며 변경 실패율을 훨씬 낮출 수 있습니다.
Docker가 구축되고 오케스트레이션되는 방식
사용자는 클라이언트를 통해 Docker와 상호 작용합니다. 이 클라이언트는 Docker 데몬이라고 알려진 호스트의 컨테이너를 관리하는 백그라운드 프로세스와 통신합니다. 데몬은 Docker 환경과 관련된 모든 내용을 추적합니다.
Docker Engine은 시스템의 핵심으로, 클라이언트 서버 아키텍처를 사용하는 애플리케이션이며 호스트 시스템에 설치됩니다. 호스트는 애플리케이션을 실행할 수 있는 환경을 제공합니다. 여기에는 Docker 데몬은 물론 다음과 같은 Docker 개체가 포함되어 있습니다.
- 이미지는 컨테이너를 구축하는 데 사용되는 읽기 전용 바이너리 템플릿입니다. 이미지의 메타 데이터는 컨테이너의 기능과 필요 사항을 설명합니다. 이미지를 자체적으로 사용하여 컨테이너를 구축하거나 요소를 추가하고 현재의 구성을 확장하도록 맞춤화할 수 있습니다. 컨테이너 이미지는 조직 내 또는 공개적으로 공유할 수 있어 개발자 간에 협업이 가능합니다.
- 컨테이너는 자체 이미지와 시작 시 제공되는 추가 구성 옵션(예: 네트워크 연결 및 스토리지 옵션)으로 정의됩니다. 컨테이너는 이미지를 구축할 때 추가적으로 액세스 권한을 정의하지 않은 한 이미지에 정의된 리소스에만 액세스할 수 있습니다.
- 시스템에서 격리된 컨테이너는 네트워크를 통해 서로 통신할 수 있습니다.
- 컨테이너의 데이터 스토리지는 기본적으로 영구적이지 않으며 컨테이너가 실행되지 않으면 삭제됩니다. 다만 데이터를 지속적으로 전송하거나 저장할 수 있는 데이터 볼륨과 스토리지 플러그인 등의 옵션을 제공합니다.
Docker 클라이언트와 데몬은 동일한 시스템에서 실행하거나 Docker 클라이언트를 원격 Docker 데몬에 연결할 수 있습니다. Docker 클라이언트는 둘 이상의 Docker 데몬과 통신할 수도 있습니다. Docker 클라이언트와 데몬은 UNIX 소켓 또는 네트워크 인터페이스를 통해 REST API를 이용하여 통신합니다.
Docker가 사용되는 방식
Docker는 워크플로를 단순화하고 가속화하기 때문에 소프트웨어 개발 팀에게 많은 이점을 제공하는데, 특히 유익한 특정 시나리오가 있습니다.
마이크로 서비스 아키텍처의 도입
많은 조직이 디지털 트랜스포메이션에 대한 노력의 일환으로 기존의 모놀리식 애플리케이션을 대체하고자 합니다. 모놀리식 애플리케이션이 단일 단위로 기능하는 반면, 마이크로 서비스 아키텍처는 더 작은 독립 단위들의 집합으로 나뉩니다. Docker는 이러한 마이크로 서비스를 컨테이너화하고 제공과 관리를 단순화합니다. 컨테이너화를 통해 개별 마이크로 서비스에 격리된 자체 워크로드 환경을 제공할 수 있어 독립적인 구축 및 확장이 가능합니다.
기존 애플리케이션이 컨테이너로 이동
마이크로 서비스로 재설계할 수 없는 애플리케이션의 경우 있는 그대로 컨테이너로 이동하는 옵션을 활용할 수 있습니다. Docker를 사용하여 이러한 애플리케이션을 컨테이너화하면 개발은 물론 테스트 효율성이 향상되고 구축과 재난 복구가 간소화되며 새로운 애플리케이션과의 충돌 없이 기존 애플리케이션의 여러 인스턴스를 실행할 수 있습니다.
ML(기계 학습) 구축
운영 시 적절한 규모로 훈련된 모델을 구축하는 것은 기계 학습 개발에 있어 매우 중요한 과제입니다. Docker는 TensorFlow와 같은 플랫폼을 활용하여 GPU 지원을 가능케 하여 ML 애플리케이션의 개발과 구축을 단순화합니다. 여러 시스템 또는 클라우드에 걸쳐 컨테이너를 활용하여 오케스트레이션 기술을 통해 모두 관리함으로써 ML 애플리케이션의 구축도 간소화됩니다.
서버 통합
VM와 마찬가지로 조직은 Docker의 애플리케이션 격리 기능을 통해 여러 서버를 통합하여 비용을 절감할 수 있습니다. Docker는 여러 OS를 실행하는 오버헤드 없이(VM 환경에서는 필요함) VM에서 가능한 것보다 집적도가 높은 서버 통합을 실현할 수 있습니다.
Docker가 포함된 HPE 솔루션
HPE Docker Enterprise Edition은 각종 환경에서 컨테이너를 구현하는 데 필요한 필수 구성 요소가 포함되어 상용으로 지원되는 구독 번들입니다. Docker의 Basic Edition에는 컨테이너 엔진과 오케스트레이션이 포함되어 있습니다. Standard Edition에는 여러 층의 이미지 및 액세스 관리가 추가되어 있습니다. Advanced Edition에는 보안 검사와 취약성 모니터링을 추가할 수 있습니다.
단지 몇 개의 명령으로만으로도 영구 볼륨 프로비저닝을 시작하여 HPE 스토리지의 간편성과 복원력을 활용할 수 있습니다. HPE Nimble Storage 및 HPE 3PAR 올플래시, 하이브리드 또는 보조 플래시 어레이는 컨테이너 환경에 적합한 성능과 규모를 지원합니다.
HPE Ezmeral Runtime은오픈 소스 Kubernetes를 바탕으로 구축된 통합 애플리케이션 컨테이너 플랫폼으로, 온프레미스, 다중 퍼블릭 클라우드, 하이브리드 모델 또는 엣지 등 모든 인프라에서 실행하는 클라우드 네이티브 및 비클라우드 네이티브 애플리케이션용으로 설계되었습니다.
이 플랫폼은 종량제 결제 모델로 HPE GreenLake와 함께 서비스형으로 제공됩니다. HPE 엔지니어들이 솔루션을 설치 및 구성하며, HPE는 솔루션의 완벽한 관리, 지원을 위한 단일 연락 창구, 고객사의 환경과 비즈니스를 잘 아는 기술 팀을 제공합니다. 표준화된 하드웨어 및 소프트웨어 빌드를 사용하면 비용이 많이 드는 수동 구축을 피하고, 14일 이내에 데이터 센터에 제공할 수 있습니다.