topics Docker란? Docker란?
OpenShift 내 Docker를 기반으로 구축 클라우드 업데이트 구독하기
컴퓨터 모니터, 서버, 구름, 점의 픽토그램 콜라주가 포함된 일러스트
Docker란?

Docker는 개발자가 컨테이너를 구축, 배포, 실행, 업데이트 및 관리할 수 있게 해주는 오픈 소스 플랫폼입니다. 컨테이너는 애플리케이션 소스 코드를 운영 체제(OS) 라이브러리 및 모든 환경에서 해당 코드를 실행하는 데 필요한 종속성과 결합하는 표준화된 실행 가능한 구성 요소입니다.

컨테이너는 분산 애플리케이션의 개발 및 제공을 단순화합니다. 조직이 클라우드 네이티브 개발 및 하이브리드 멀티클라우드 환경으로 전환함에 따라 점점 더 인기를 얻고 있습니다. 개발자는 Linux 및 기타 운영 체제에 내장된 기능을 직접 사용하여 Docker 없이 컨테이너를 만들 수 있습니다. 하지만 Docker는 컨테이너화를 더 빠르고, 쉽고, 안전하게 만듭니다. 이 글을 쓰는 시점에 Docker는 1,300만 명 이상의 개발자가 플랫폼을 사용하고 있다고 보고했습니다(ibm.com 외부 링크).

Docker는 Docker의 상용 버전을 판매하는 회사인 Docker, Inc.(ibm.com 외부 링크)를 의미하기도 합니다. 또한 Docker, Inc 및 기타 여러 조직과 개인이 기여하는 Docker 오픈 소스 프로젝트와도 관련이 있습니다.

생성형 AI와 하이브리드 클라우드의 가치

조직이 비즈니스 성과 달성을 위해 하이브리드 클라우드를 활용함으로써 AI의 영향력을 확대하는 방법을 알아보세요.

관련 내용

하이브리드 클라우드 가이드 등록

컨테이너의 작동 방식과 컨테이너가 인기 있는 이유

컨테이너는 Linux 커널에 내장된 프로세스 격리 및 가상화 기능을 통해 작동합니다. 이러한 기능에는 프로세스 간에 리소스를 할당하기 위한 제어 그룹(Cgroup)과 시스템의 다른 리소스 또는 영역에 대한 프로세스의 액세스 또는 가시성을 제한하기 위한 네임스페이스가 포함됩니다.

이를 통해 여러 애플리케이션 구성 요소가 호스트 운영 체제의 단일 인스턴스 리소스를 공유할 수 있습니다. 이러한 공유는 하이퍼바이저를 통해 여러 가상 머신(VM)이 단일 하드웨어 서버의 CPU, 메모리 및 기타 리소스를 공유할 수 있도록 하는 방식과 거의 동일한 방식입니다. 

결과적으로 컨테이너 기술은 애플리케이션 격리, 비용 효율적인 확장성, 폐기 가능성 등 VM의 모든 기능과 이점과 함께 다음과 같은 중요한 추가 이점을 제공합니다.

  • 경량화: VM과 달리 컨테이너는 전체 OS 인스턴스 및 하이퍼바이저의 페이로드를 전달하지 않습니다. 여기에는 코드를 실행하는 데 필요한 OS 프로세스 및 종속성만 포함됩니다. 컨테이너 크기는 메가바이트(일부 VM의 경우 기가바이트)로 측정되며, 하드웨어 용량을 더 잘 활용하고 시작 시간이 더 빠릅니다. 

  • 개발자 생산성 향상: 컨테이너화된 애플리케이션은 한 번 작성하면 어디서나 실행할 수 있습니다. 또한 컨테이너는 VM에 비해 더 빠르고 쉽게 배포, 프로비저닝 및 재시작할 수 있습니다. 이러한 장점 덕분에 지속적 통합 및 지속적 전달(CI/CD) 파이프라인에서 사용하기에 이상적이며 애자일 및 DevOps 방식을 채택하는 개발 팀에 더 적합합니다.

  • 리소스 효율성 향상: 컨테이너를 사용하면 개발자는 동일한 하드웨어에서 VM을 사용할 때보다 몇 배나 많은 애플리케이션 사본을 실행할 수 있습니다. 이러한 효율성을 통해 클라우드 지출을 줄일 수 있습니다.

컨테이너를 사용하는 기업들은 앱 품질 향상, 시장 변화에 대한 빠른 대응 등 다양한 이점을 보고합니다. 이 대화형 도구로 자세히 알아보세요. 

보고서 전문 다운로드: 엔터프라이즈 내 컨테이너
Docker를 사용하는 이유는 무엇인가요?

Docker는 오늘날 매우 인기가 있어 'Docker'와 '컨테이너'가 같은 의미로 사용됩니다. 그러나 최초의 컨테이너 관련 기술은 그 이전부터 수년, 심지어 수십 년 동안 존재했습니다(ibm.com 외부 링크). Docker는 2013년에 대중에게 공개되었습니다. 

특히 2008년에는 Linux 커널에 LinuXContainers(LXC)가 구현되어 Linux의 단일 인스턴스에 대한 가상화가 완전히 가능해졌습니다. LXC는 오늘날에도 여전히 사용되고 있지만 Linux 커널을 사용하는 최신 기술을 사용할 수 있습니다. 최신 오픈 소스 Linux 운영 체제인 Ubuntu도 이 기능을 제공합니다. 

Docker를 사용하면 개발자가 간단한 명령을 사용하여 이러한 네이티브 컨테이너화 기능에 액세스하고 작업 절약형 API(애플리케이션 프로그래밍 인터페이스)를 통해 자동화할 수 있습니다. Docker는 LXC와 비교하여 다음을 제공합니다.

  • 컨테이너 이동성이 향상되고 원활해짐: LXC 컨테이너는 머신별 구성을 참조하는 경우가 많지만, Docker 컨테이너는 데스크톱, 데이터센터, 클라우드 환경 모두에서 수정 없이 실행됩니다. 
  • 더 가벼워진 무게와 더 세분화된 업데이트: LXC를 사용하면 하나의 컨테이너 내에서 여러 프로세스를 결합할 수 있습니다. 이러한 유연성 덕분에 업데이트나 수리를 위해 부품 중 하나가 중단되는 동안에도 계속 실행할 수 있는 애플리케이션을 구축할 수 있습니다. 

     

  • 자동화된 컨테이너 생성: Docker는 애플리케이션 소스 코드를 기반으로 컨테이너를 자동으로 구축할 수 있습니다. 

     

  • 컨테이너 버전 관리: Docker는 컨테이너 이미지의 버전을 추적하고, 이전 버전으로 롤백하고, 누가 어떻게 버전을 빌드했는지 추적할 수 있습니다. 기존 버전과 새 버전 간의 델타만 업로드할 수도 있습니다. 

     

  • 컨테이너 재사용: 기존 컨테이너는 기본적으로 새 컨테이너를 빌드하기 위한 템플릿과 같은 기본 이미지로 사용할 수 있습니다. 

     

  • 공유 컨테이너 라이브러리: 개발자는 수천 개의 사용자 제공 컨테이너가 포함된 오픈 소스 레지스트리에 액세스할 수 있습니다. 

현재 Docker 컨테이너화는 Microsoft Windows 및 Apple MacOS에서도 작동합니다. 개발자는 모든 운영 체제에서 Docker 컨테이너를 실행할 수 있습니다. Amazon Web Services(AWS), Microsoft Azure 및 IBM Cloud를 포함한 대부분의 주요 클라우드 제공업체는 개발자가 Docker로 컨테이너화된 애플리케이션을 구축, 배포 및 실행하는 데 도움이 되는 특정 서비스를 제공합니다.

Docker 도구 및 용어

개발자가 Docker를 사용할 때 접하는 몇 가지 도구, 용어 및 기술은 다음과 같습니다. 

Dockerfile

모든 Docker 컨테이너는 Docker 컨테이너 이미지를 빌드하는 방법에 대한 지침이 포함된 간단한 텍스트 파일로 시작합니다. Dockerfile은 Docker 이미지 생성 프로세스를 자동화합니다. 이는 기본적으로 이미지를 어셈블하기 위해 Docker 엔진이 실행할 명령줄 인터페이스(CLI) 명령의 목록입니다. Docker 명령 목록은 방대하지만 표준화되어 있습니다. Docker 작업은 콘텐츠, 인프라 또는 기타 환경 변수에 관계없이 동일하게 작동합니다. 

Docker 이미지

Docker 이미지에는 실행 가능한 애플리케이션 소스 코드는 물론 애플리케이션 코드를 컨테이너로 실행하는 데 필요한 모든 도구, 라이브러리 및 종속성이 포함되어 있습니다. Docker 이미지를 실행하면 이는 컨테이너의 한 인스턴스(또는 여러 인스턴스)가 됩니다. 

Docker 이미지를 처음부터 빌드할 수 있지만 대부분의 개발자는 공통 리포지토리에서 이미지를 가져옵니다. 단일 기본 이미지에서 여러 Docker 이미지를 만들 수 있으며 각 이미지는 스택의 공통점을 공유합니다. 

Docker 이미지는 레이어로 구성되며 각 레이어는 이미지의 버전에 해당합니다. 개발자가 이미지를 변경할 때마다 새로운 최상위 레이어가 생성되고 이 최상위 레이어가 이전 최상위 레이어를 현재 버전의 이미지로 대체합니다. 이전 레이어는 롤백하기 위해 또는 다른 프로젝트에서 재사용하기 위해 저장됩니다. 

Docker 이미지에서 컨테이너를 만들 때마다 컨테이너 레이어라는 또 다른 새 레이어가 생성됩니다. 파일 추가 또는 삭제와 같은 컨테이너에 대한 변경 사항은 컨테이너 레이어에 저장되며 컨테이너가 실행되는 동안에만 존재합니다.

이 반복적인 이미지 생성 프로세스를 통해 여러 라이브 컨테이너 인스턴스를 단일 기본 이미지에서 실행할 수 있고 그렇게 할 때 공통 스택을 활용하기 때문에 전반적인 효율성을 높일 수 있습니다. 

Docker 컨테이너

Docker 컨테이너는 Docker 이미지의 실행 중인 라이브 인스턴스입니다. Docker 이미지는 읽기 전용 파일이지만 컨테이너는 실행 가능한 라이브 임시 콘텐츠입니다. 사용자는 이들과 상호 작용할 수 있고 관리자는 Docker 명령을 사용하여 설정 및 조건을 조정할 수 있습니다. 

Docker Hub

Docker Hub(ibm.com 외부 링크)는 스스로를 "컨테이너 이미지를 위한 세계 최대의 라이브러리 및 커뮤니티"라고 부르는 Docker 이미지의 공개 리포지토리입니다. 상용 소프트웨어 공급업체, 오픈 소스 프로젝트 및 개별 개발자가 제공한 100,000개 이상의 컨테이너 이미지를 보유하고 있습니다. 여기에는 Docker, Inc.에서 생성한 이미지, Docker Trusted Registry에 속하는 인증된 이미지 및 수천 개의 기타 이미지가 포함됩니다. 

모든 Docker Hub 사용자는 자유롭게 이미지를 공유할 수 있습니다. 또한 Docker 파일 시스템에서 사전 정의된 기본 이미지를 다운로드하여 모든 컨테이너화 프로젝트의 시작점으로 사용할 수 있습니다. 

다른 이미지 리포지토리도 존재하며, 특히 GitHub가 대표적입니다. GitHub는 애플리케이션 개발 도구와 협업 및 커뮤니케이션을 촉진하는 플랫폼으로 잘 알려진 리포지토리 호스팅 서비스입니다. Docker Hub 사용자는 많은 이미지를 저장할 수 있는 리포지토리(repo)를 만들 수 있습니다. 리포지토리는 퍼블릭 또는 프라이빗일 수 있으며 GitHub 또는 BitBucket 계정에 연결할 수 있습니다. 

Docker Desktop

Docker Desktop(ibm.com 외부에 있음)은 Mac 또는 Windows용 애플리케이션으로, Docker Engine, Docker CLI Client, Docker Compose, Kubernetes 등이 포함되어 있습니다. 또한 Docker Hub에 대한 액세스도 포함됩니다. 

Docker 데몬

Docker 데몬은 클라이언트의 명령을 사용하여 Docker 이미지를 만들고 관리하는 서비스입니다. 기본적으로 Docker 데몬은 Docker 구현의 제어 센터 역할을 합니다. Docker 데몬이 실행되는 서버를 Docker 호스트라고 합니다.

Docker 레지스트리

Docker 레지스트리는 Docker 이미지를 위한 확장 가능한 오픈 소스 스토리지 및 배포 시스템입니다. 레지스트리를 사용하면 식별을 위해 태그를 지정하여 리포지토리의 이미지 버전을 추적할 수 있습니다. 이러한 추적 및 식별은 버전 제어 도구인 Git을 사용하여 수행됩니다. 

Docker 배포 및 오케스트레이션

몇 개의 컨테이너만 실행하는 경우, 업계에서 사실상 런타임으로 사용되는 Docker Engine 내에서 애플리케이션을 관리하는 것은 매우 간단합니다. 그러나 수천 개의 컨테이너와 수백 개의 서비스로 구성된 배포의 경우 일부 특수 제작된 도구의 도움 없이 워크플로를 관리하는 것은 거의 불가능합니다.

Docker 플러그인

Docker 플러그인(ibm.com 외부 링크)을 사용하여 Docker의 기능을 더욱 강화할 수 있습니다. Docker Engine 플러그인 시스템에는 여러 Docker 플러그인이 포함되어 있으며 타사 플러그인도 로드할 수 있습니다. 

Docker Compose

개발자는 Docker Compose를 사용하여 모든 컨테이너가 동일한 Docker 호스트에서 실행되는 멀티 컨테이너 애플리케이션을 관리할 수 있습니다. Docker Compose는 애플리케이션에 포함할 서비스를 지정하고 단일 명령으로 컨테이너를 배포하고 실행할 수 있는 YAML(.YML) 파일을 생성합니다. YAML 구문은 언어에 구애받지 않기 때문에 YAML 파일은 Java, Python, Ruby 및 기타 여러 언어로 작성된 프로그램에서 사용할 수 있습니다. 

또한 개발자는 Docker Compose를 사용하여 스토리지에 대한 영구 볼륨을 정의하고, 기본 노드를 지정하고, 서비스 종속성을 문서화 및 구성할 수 있습니다. 

Kubernetes

보다 복잡한 환경에서 컨테이너 라이프사이클을 모니터링하고 관리하려면 컨테이너 오케스트레이션 도구가 필요합니다. Docker에는 자체 오케스트레이션 도구(Docker Swarm이라고 함)가 포함되어 있지만 대부분의 개발자는 대신 Kubernetes를 선택합니다. 

Kubernetes는 Google에서 내부용으로 개발된 프로젝트에서 파생된 오픈 소스 컨테이너 오케스트레이션 플랫폼입니다. Kubernetes는 컨테이너 배포, 업데이트, 서비스 검색, 스토리지 프로비저닝, 로드 밸런싱, 상태 모니터링 등을 포함하여 컨테이너 기반 아키텍처 관리에 필수적인 작업을 예약하고 자동화합니다.

또한 Istio 및 Knative를 포함한 Kubernetes용 도구의 오픈 소스 에코시스템을 통해 조직은 컨테이너화된 애플리케이션을 위한 생산성이 높은 PaaS(Platform-as-a-Service)를 배포할 수 있습니다. 또한 이 에코시스템은 서버리스 컴퓨팅으로 더 빠르게 진입할 수 있도록 지원합니다.

Kubernetes에 대해 자세히 알아보기

관련 솔루션
Red Hat OpenShift on IBM Cloud

Red Hat OpenShift on IBM Cloud가 퍼블릭 및 하이브리드 환경에서 Red Hat OpenShift를 활용하여 속도, 시장 대응성, 확장성 및 안정성을 확보하는 방법을 알아보세요.

Red Hat OpenShift on IBM Cloud 살펴보기
IBM Cloud Satellite 

IBM Cloud Satellite를 활용하여 온프레미스, 엣지, 퍼블릭 클라우드 환경 등 어디서나 일관된 클라우드 서비스를 시작할 수 있습니다.

IBM Cloud Satellite 살펴보기
하이브리드 클라우드 스토리지 솔루션

온프레미스, 프라이빗 및 퍼블릭 클라우드에서 IBM 하이브리드 클라우드 스토리지 솔루션을 사용하여 애플리케이션과 서비스에 가장 적합한 곳에 데이터를 저장합니다.

하이브리드 클라우드 스토리지 솔루션 살펴보기
클라우드 서비스

매니지드 클라우드 서비스 접근 방식이 기존 IT 관리와 DevOps 문화 사이의 잠재적 긴장을 완화하는 데 어떻게 도움이 되는지 알아보세요.

클라우드 서비스 살펴보기
리소스 엔터프라이즈의 컨테이너

컨테이너 및 Kubernetes 도입의 급증하는 모멘텀에 대한 새로운 IBM Research를 읽어보세요.

독립형 컨테이너를 사용하여 Kubernetes 또는 OpenShift에서 모델 제공

독립형 컨테이너 이미지를 빌드하여 IBM Watson NLP 모델을 제공한 후 Kubernetes 또는 Red Hat OpenShift 클러스터에서 실행하세요.

다음 단계 안내

Red Hat OpenShift on IBM Cloud는 개발자가 빠르고 안전하게 엔터프라이즈 워크로드를 컨테이너화하여 Kubernetes 클러스터에 배포할 수 있는 방법을 제공합니다. 보안 관리, 규정 준수 관리, 배포 관리, 지속적인 라이프사이클 관리와 관련된 지루하고 반복적인 작업을 제거하세요. 

Red Hat OpenShift on IBM Cloud 살펴보기 무료로 시작하기