DevOps의 컨테이너화: 알아야 할 모든 것

게시 됨: 2022-09-16

컨테이너화를 통해 기업은 운영 체제를 가상화하고 컨테이너라고 하는 격리된 영역에 애플리케이션을 설치할 수 있습니다.

컨테이너화는 애플리케이션을 생성하는 현대적인 방법입니다.

레거시 시스템과 그 아키텍처가 사람들이 "내 코드가 작동하지 않습니다. 이유를 모르겠어! 코드는 작동하지만 이유를 모르겠습니다!”

애플리케이션이 성장함에 따라 애플리케이션의 정의는 단순한 코드에서 코드, 바이너리, 구성 및 실행 환경 세트로 변경되었습니다.

우리가 초기에 자주 겪었던 상황을 상상해 보십시오. 랩톱에서 개발자는 일부 Java 8 코드를 개발했습니다. 웹 서버/VM에서 동일한 코드가 작동하지 않았습니다. 많은 문제 해결 후 서버의 Java 버전이 JDK11인 것으로 나타났습니다.

혼란스러운?

코드는 그대로 유지되었지만 코드를 지원하는 소프트웨어의 구성이 다릅니다. 작은 일 때문에 개발자들은 많은 어려움을 겪었습니다. Linux에서 Windows OS로 코드를 전송할 때도 마찬가지입니다.

레거시 시스템의 관리 오버헤드, 확장성 및 비용 비효율성은 다양한 클라우드 공급자가 제공하는 VM에서 워크로드를 호스팅하는 클라우드 컴퓨팅의 채택으로 이어졌습니다. 그것은 가상화에 불과합니다.

가상화는 간단히 말해서 클라우드 공급자/데이터 센터에서 제공하는 단일 서버/VM의 여러 운영 체제(OS)입니다. 가상화는 물리적 하드웨어가 필요하지 않거나 내부에 무엇이 있는지 알 필요 없이 애플리케이션을 격리합니다.

그러나 이 아키텍처도 시간의 테스트를 견디지 ​​못했고 컨테이너화가 시작되었습니다.

컨테이너화는 운영 체제를 OS를 보유하여 더 효율적으로 사용할 수 있는 청크로 분할하는 데 중점을 둡니다. VM에서 실행되는 운영체제나 하드웨어에 대한 걱정 없이 애플리케이션 코드를 실행하는 작은 미니 환경입니다.

이제 컨테이너화에 대해 자세히 살펴보겠습니다.

컨테이너화란 무엇입니까?

컨테이너화-1

컨테이너화는 환경(실행될 운영 체제라고도 함)을 포함하여 애플리케이션의 모든 구성 요소가 컨테이너라는 VM의 격리된 공간에 패키징되는 일종의 운영 체제 가상화입니다. 이러한 컨테이너의 기본 운영 체제는 동일하지만 구성의 일부로 자체 운영 체제가 있습니다.

컨테이너는 광범위하고 무거운 시스템이 아닙니다. 대신 작고 휴대 가능하며 실행 또는 설정이 쉽습니다. 개발자가 앱을 컨테이너화하면 컨테이너는 호스트 운영 체제에서 분리되고 경량 가상 머신과 같은 시스템 리소스에 대한 액세스가 제한됩니다. 컨테이너화된 애플리케이션은 다시 작성할 필요 없이 베어메탈, 클라우드 또는 VM과 같은 다양한 인프라에서 실행할 수 있습니다.

컨테이너화 기술은 어떻게 작동합니까?

컨테이너화는 애플리케이션이 필요로 하는 모든 부분을 단일 가상 유닛에 넣는 방식으로 작동합니다.

컨테이너화를 통해 개발자는 애플리케이션 코드를 구성 파일, 종속성 및 라이브러리와 함께 묶을 수 있습니다. 호스트 OS에서 단일 소프트웨어 패키지(컨테이너)를 분리합니다. 패키징을 사용하면 컨테이너를 단독으로 사용하고 이식할 수 있으므로 모든 플랫폼이나 클라우드에서 문제 없이 실행할 수 있습니다. 레고 보드의 작은 레고 조각으로 생각하십시오.

그러나 컨테이너는 가상화된 하드웨어 또는 커널 리소스를 직접 사용하지 않습니다. 컨테이너는 VM에서 실행되는 운영 체제에 대해 신경 쓰지 않습니다.

대신 컨테이너는 컨테이너를 처리하고 기본 리소스를 숨기도록 특별히 설계된 플랫폼의 "위에서" 실행됩니다. 컨테이너는 애플리케이션의 가장 중요한 구성 요소와 종속성만 포함하기 때문에 속도와 크기 면에서 가상 머신 및 베어메탈 서버와 같은 대안보다 우수합니다. 또한 관련 문제를 처리하지 않고도 다양한 컨텍스트에서 동일한 애플리케이션을 실행할 수 있습니다.

컨테이너화와 가상화

애플리케이션 수명 주기에 익숙하지 않은 사람들은 Docker와 같은 소프트웨어가 만드는 컨테이너화와 기존 서버 가상화(HyperV 및 VMware ESXi와 같은 하이퍼바이저가 지원하는 것) 간의 차이점을 항상 알지 못합니다. 그러나 차이점은 다음과 같습니다.

컨테이너화 대 가상화 1

서버 가상화에서는 하드웨어가 숨겨져 있고 그 위에서 운영 체제가 실행됩니다. 컨테이너화는 운영 체제 위에서 앱을 실행하는 방법입니다. 가상화는 기본 호스트 운영 체제에 따라 다르지만 리소스가 충분하지 않으면 하드웨어에 대해 걱정하지 않습니다. 다음은 차이점의 전체 목록입니다.

재산 컨테이너화 가상화
환경 컨테이너는 여러 환경에서 실행되는 OS와 함께 패키지됩니다. 가상화는 호스트 위에 구축되며 OS별로 분리되어 머신으로 나타납니다.
시작
컨테이너는 시작 시 시간이 매우 적게 걸립니다. 가상 머신은 시작하는 데 몇 분 정도 걸립니다.
자원 리소스를 전혀 사용하지 않는 아주 작은 환경입니다. VM은 확장 기능이 없는 리소스를 많이 사용합니다.
구현 기본 하드웨어는 하이퍼바이저에 의해 가상화됩니다(동일한 하드웨어 사용). 컨테이너는 운영 체제를 가상으로 만듭니다(동일한 OS 사용).
비용 구현하기 쉽고 저렴합니다. 이는 비용이 많이 들고 기계의 크기에 따라 클라우드 제공자에게 많은 비용을 지불해야 합니다.
컨테이너화와 가상화

컨테이너화 계층

컨테이너화 레이어

하드웨어 인프라: 각 애플리케이션의 기초는 생산적으로 사용할 수 있는 유형 리소스 모음입니다. 컨테이너가 올바르게 작동하려면 이러한 리소스가 있어야 합니다. 랩톱에서 실행되거나 클라우드에 연결된 많은 데이터 센터 중 하나에서 실행될 수 있습니다.

호스트 운영 체제: 하드웨어 계층 다음에 다음 계층인 호스트 운영 체제가 옵니다. 하드웨어 계층과 마찬가지로 이는 개인용 컴퓨터에 Windows 또는 *nix를 설치하는 것처럼 간단하거나 클라우드 서비스 공급자가 완전히 처리할 수 있습니다.

컨테이너 엔진: 여기에서 상황이 흥미진진하게 바뀌기 시작합니다. 바로 컨테이너 엔진입니다. 컨테이너 엔진은 호스트 운영 체제 위에 설치된 소프트웨어이며 컨테이너화된 애플리케이션에 필요한 리소스를 가상화하는 역할을 합니다.

이 계층은 Docker가 컴퓨터에서 실행될 때 파악하기 가장 쉽습니다. 이 계층은 컨테이너가 실행되고 있는지 확인하고 전체 수명 주기를 관리합니다.

컨테이너: 컨테이너화된 앱은 앱을 실행하는 데 필요한 모든 라이브러리, 바이너리 및 구성 설정을 포함하는 코드입니다. 컨테이너는 Docker 컨테이너라고도 합니다. 컨테이너화된 애플리케이션은 운영 체제의 커널과 구별되는 "사용자 공간"에서 프로세스로 작동합니다.

컨테이너화의 이점

컨테이너화의 이점

이식성 : 사람들은 한 환경(예: 스테이징)에서는 잘 작동하지만 다른 환경에서는 잘 작동하지 않는 응용 프로그램에 대해 불평합니다. DevOps의 딜레마입니다. 일반적으로 문제는 환경 차이입니다. 아마도 종속성이 업데이트되었을 것입니다. 종속성을 포함한 동일한 컨테이너 이미지는 컨테이너화를 통해 어디에서나 실행할 수 있습니다.

빠름 : 컨테이너가 가상 머신이나 베어메탈 서버보다 빠르게 시작됩니다. 컨테이너는 몇 초 만에 부팅되지만 가상 머신은 리소스와 앱 크기에 따라 몇 분이 걸립니다.

리소스 효율성 : 컨테이너는 앱별 파일만 포함하므로 가상 머신보다 더 효율적입니다. 가상 머신은 기가바이트이고 컨테이너는 메가바이트입니다. 컨테이너를 통해 팀은 서버 리소스를 효율적으로 사용할 수 있습니다.

배포-개발 단순성 : 휴대용 컨테이너는 어디서나 사용할 수 있습니다. 컨테이너화된 앱은 빠르고 작으며 배포하기 쉽습니다.

컨테이너화를 통해 팀은 로컬 및 프로덕션 환경에서 동일한 이미지를 구축할 수 있습니다. 컨테이너 앱은 한 위치에서는 작동하지만 다른 위치에서는 작동하지 않는 상황을 줄일 수 있습니다. CI/CD 파이프라인은 컨테이너 건설을 지원합니다. 이러한 이점은 팀 생산성을 향상시킵니다.

문제 해결 : 컨테이너화는 애플리케이션을 격리하고 분리합니다. 한 컨테이너의 오류는 다른 컨테이너의 기능에 영향을 주지 않습니다. 개발 팀은 다른 사람에게 영향을 주지 않고 결함이 있는 컨테이너를 식별하고 수리할 수 있습니다. 컨테이너 엔진은 SELinux 액세스 제어를 사용하여 컨테이너 문제를 찾고 격리할 수 있습니다.

보안 : 프로그램을 컨테이너화하면 맬웨어가 다른 앱이나 호스트 시스템에 해를 끼치는 것을 방지할 수 있습니다. 원하지 않는 구성 요소가 다른 컨테이너에 들어가는 것을 막거나 통신을 제한하도록 지정된 보안 권한이 설정됩니다.

관리 용이성 : 컨테이너 오케스트레이션 플랫폼을 사용하여 컨테이너화된 워크로드 및 서비스를 자동화합니다. 컨테이너 오케스트레이션은 새 앱 버전 출시, 컨테이너화된 프로그램 확장, 모니터링, 로깅 및 디버깅을 포함한 관리 작업을 단순화합니다.

연속성 : 한 컨테이너의 오류가 다른 컨테이너에 영향을 미치지 않습니다. 개발자는 다른 컨테이너에 영향을 주지 않고 하나의 컨테이너를 수정할 수 있습니다. 컨테이너화는 운영 연속성을 보장합니다.

결론

컨테이너화는 시간이 지남에 따라 더 효율적이 될 최근 소프트웨어 개발 개념입니다. 지지자들은 개발자가 소프트웨어와 앱을 보다 빠르고 안전하게 만들고 배포하는 데 도움이 된다고 믿습니다.

컨테이너화 생태계가 성숙하고 성장함에 따라 업계 참가자들은 가격이 하락할 것으로 예상합니다. 그러나 운영 문제는 해결되지만 너무 작은 환경으로 인한 유지 관리 오버 헤드는 뒷자리를 차지합니다. 컨테이너화 다음으로 중요한 것은 오케스트레이션입니다.

최신 앱은 여기서 멈추지 않을 것입니다. Kubernetes는 컨테이너화 및 마이크로서비스의 차세대 핵심 기술입니다. Kubernetes를 사용하면 컨테이너 설치를 더 쉽게 확장하고 관리할 수 있습니다. K8s는 Docker 또는 LXC보다 큰 컨테이너 배포를 관리합니다. K8s는 컨테이너 관리를 위한 좋은 도구입니다.

이제 컨테이너는 과거의 일이 되었으므로 일반적인 권장 사항은 K8로 이동하는 것입니다.