Docker란?

2024년 6월 6일

작성자

Stephanie Susnjara

IBM Think Content Contributor

Ian Smalley

Senior Editorial Strategist

Docker란?

Docker는 개발자가 컨테이너를 빌드, 배포, 실행, 업데이트 및 관리할 수 있는 오픈 소스 플랫폼입니다.

컨테이너는 애플리케이션 소스 코드와 모든 환경에서 해당 코드를 실행하는 데 필요한 운영 체제(OS) 라이브러리 및 종속성을 결합하는 표준화된 실행 가능한 구성 요소입니다.

사람들이 Docker에 대해 이야기할 때 보통 컨테이너를 빌드하고 실행하기 위한 런타임인 Docker Engine을 언급한다는 점에 주목할 필요가 있습니다. Docker는 상용 버전의 Docker를 판매하는 회사인 Docker, Inc.1를 지칭하기도 합니다. 또한 Docker, Inc. 및 기타 여러 조직과 개인이 기여하는 Docker 오픈 소스 프로젝트2와도 관련이 있습니다.

컨테이너는 분산 애플리케이션의 개발 및 제공을 단순화합니다. 조직이 클라우드 네이티브 개발 및 하이브리드 멀티클라우드 환경으로 전환함에 따라 점점 더 인기를 얻고 있습니다. 개발자는 Linux 및 기타 운영 체제에 내장된 기능을 사용하여 Docker 없이도 컨테이너를 만들 수 있지만, Docker를 사용하면 컨테이너화가 더 빠르고 쉬워집니다. 이 글을 쓰는 시점에서 Docker는 2천만 명 이상의 개발자가 매월 이 플랫폼을 사용하고 있다고 보고했습니다.3 Kubernetes를 비롯한 다른 컨테이너화 기술과 마찬가지로 Docker는 현대 소프트웨어 개발, 특히 마이크로서비스 아키텍처에서 중요한 역할을 합니다.

마이크로서비스란?

긴밀하게 연결된 대규모 애플리케이션의 기존 모놀리식 접근 방식과 달리 마이크로서비스는 클라우드 네이티브 아키텍처 프레임워크를 제공합니다. 이 프레임워크는 더 작고 느슨하게 결합되며 독립적으로 배포할 수 있는 여러 개의 작은 구성 요소 또는 서비스에서 단일 애플리케이션을 구성합니다. Docker를 사용하여 각 서비스를 컨테이너화할 수 있으므로 배포가 간소화되고 팀이 필요에 따라 새 버전을 출시하고 애플리케이션을 확장할 수 있습니다.

고속도로 조감도

클라우드에 집중 


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

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

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

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

컨테이너 기술은 애플리케이션 격리 및 비용 효율적인 확장성을 포함하여 가상 머신(VM)의 모든 기능과 이점과 함께 다음과 같은 기타 중요한 이점을 제공합니다.

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

  • 생산성 향상: 컨테이너화된 애플리케이션은 한 번 작성하면 어디서나 실행할 수 있습니다. VM에 비해 컨테이너는 배포, 프로비저닝 및 재시작이 더 빠르고 쉽습니다.

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

컨테이너를 사용하는 조직은 향상된 애플리케이션 품질, 시장 변화에 대한 더 빠른 대응 등 다른 많은 이점을 보고합니다.

AI 아카데미

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

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

Docker를 사용하는 이유와 인기 있는 이유는 무엇인가요?

Docker는 82.84%의 시장 점유율로 가장 널리 사용되는 컨테이너화 툴입니다.4 Docker는 오늘날 매우 인기가 있어 "Docker"와 "컨테이너"는 같은 의미로 사용됩니다. 그러나 최초의 컨테이너 관련 기술은 2013년 Docker가 오픈 소스로 공개되기 수년 전부터, 심지어 수십 년 전부터5 사용이 가능했습니다.

특히 2008년에는 Linux 커널에 LinuXContainers(LXC)가 구현되어 Linux의 단일 인스턴스에 대한 가상화가 완전히 가능해졌습니다. LXC는 오늘날에도 여전히 사용되고 있지만 최신 Linux 커널 기술도 사용할 수 있습니다. 최신 오픈 소스 Linux 운영 체제인 Ubuntu도 이 기능을 제공합니다. Docker를 사용하면 개발자가 간단한 명령을 사용하여 이러한 네이티브 컨테이너화 기능에 액세스하고 작업 절약형 API(애플리케이션 프로그래밍 인터페이스)를 통해 자동화할 수 있습니다.

Docker와 LXC 비교

Docker를 사용하면 호환성이 떨어지는 구형 LXC에 비해 많은 이점이 있습니다.

개선되고 원활한 컨테이너 이동성

LXC 컨테이너는 시스템별 구성을 참조하는 경우가 많지만 Docker 컨테이너는 데스크톱, 데이터 센터 또는 클라우드 컴퓨팅 환경에서 수정 없이 실행됩니다. 

더 가벼운 무게와 더 세분화된 업데이트

Docker를 사용하면 개발자는 단일 컨테이너 내에서 여러 프로세스를 결합할 수 있습니다. 이러한 유연성 덕분에 업데이트나 수리를 위해 부품 중 하나가 중단되는 동안에도 계속 실행할 수 있는 애플리케이션을 구축할 수 있습니다.

자동화된 컨테이너 생성

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

컨테이너 버전 관리

Docker는 컨테이너 이미지의 버전을 추적하고, 이전 버전으로 롤백하고, 누가 어떻게 버전을 구축했는지 추적할 수 있습니다. Docker는 기존 버전과 새 버전 사이의 델타(소프트웨어 모듈의 부분 릴리스)만 업로드할 수도 있습니다.

컨테이너 재사용

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

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

Docker 아키텍처, 용어 및 도구

Docker는 클라이언트/서버 아키텍처를 사용합니다. 다음은 Docker와 관련된 핵심 구성 요소와 기타 Docker 용어 및 도구에 대한 분석입니다.

Docker 호스트: Docker 호스트는 Linux(또는 다른 Docker 엔진 호환 OS)를 실행하는 물리적 또는 가상 머신입니다.

Docker 엔진: Docker 엔진은 Docker 데몬, 데몬과 상호 작용하는 Docker API 및 데몬과 통신하는 명령줄 인터페이스(CLI)로 구성된 클라이언트/서버 애플리케이션입니다.

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

Docker 클라이언트: Docker 클라이언트는 Docker API( REST API)에 액세스하여 Unix 소켓 또는 네트워크 인터페이스를 통해 Docker 데몬과 통신하는 CLI를 제공합니다. 클라이언트는 원격으로 데몬에 연결될 수 있으며, 개발자는 동일한 컴퓨터 시스템에서 데몬과 클라이언트를 실행할 수 있습니다.

Docker 개체: Docker 객체는 애플리케이션을 패키징하고 배포하는 데 도움이 되는 Docker 배포의 구성 요소입니다. 여기에는 이미지, 컨테이너, 네트워크, 볼륨, 플러그인 등이 포함됩니다.

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

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

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

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

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

이러한 반복적인 이미지 생성 프로세스는 단일 기본 이미지에서 여러 라이브 컨테이너 인스턴스를 실행할 수 있으므로 전반적인 효율성이 높아집니다. 이때 공통 스택을 사용합니다.

Docker 빌드: Docker 빌드는 Docker 이미지를 빌드하기 위한 도구와 기능이 포함된 명령입니다.

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

Docker 문서: Docker 문서는 컨테이너화된 애플리케이션을 구축하기 위한 리소스, 설명서 및 가이드의 공식 Docker 라이브러리를 말합니다.

Docker Hub: Docker Hub6는 Docker 이미지의 공개 저장소로, 스스로를 컨테이너 이미지를 위한 세계 최대 라이브러리 및 커뮤니티라고 부릅니다7. 상용 소프트웨어 공급업체, 오픈 소스 프로젝트 및 개별 개발자가 제공한 100,000개 이상의 컨테이너 이미지를 보유하고 있습니다. Docker Hub에는 Docker, Inc.에서 생성한 이미지, Docker Trusted Registry에 속하는 인증된 이미지 및 수천 개의 기타 이미지가 포함되어 있습니다.

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

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

Docker Desktop: Docker Desktop은 Mac 또는 Windows용 애플리케이션으로, Docker Engine, Docker CLI Client, Docker Compose, Kubernetes 등이 포함되어 있습니다. 또한 Docker Hub에 대한 액세스를 제공합니다.

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

Docker 플러그인: 개발자는 플러그인을 사용하여 Docker Engine의 기능을 더욱 강화할 수 있습니다. 권한 부여, 볼륨 및 네트워크를 지원하는 여러 Docker 플러그인이 Docker Engine 플러그인 시스템에 포함되어 있습니다. 타사 플러그인도 로드할 수 있습니다. 

Docker 확장: Docker 확장을 통해 개발자는 Docker Desktop 내에서 타사 툴을 사용하여 기능을 확장할 수 있습니다. 개발자 툴의 확장에는 Kubernetes 앱 개발, 보안, 관측 가능성 등이 포함됩니다. 

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

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

Kubernetes 및 컨테이너 오케스트레이션

몇 개의 컨테이너만 실행하는 경우, 업계에서 사실상 런타임으로 사용되는 Docker Engine 내에서 애플리케이션을 관리하는 것은 매우 간단합니다. 그러나 수천 개의 컨테이너와 수백 개의 서비스로 구성된 배포의 경우 컨테이너 오케스트레이션 툴 없이는 컨테이너 라이프사이클을 모니터링하고 관리하는 것이 거의 불가능합니다. 

Docker에는 자체 오케스트레이션 도구(Docker Swarm이라고 함)가 포함되어 있지만 Kubernetes는 업계 표준입니다. 다른 인기 있는 컨테이너 오케스트레이션 플랫폼으로는 Apache Mesos 및 Nomad가 있습니다.

Kubernetes는 Google에서 내부용으로 개발된 프로젝트인 Borg에서 파생된 오픈 소스 컨테이너 오케스트레이션 플랫폼입니다. 2014년 대중에게 소개된 Kubernetes는 컨테이너 배포, 업데이트, 서비스 검색, 스토리지 프로비저닝, 로드 밸런싱, 상태 모니터링 등을 포함하여 컨테이너 기반 아키텍처 관리에 필수적인 작업을 예약하고 자동화합니다. 2015년 Google은 클라우드 네이티브 컴퓨팅의 벤더 중립적인 오픈 소스 허브인 CNCF(Cloud Native Computing Foundation)9에 Kubernetes를 기부했습니다. 

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

Docker 및 컨테이너 산업 표준

Docker가 컨테이너 이미지 사양과 런타임 코드 runc를 기증한 후 2015년에 설립된 오픈 컨테이너 이니셔티브(OCI)10는 컨테이너 이미지 형식 및 런타임에 대한 개방형 산업 표준을 만드는 데 전념하는 Linux Foundation 프로젝트입니다. OCI는 Docker, IBM, Red Hat 등 선도적인 기업들로 구성되어 있습니다. 혁신을 지원하는 동시에 조직이 특정 공급업체에 종속되지 않도록 도와줍니다.

Docker는 가장 잘 알려져 있고 많이 사용되는 컨테이너 기술이지만, 더 광범위한 에코시스템은 containerd 및 LXC, CRI-O, Podman 등을 포함한 기타 대안으로 표준화되어 있습니다. 2017년 Docker는 containerd 프로젝트를 CNCF에 기증했습니다. containerd는 runc를 사용하는 업계 표준 컨테이너 런타임이며 Docker Engine의 핵심 컨테이너 런타임입니다.

Docker 보안

컨테이너화된 워크로드를 둘러싼 복잡성 때문에 컨테이너와 기본 인프라를 보호하는 보안 제어를 구현하고 유지 관리해야 합니다. Docker 컨테이너 보안 관행은 보안 침해, 멀웨어 및 악의적인 행위자와 같은 위험으로부터 컨테이너화된 애플리케이션을 보호하도록 설계되었습니다. 

Docker 컨테이너는 서로 격리되어 있고 호스트 시스템으로부터 격리되어 있기 때문에 설계상 보안 수준이 내재되어 있습니다. 그러나 이러한 격리가 절대적인 것은 아닙니다. Docker 보안은 컨테이너의 런타임, 빌드 및 오케스트레이션을 포괄하는 전체적인 제로 트러스트 프레임워크를 중심으로 이루어집니다.

Docker 및 기타 컨테이너 관련 보안에 대한 필요성으로 인해 DevSecOps의 인기가 높아졌습니다. 이는 초기 설계부터 통합, 테스트, 제공 및 배포에 이르는 소프트웨어 개발 라이프사이클의 모든 단계에서 보안 관행의 통합을 자동화하는 보안 접근 방식입니다. 또한 Docker 보안 모범 사례에는 프로덕션에 영향을 미치기 전에 보안 문제를 감지할 수 있는 스캔 및 모니터링을 포함한 타사 컨테이너 보안 도구 및 솔루션이 포함되어 있습니다.

Docker 사용 사례

클라우드 마이그레이션

Docker의 이동성은 온프레미스 데이터 센터에서 클라우드 기반 인프라로 또는 한 클라우드 환경에서 다른 클라우드 환경으로 데이터, 애플리케이션 및 워크로드를 이동하는 등 다양한 환경에서 클라우드 마이그레이션 프로세스를 간소화하고 가속화합니다.

마이크로서비스 아키텍처(마이크로서비스)

Statista에 따르면 글로벌 대기업의 85% 이상이 애플리케이션 개발에 마이크로서비스를 사용한다고 합니다11. Docker는 각 마이크로 서비스를 컨테이너화하고 독립적으로 확장 및 관리할 수 있으므로 앱 배포를 간소화하여 개발자가 특정 환경을 구성하고 관리할 필요가 없습니다. 

지속적 통합 및 지속적 제공(CI/CD)

Docker는 애플리케이션 테스트 및 배포를 위한 일관된 환경을 제공하여 배포 중에 발생할 수 있는 오류를 줄이기 때문에 지속적 통합 및 지속적 제공(CI/CD) 파이프라인에 이상적입니다.

DevOps

소프트웨어 개발 접근 방식으로서의 마이크로서비스와 Docker의 조합은 DevOps 팀을 위한 견고한 기반을 만듭니다. 이를 통해 민첩한 업무 방식을 채택하여 빠르게 반복하고 실험할 수 있으며, 이는 시장이 요구하는 속도로 소프트웨어와 서비스를 제공하는 데 매우 중요합니다.

하이브리드 멀티클라우드 배포

Docker와 같은 경량 컨테이너형 기술을 사용하면 다양한 환경 간에 애플리케이션을 쉽게 이동할 수 있습니다. 모든 주요 클라우드 서비스 제공업체는 온프레미스, 퍼블릭 클라우드, 프라이빗 클라우드엣지 설정을 통합하는 하이브리드 클라우드 환경에서 Docker 실행을 지원하는 Docker 관련 개발 및 관리 서비스를 제공합니다. Docker는 멀티클라우드 IT 인프라에 쉽게 배포할 수 있으며, 이는 둘 이상의 클라우드 공급업체의 클라우드 서비스를 의미합니다.

서비스형 컨테이너(CaaS)

서비스형 컨테이너(CaaS)를 사용하면 개발자가 컨테이너화된 애플리케이션을 관리 및 배포할 수 있으므로 Docker 컨테이너를 대규모로 쉽게 실행할 수 있습니다. 모든 주요 CSP는 서비스형 인프라(IaaS), 서비스형 소프트웨어(SaaS) 등과 함께 클라우드 서비스 포트폴리오의 일부로 CaaS를 제공합니다.

인공 지능/머신 러닝(AI/ML)

Docker는 빠르고 간편한 휴대용 애플리케이션 개발을 통해 인공 지능머신 러닝 개발을 가속화하고 혁신과 시장 출시 시간을 가속화합니다. 또한 Docker Hub에는 AL/ML 개발 팀을 추가로 지원하는 수백 개의 AL/ML 이미지가 있습니다. 2023년에 Docker는 개발자가 Dockerfile 또는 Docker Compose 파일을 편집할 때 상황에 맞는 자동화된 지침을 제공하는 Docker AI12를 출시했습니다.

관련 솔루션
IBM Red Hat OpenShift

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

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

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

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

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

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

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

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