Docker 및 컨테이너를 사용해야하는 이유

1981 년에 출판 된 Nailing Jelly to a Tree 라는 책  은 소프트웨어를 "모호하고 단단히 잡기 어렵다"고 설명합니다. 그것은 1981 년에 사실이었고, 그 이후 거의 40 년이 지나도 사실입니다. 구입 한 응용 프로그램이든 직접 만든 응용 프로그램이든 소프트웨어는 배포와 관리 및 실행이 어렵습니다.

Docker 컨테이너는 소프트웨어를 파악할 수있는 방법을 제공합니다. Docker를 사용하여 배포 및 런타임 문제 (네트워크에 노출하는 방법, 스토리지 및 메모리 및 I / O 사용 관리 방법, 액세스 권한 제어 방법)를 처리하는 방식으로 애플리케이션을 래핑 할 수 있습니다. 애플리케이션 자체 외부에서 모든 "컨테이너화 된"앱에서 일관된 방식으로. Docker 런타임이 설치된 모든 OS 호환 호스트 (Linux 또는 Windows)에서 Docker 컨테이너를 실행할 수 있습니다.

Docker는이 편리한 캡슐화, 격리, 이식성 및 제어 외에도 많은 다른 이점을 제공합니다. Docker 컨테이너는 작습니다 (메가 바이트). 그들은 즉시 시작됩니다. 버전 관리 및 구성 요소 재사용을위한 자체 기본 제공 메커니즘이 있습니다. 공용 Docker Hub 또는 개인 저장소를 통해 쉽게 공유 할 수 있습니다.

이 기사에서는 Docker 컨테이너가 어떻게 소프트웨어를 빌드하고 배포하는 것을 더 쉽게 만들어 주는지 살펴 보겠습니다. 컨테이너가 해결하는 문제, 문제를 해결하는 방법, 문제에 대한 올바른 대답 인 경우, 그렇지 않은 경우.

Docker 컨테이너 이전

수년 동안 엔터프라이즈 소프트웨어는 일반적으로 "베어 메탈"(예 : 기본 하드웨어를 완전히 제어하는 ​​운영 체제에 설치됨) 또는 가상 머신 (예 : 기본 하드웨어를 공유하는 운영 체제에 설치됨)에 배포되었습니다. 다른 "게스트"운영 체제). 당연히 베어 메탈에 설치하면 소프트웨어를 이동하기가 힘들고 업데이트하기가 어려웠습니다. 두 가지 제약으로 인해 IT가 비즈니스 요구의 변화에 ​​민첩하게 대응하기가 어려웠습니다.

그런 다음 가상화가 발생했습니다. 가상화 플랫폼 ( "하이퍼 바이저"라고도 함)을 사용하면 여러 가상 머신이 단일 물리적 시스템을 공유 할 수 있으며, 각 가상 머신은 전체 시스템의 동작을 에뮬레이션하고 자체 운영 체제, 스토리지 및 I / O를 격리 된 방식으로 완성합니다. . 이제 IT는 VM을 복제, 복사, 마이그레이션하고 가동 또는 축소하여 수요를 충족하거나 리소스를 절약 할 수 있으므로 비즈니스 요구 사항의 변화에보다 효과적으로 대응할 수 있습니다.

가상 머신은 또한 더 적은 수의 물리적 머신에 더 많은 VM을 통합 할 수 있기 때문에 비용을 절감하는 데 도움이되었습니다. 이전 애플리케이션을 실행하는 레거시 시스템을 VM으로 전환하고 물리적으로 폐기하여 더 많은 비용을 절약 할 수 있습니다.

그러나 가상 머신에는 여전히 문제가 있습니다. 가상 머신은 크기가 크며 (기가 바이트) 각 머신에는 전체 운영 체제가 포함됩니다. 너무 많은 가상화 된 앱만 단일 시스템에 통합 될 수 있습니다. VM 프로비저닝에는 여전히 상당한 시간이 걸립니다. 마지막으로 VM의 이식성이 제한됩니다. 특정 시점이 지나면 VM은 빠르게 변화하는 기업이 요구하는 속도, 민첩성 및 비용 절감 효과를 제공 할 수 없습니다.

Docker 컨테이너 이점

컨테이너는 VM과 비슷하지만 훨씬 더 구체적이고 세분화 된 방식으로 작동합니다. 단일 애플리케이션과 그 종속성 (앱이 실행하는 데 필요한 모든 외부 소프트웨어 라이브러리)을 기본 운영 체제 및 다른 컨테이너에서 격리합니다. 모든 컨테이너화 된 앱은 하나의 공통 운영 체제 (Linux 또는 Windows)를 공유하지만 서로간에 그리고 시스템 전체에서 구분됩니다.

Docker 컨테이너의 이점은 여러 곳에서 나타납니다. Docker 및 컨테이너의 몇 가지 주요 이점은 다음과 같습니다.

Docker를 통해 시스템 리소스를보다 효율적으로 사용할 수 있습니다.

컨테이너화 된 앱의 인스턴스는 가상 머신보다 훨씬 적은 메모리를 사용하고 시작 및 중지가 더 빠르며 호스트 하드웨어에 훨씬 더 조밀하게 패킹 될 수 있습니다. 이 모든 것이 IT에 대한 지출을 줄여줍니다.

비용 절감은 실행중인 앱과 리소스 집약적 인 정도에 따라 다르지만 컨테이너는 항상 VM보다 효율적으로 작동합니다. 동일한 워크로드를 실행하는 데 더 적은 수의 운영 체제 인스턴스가 필요하므로 소프트웨어 라이선스 비용을 절약 할 수도 있습니다.

Docker는 더 빠른 소프트웨어 제공주기를 가능하게합니다.

엔터프라이즈 소프트웨어는 변화하는 조건에 신속하게 대응해야합니다. 이는 수요를 충족하기위한 손쉬운 확장과 비즈니스 요구에 따라 새로운 기능을 추가하기위한 손쉬운 업데이트를 의미합니다. 

Docker 컨테이너를 사용하면 새로운 비즈니스 기능이 포함 된 새 버전의 소프트웨어를 프로덕션에 신속하게 배치하고 필요한 경우 이전 버전으로 빠르게 롤백 할 수 있습니다. 또한 블루 / 그린 배포와 같은 전략을 쉽게 구현할 수 있습니다.

Docker는 애플리케이션 이식성을 가능하게합니다.

엔터프라이즈 애플리케이션을 실행하는 위치는 방화벽 뒤에서 사물을 가깝고 안전하게 유지하기 위해 중요합니다. 쉬운 퍼블릭 액세스와 리소스의 높은 탄력성을 위해 퍼블릭 클라우드에 있습니다. Docker 컨테이너는 애플리케이션이 실행하는 데 필요한 모든 것을 캡슐화하기 때문에 (그리고 그러한 것들만) 애플리케이션을 환경간에 쉽게 이동할 수 있습니다. Docker 런타임이 설치된 모든 호스트 (개발자의 노트북 또는 퍼블릭 클라우드 인스턴스)는 Docker 컨테이너를 실행할 수 있습니다.

Docker는 마이크로 서비스 아키텍처에 빛을 발합니다.

가볍고 휴대 가능하며 독립적 인 Docker 컨테이너를 사용하면 미래 지향적 인 선에 따라 소프트웨어를 쉽게 빌드 할 수 있으므로 어제의 개발 방법으로 내일의 문제를 해결하려고하지 않습니다.

소프트웨어 패턴 컨테이너 중 하나는 애플리케이션이 느슨하게 결합 된 많은 구성 요소로 구성된 마이크로 서비스입니다. 기존의 "모 놀리 식"애플리케이션을 별도의 서비스로 분해함으로써 마이크로 서비스는 LOB (기간 업무) 앱의 여러 부분을 별도의 팀과 별도의 일정에 따라 개별적으로 확장, 수정 및 서비스 할 수 있습니다. 사업. 

컨테이너는 마이크로 서비스를 구현하는 데 필요하지 않지만 일반적으로 마이크로 서비스 접근 방식과 애자일 개발 프로세스에 완벽하게 적합합니다.

Docker 컨테이너로 해결되지 않는 문제

컨테이너에 대해 가장 먼저 염두에 두어야 할 것은 모든 소프트웨어 기술에 적용되는 것과 동일한 조언입니다. 이것은 은총이 아닙니다. 도커 용기 그 자체로는 모든 문제를 해결할 수 있습니다. 특히:

Docker는 보안 문제를 해결하지 않습니다.

컨테이너의 소프트웨어는 베어 메탈에서 실행되는 소프트웨어보다 기본적으로 더 안전 할 수 있지만, 이는 문이 잠겨있는 집이 문이 잠겨 있지 않은 집보다 더 안전하다고 말하는 것과 같습니다. 이웃의 상태, 도둑을 유혹하는 귀중품의 눈에 보이는 존재, 그곳에 사는 사람들의 일상 등에 대해 아무 말도하지 않습니다. 컨테이너는 앱에 보안 계층을 추가 할 수 있지만 컨텍스트에서 앱을 보호하는 일반적인 프로그램의 일부로 만 가능합니다.

Docker는 애플리케이션을 마술처럼 마이크로 서비스로 바꾸지 않습니다.

기존 앱을 컨테이너화하면 리소스 소비가 줄어들고 배포가 더 쉬워집니다. 그러나 앱 의 디자인 이나 다른 앱과 상호 작용하는 방식을 자동으로 변경하지는 않습니다 . 이러한 이점은 모든 것을 컨테이너로 옮기라는 명령뿐만 아니라 개발자의 시간과 노력을 통해서만 얻을 수 있습니다.

구식 모 놀리 식 또는 SOA 스타일 앱을 컨테이너에 넣으면 컨테이너에 오래된 앱이 생깁니다. 그것은 당신의 작업에 더 이상 유용하지 않습니다. 그다지 유용하지 않을 수 있습니다. 

Docker는 가상 머신을 대체하지 않습니다.

컨테이너에 대한 한 가지 지속적인 신화는 VM을 쓸모 없게 만든다는 것입니다. VM에서 실행되던 많은 앱을 컨테이너로 이동할 있지만 그렇다고 모든 앱이 가능하거나해야 한다는 의미는 아닙니다 . 예를 들어 규제 요구 사항이 많은 산업에있는 경우 VM이 컨테이너보다 더 많은 격리를 제공하기 때문에 컨테이너를 VM으로 교체하지 못할 수 있습니다.

Docker 컨테이너의 경우

기업 개발 작업은 은신처로 악명이 높고 변화에 느리게 반응합니다. 엔터프라이즈 개발자는 IT에 의해 부과 된 제한, 비즈니스 전체에서 요구하는 요구 사항 등 항상 이러한 제약에 맞서고 있습니다. Docker 및 컨테이너는 개발자가 원하는 자유를 더 많이 제공하는 동시에 변화하는 비즈니스 조건에 신속하게 대응하는 비즈니스 앱을 빌드하는 방법을 제공합니다.