컨테이너 이미지란 무엇인가요?

2024년 8월 9일

작성자

Phill Powell

Staff Writer

Ian Smalley

Senior Editorial Strategist

컨테이너 이미지란 무엇인가요?

컨테이너 이미지는 실행 코드를 포함하고 IT 인프라에서 격리되어 작동하는 변경되지 않는 정적 파일입니다.

컨테이너 이미지는 운영체제에서 컨테이너를 생성하는 데 필요한 모든 구성 요소를 조합한 것으로, 여러 이미지 레이어가 겹쳐져 구성되어 있습니다. 컨테이너 이미지는 변경할 수 없으며 템플릿과 동일한 기능을 공유하기 합니다.

컨테이너 이미지는 일종의 파일 시스템 역할을 하는 컨테이너 이미지 레지스트리(또는 Container Registry) 내에 저장됩니다. Container Registry는 컨테이너 이미지를 저장하고 이에 접근할 수 있도록 보관하는 데이터 스토리지(또는 여러 스토리지)입니다.

Container Registry의 주목할 만한 장점 중 하나는 Kubernetes 및 Docker와 같은 컨테이너 오케스트레이션 시스템/플랫폼에 얼마나 원활하게 연결되는지입니다. 또한 컨테이너 기반 애플리케이션 개발 중에 DevOps 용량으로 Container Registry를 사용할 수 있으므로 최적화된 워크플로 통합이 가능합니다.

고속도로 조감도

클라우드에 집중 


AI 시대의 멀티클라우드 설정을 최적화하는 방법에 대한 전문가의 안내가 담긴 주간 Think 뉴스레터를 받아보세요.

컨테이너 이미지는 어떻게 생성되나요?

컨테이너 이미지는 다음을 포함하는 여러 레이어가 조합된 집합체입니다:

  • 기본 이미지
  • 라이브러리
  • 바이너리
  • 종속성
  • 구성 파일

처음부터 빌드된 새 이미지에서는 모든 것이 기본 이미지인 맨 아래 레이어에서 시작됩니다. 기본 이미지는 대부분의 컨테이너 기반 워크플로가 시작되는 곳입니다. 많은 기본 이미지는 기본 또는 최소 Linux 배포판(예: Debian, Ubuntu, Red Hat Enterprise Linux(RHEL), Rocky Linux 또는 Alpine)으로 구성됩니다. 기본 이미지는 컨테이너의 파일 시스템 파일이 저장되는 위치입니다. 기본 이미지를 만드는 프로세스("빌드"라고 함)를 통해 개발자는 사용자 지정 컨테이너 이미지를 지원하는 표준화된 환경을 구성할 수 있습니다.

그런 다음 다음을 포함한 일련의 파일 시스템 레이어가 기본 이미지 위에 추가되어 쌓입니다.

  • 필수 라이브러리 - 프로그래머가 공통 데이터 구조(예: 목록, 스택 및 큐)를 만드는 데 사용할 수 있는 알고리즘 및 클래스 템플릿의 표준 컬렉션입니다.
  • 필요한 바이너리 - 다른 프로그램 및 명령의 구현에 필요한 실행 파일입니다. 바이너리 폴더는 사용자가 필요한 실행 파일에 빠르게 액세스할 수 있도록 설계되었습니다.
  • 다양한 종속성 - 컨테이너의 생성 및 작동을 제어합니다.
  • 구성 파일(config) - 해당 컨테이너를 실행하는 데 필요합니다.

기존 이미지를 통합하는 컨테이너 이미지의 경우 기존 이미지의 기본 이미지를 상위 이미지라고 합니다. 이미지가 완전히 원본이면 상위 이미지가 없다고 합니다.

AI 아카데미

하이브리드 클라우드로 AI 지원 실현하기

IBM 사고 리더들이 이끄는 이 커리큘럼은 비즈니스 리더들에게 성장을 촉진하는 AI 투자의 우선순위를 정하는 데 필요한 지식을 제공합니다.

컨테이너 이미지는 어떻게 작동하나요?

컨테이너 이미지는 Container Registry에 저장되며, 이미지를 해당 레지스트리에 업로드("푸시")하거나 다른 시스템으로 다운로드("풀링")할 수 있습니다.

오브젝트 스토리지

Container Registry는 Object Storage를 사용하여 컨테이너 이미지에 대한 메타데이터를 나타냅니다. 이는 이러한 메타데이터를 성공적으로 전송할 수 있는 수단을 제공하지만 제한적입니다. 예를 들어 여러 이미지가 포함된 데이터의 경우 사용 가능한 목록 태그 수에 제한이 있습니다.

종속성 컨테이너

종속성 컨테이너는 또 다른 스토리지 방법을 제공합니다. 이러한 컨테이너를 사용하면 애플리케이션 내 종속성을 관리, 등록, 해결할 수 있습니다. 종속성은 한 개체 또는 프로세스가 발생해야 다른 개체가 순서대로 작동할 수 있는 상황을 설명합니다.

인증

온라인 보안의 시급한 필요성을 고려할 때, 리포지토리에 대한 액세스 권한이 부여된 개인의 인증은 필수적입니다. 인증은 해당 Container Registry와 관련된 일련의 권한을 사용합니다. 권한은 Container Registry에서 컴퓨터 리소스를 사용할 수 있는 사용자를 정의합니다.

컨테이너 런타임

런타임의 개념은 매우 중요합니다. 컨테이너 런타임은 컨테이너가 호스트 시스템 내에서 작동하도록 하는 소프트웨어로서, 런타임은 일련의 단계를 사용하여 컨테이너 생성을 수행합니다. 이러한 단계는 앱과 해당 종속성을 포함하는 컨테이너 이미지의 안내에 따라 컨테이너를 형성하고 환경을 초기화하는 전체 프로세스를 포괄합니다.

Docker 및 Kubernetes

컨테이너 및 컨테이너 이미지 사용의 중심이 되는 컨테이너 오케스트레이션에는 두 가지 공급자가 있습니다.

Docker

Docker는 애플리케이션 생성, 배포 및 실행의 복잡성을 줄여주는 컨테이너 오케스트레이션 시스템입니다. Docker는 특정 인프라와 상관없이 어떤 플랫폼에서도 실행할 수 있는 가볍고 독립적인 컨테이너를 쉽게 구축할 수 있는 방법으로 여겨집니다. Docker 컨테이너는 한 머신에서 다른 머신으로 이동할 수 있기 때문에 뛰어난 휴대성을 제공합니다. 또한 Docker는 사용자가 마이크로서비스를 컨테이너 이미지로 패키징할 수 있도록 하여 마이크로서비스 배포를 위한 표준 수단을 제공합니다.

Docker의 이미지 리소스는 DockerHub로, Docker 사용자, 소프트웨어 공급업체 및 오픈 소스 프로젝트가 공유하는 100,000개 이상의 이미지 및 기타 Docker 파일에 대한 무료 액세스를 제공합니다. 비공개로 사용할 수 있는 유료 Docker 컨테이너 레지스트리 서비스도 제공됩니다. Docker 이미지는 로그인, 푸시 및 풀과 같은 주요 작업을 가능하게 하는 Docker 명령줄 인터페이스(Docker CLI)를 사용합니다. 사용자는 소스 코드의 패키징 및 번들링을 할 수 있는 Docker Engine의 Docker Build 기능을 사용하여 Docker 이미지를 생성합니다. Docker는 JSON(JavaScript Object Notation) 구성 파일을 사용하여 구성할 수 있습니다. JSON은 모든 구성을 한 곳에서 유지 관리하기 때문에 선호되는 형식입니다.

Kubernetes

Kubernetes는 컨테이너 오케스트레이션을 위한 오픈 소스 플랫폼입니다. Kubernetes는 관리, 배포 및 확장과 같은 수많은 소프트웨어 프로세스를 자동화하는 데 사용됩니다. Kubernetes Service에서는 하나 이상의 컴퓨터(가상 머신 또는 Bare Metal Server)가 다양한 크기와 유형의 컨테이너 워크로드를 실행할 수 있는 클러스터에 연결됩니다. Kubernetes 애플리케이션 프로그래밍 인터페이스(API) 서버는 파드, 서비스, 리플리케이션 컨트롤러 등과 같은 API 오브젝트에 대한 데이터를 구성합니다. API를 사용하면 서로 다른 소프트웨어 앱이 서로 완벽하게 협력하여 데이터를 상호 통신하고 공유할 수 있습니다.

Docker와 Kubernetes는 비슷한 서비스를 제공하지만, 각자의 규모 면에서 차이가 있습니다. Docker는 컨테이너 런타임이지만 Kubernetes는 여러 컨테이너 런타임의 컨테이너를 수용하는 전체 플랫폼입니다. Docker는 Kubernetes가 지원하는 컨테이너 런타임 중 하나에 불과합니다.

컨테이너 이미지의 이점

컨테이너 이미지는 컨테이너 레지스트리 사용의 핵심 구성 요소입니다.

빠른 배포

컨테이너 이미지는 컨테이너를 실행하는 데 필요한 모든 것을 포함하도록 설계되었습니다. 컨테이너 이미지가 생성되면 컨테이너를 실행하는 데 필요한 것은 컴퓨터 시스템에서 적절한 프롬프트를 표시하는 것뿐입니다. 따라서 컨테이너 이미지는 빠른 구현에 완벽하게 적합합니다.

지속적인 준비 상태 유지

비즈니스 우선순위는 하룻밤 사이에 바뀌는 경우가 많습니다. 조직은 컨테이너 이미지를 미리 생성함으로써 모든 잠재적 컨테이너 요구 사항을 예측한 다음 나중에 해당 시간과 목적에 가장 적합한 컨테이너를 선택할 수 있습니다. 컨테이너 이미지는 조직이 상황에 따라 전환할 수 있는 기능을 제공합니다.

안전한 사용

컨테이너 이미지 보안은 Container Registry에서 시행하는 액세스 제어를 통해 유지됩니다. 여기에는 권한이 없는 가상 사용자가 컨테이너 이미지에 액세스하지 못하도록 하는 인증 프로토콜이 포함됩니다. 이미지 암호화는 현재 이미지를 인코딩하고 취약점으로부터 보호하기 위해 일상적으로 사용되고 있습니다.

컨테이너 이미지 사용 사례

다음 활동은 컨테이너 이미지를 광범위하게 활용합니다.

클라우드 네이티브 앱

컨테이너 이미지를 사용하여 강화된 컨테이너 기반 배포는 클라우드 네이티브 아키텍처를 지원하고 필요한 격리와 유연성을 제공합니다. 컨테이너 및 컨테이너 이미지를 통해 사용자는 확장 가능한 클라우드 네이티브 앱을 구축하고 최적화할 수 있습니다.

마이크로서비스

많은 Container Registry(및 그 안의 컨테이너 이미지)는 컨테이너 클러스터 내에서 특정 마이크로서비스를 찾고 연결하는 프로세스를 명확히 함으로써 마이크로서비스 사용자를 지원합니다.

가상 시스템

가상 머신(VM)은 한 컴퓨터의 소프트웨어를 사용하여 다른 컴퓨터의 기능을 모방하는 컴퓨터 시스템입니다. VIM은 컨테이너 이미지와 고유한 관계를 가지고 있습니다. 사용자는 특히 컨테이너를 클라우드에서 실행해야 하는 경우 하드웨어에서 직접 컨테이너를 실행하는 대신 VM을 컨테이너의 호스트 운영 체제로 대체하는 경우가 많습니다.

선도적인 컨테이너 이미지 공급업체

컨테이너 이미지 공급업체 시장은 유동적이고 역동적인 시장으로, 수많은 업계 플레이어가 시장에 진입하고 퇴출하는 등 많은 활동이 이루어지고 있습니다. 그러나 다음 공급업체들은 이 시장에서 지속적인 명성을 쌓아왔습니다.

  • Amazon: Amazon Web Services(AWS)는 컨테이너 이미지의 취약성 스캐닝을 관리하는 Amazon Inspector를 사용하여 Amazon Elastic Container Registry(ECR)를 운영합니다. 또한 ECR은 교차 계정 및 교차 리전 복제를 지원하므로 이미지에 더 쉽게 액세스할 수 있습니다.
  • Apache: Apache는 Apache Software Foundation에서 무료로 사용할 수 있는 오픈 소스 웹 서버 소프트웨어로, Apache 소프트웨어는 모든 웹 서버의 약 30%에서 실행되는 것으로 추정됩니다.
  • GitHub: 마이크로소프트가 소유한 GitHub 플랫폼은 개발자들 사이에서 폭넓은 지지를 받고 있으며, 이 독점 소프트웨어가 코드 공유, 코드 관리 및 협업을 가능하게 하는 방식을 높이 평가받고 있습니다.
  • IBM: IBM Cloud Container Registry는 사용자가 손쉽게 자체 레지스트리를 시작하고 비공개 이미지를 레지스트리에 푸시하여 IBM Cloud Kubernetes Service와 함께 사용할 수 있도록 합니다. 사용자는 완전 관리형 자체 레지스트리를 보유하여 개인정보 보호 혜택을 누릴 수 있습니다. 비용 부담 없이 테스트해 볼 수 있는 이 서비스는 종량제 요금제를 채택하고 있어 사용자는 사용한 만큼만 비용을 지불하면 됩니다.
  • Microsoft: Microsoft의 Azure 플랫폼은 Docker 이미지와 Open Container Initiative(OCI) 이미지를 저장하며 OCI 아티팩트를 지원하는 Azure Container Registry(ACR)를 사용합니다. ACR의 연결된 레지스트리 기능(프리미엄 서비스 등급의 일부)은 온프레미스 또는 원격 복제본을 생성하여 컨테이너 이미지와 OCI 아티팩트를 클라우드 기반 ACR과 동기화하며, Windows 및 Linux 이미지를 모두 지원할 수 있습니다. 컴퓨터 프로그램과 상호 작용하는 방법에는 명령줄이라고도 하는 텍스트 줄을 작성하고 입력하는 작업이 포함됩니다. 이 상호 작용 방법을 사용하는 운영 체제에는 명령줄 인터페이스(CLI)가 통합되어 있습니다. 대부분의 컴퓨터 사용자는 현재 그래픽 사용자 인터페이스(GUI)에 의존하고 있지만, 자동화 노력의 일환으로 스크립트를 작성하는 사람들은 여전히 CLI를 선호합니다. Azure는 사용자에게 Docker CLI를 사용하여 주요 컨테이너 이미지 작업을 실행할 수 있는 유연성을 제공합니다.
  • Python: Python은 Python 소프트웨어 재단에서 제공하는 인터프리터 방식의 객체 지향 고급 프로그래밍 언어입니다. Python의 내장 데이터 구조는 빠른 애플리케이션 개발이 필요한 작업에 적합합니다. Python이 소프트웨어 개발자에게 주는 주요 이점은 컴파일 단계가 없기 때문에 사용하기 쉽다는 점입니다. 이를 통해 프로그래머는 디버깅 주기를 가속화하여 시간을 절약할 수 있습니다.
  • Red Hat: Red Hat은 1993년 회사 설립 이래 Linux 기반프로그래밍을 옹호해 왔습니다. Red Hat이 제공하는 Container Registry인 OpenShift Container Platform(OCP)은 사용자가 필요에 따라 이미지 저장소에 자동으로 접근할 수 있도록 하며, 애플리케이션 빌드 결과 이미지를 푸시할 표준 위치도 제공합니다.
관련 솔루션
IBM Red Hat OpenShift

Red Hat OpenShift on IBM Cloud는 풀 매니지드 OpenShift 컨테이너 플랫폼(OCP)입니다.

Red Hat OpenShift 살펴보기
컨테이너 솔루션

컨테이너 솔루션은 보안, 오픈 소스 혁신, 신속한 배포를 통해 컨테이너화된 워크로드를 실행하고 확장합니다.

컨테이너 살펴보기
클라우드 컨설팅 서비스 

IBM Cloud 컨설팅 서비스를 통해 새로운 역량을 개발하고 비즈니스 민첩성을 향상하세요. 하이브리드 클라우드 전략 및 전문가 파트너십을 통해 솔루션을 공동으로 개발하고, 디지털 혁신을 가속화하고, 성능을 최적화하는 방법을 알아보세요.

클라우드 서비스
다음 단계 안내

IBM의 컨테이너 솔루션으로 인프라를 현대화하세요. IBM의 포괄적인 컨테이너 플랫폼을 사용하여 유연성, 보안 및 효율성을 갖춘 환경 전반에서 컨테이너화된 워크로드를 실행, 확장 및 관리할 수 있습니다.

컨테이너 솔루션 살펴보기 무료 IBM Cloud 계정 만들기