[기술면접] Docker

huni_·2022년 7월 1일
post-thumbnail

Docker란?

Docker는 오픈 소스 컨테이너화 플랫폼입니다. 이를 통해 개발자는 애플리케이션을 컨테이너로 패키징할 수 있습니다. 컨테이너란 애플리케이션 소스 코드를 임의의 환경에서 해당 코드의 실행에 필요한 운영체제(OS) 라이브러리 및 종속 항목과 결합하는 실행 가능한 표준 컴포넌트를 말합니다. 컨테이너는 분산형 애플리케이션의 딜리버리를 간소화하며, 이는 기업들이 클라우드 네이티브 개발 및 하이브리드 멀티클라우드 환경으로 이전하면서 점점 더 유명세를 타고 있습니다.

개발자는 Docker를 사용하지 않고도 컨테이너를 구축할 수 있지만, Docker 플랫폼을 이용하면 보다 손쉽고 보다 간편하며 보다 안전하게 컨테이너를 빌드, 배치 및 관리할 수 있습니다. Docker는 기본적으로 개발자가 단일 API를 통한 업무 절감 자동화와 간단한 명령을 사용하여 컨테이너를 빌드, 배치, 실행, 업데이트 및 중지할 수 있도록 해주는 툴킷입니다.

Docker를 상용 Docker 버전을 판매하는 회사인 Docker, Inc.(IBM 외부 링크)라고도 합니다. 또한 Docker, Inc. 및 여러 다른 기업과 개인들이 함께 참여하는 Docker 오픈 소스 프로젝트(IBM 외부 링크)라고도 합니다.

컨테이너의 작동 방식 및 유명세를 타는 이유

컨테이너는 Linux 커널에 빌드된 가상화 기능과 프로세스 격리를 통해 가능하게 되었습니다. 여러 기능, 즉 프로세스 간의 리소스 할당을 위한 제어 그룹(Cgroups) 및 시스템의 기타 리소스나 영역에 대한 가시성이나 프로세스 액세스를 제한하기 위한 네임스페이스 등의 기능을 사용하면 다수의 애플리케이션 컴포넌트가 호스트 운영체제의 단일 인스턴스의 리소스를 공유할 수 있습니다. 이는 마치 하이퍼바이저를 통해 다수의 가상 머신(VM)이 단일 하드웨어 서버의 CPU, 메모리 및 기타 리소스를 공유하는 것과 거의 유사한 방식입니다.

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

  • 경량의 무게: VM과는 달리, 컨테이너는 전체 OS 인스턴스와 하이퍼바이저의 페이로드를 전달하지 않습니다. 이는 오직 코드 실행에 필요한 OS 프로세스와 종속 항목만 포함합니다. 컨테이너 크기는 메가바이트(MB) 단위로 측정됩니다(반면, 일부 VM의 경우는 GB 단위임). 이는 하드웨어 용량을 보다 잘 활용하며, 구동 시간이 보다 신속합니다.
  • 리소스 효율성 향상: 컨테이너를 사용하는 경우, VM을 사용할 수 있는 동일 하드웨어에서 애플리케이션의 다수의 사본을 여러 번 실행할 수 있습니다. 이를 통해 클라우드 비용이 절감됩니다.
  • 개발자 생산성 향상: VM과 비교하여, 컨테이너는 보다 빠르며 보다 간편한 배치, 프로비저닝 및 재시작이 가능합니다. 따라서 이는 지속적 통합 및 지속적 딜리버리(CI/CD) 파이프라인에서 사용하기에 이상적이며, 애자일 및 DevOps 사례를 채택하는 개발 팀에게 매우 적합합니다

Docker를 사용하는 이유

오늘날 Docker가 너무나도 유명하므로, "Docker"와 "컨테이너"는 상호교환적으로 사용됩니다. 하지만 최초의 컨테이너 관련 기술은 2013년에 Docker가 일반에게 공개되기 전 몇 년 동안, 심지어 수십 년 동안(IBM 외부 링크) 사용할 수 있었습니다.

무엇보다도, 2008년에 LinuXContainers(LXC)는 Linux의 단일 인스턴스에 대한 가상화가 완벽히 가능한 Linux 커널에서 구현되었습니다. LXC가 오늘날 여전히 사용되고 있지만, Linux 커널을 사용하는 보다 새로운 기술을 사용할 수 있습니다. 최신의 오픈 소스 Linux 운영 시스템인 Ubuntu 역시 이러한 기능을 제공합니다.

Docker는 다음을 가능케 하는 기술을 사용하여 기본 Linux 컨테이너화 기능을 향상시켰습니다.

  • 개선되고 완벽한 이식성: LXC 컨테이너가 종종 시스템 특정 구성을 참조하는 반면, Docker 컨테이너는 데스크탑, 데이터 센터 및 클라우드 환경에서 수정 없이 실행됩니다.
  • 보다 경량의 중량과 보다 미세한 업데이트: LXC를 사용하면 다수의 프로세스를 단일 컨테이너 내에서 결합할 수 있습니다. Docker 컨테이너를 사용하면, 각 컨테이너에서 오직 하나의 프로세스만 실행할 수 있습니다. 이를 통해 업데이트나 수리를 위해 해당 파트 중 하나를 중지하는 동안에도 계속 실행될 수 있는 애플리케이션을 빌드할 수 있습니다.
  • 자동화된 컨테이너 작성: Docker는 애플리케이션 소스 코드를 기반으로 컨테이너를 자동으로 빌드할 수 있습니다.
  • 컨테이너 버전화: Docker는 컨테이너 이미지의 버전을 추적하고, 이전 버전으로 롤백하며, 버전을 빌드한 사용자와 빌드 방법을 추적할 수 있습니다. 심지어 이는 기존 버전과 새 버전 사이의 델타만 업로드할 수도 있습니다.
  • 컨테이너 재사용: 특히 새 컨테이너를 빌드하기 위한 템플릿처럼, 기존 컨테이너는 기본 이미지로 사용될 수 있습니다.
  • 공유 컨테이너 라이브러리: 개발자는 수천 개의 사용자가 기여한 컨테이너를 포함하는 오픈 소스 레지스트리에 액세스할 수 있습니다.

오늘날 Docker 컨테이너화는 Microsoft Windows 서버에서도 작동합니다. 그리고 대부분의 클라우드 제공자는 개발자가 Docker를 통해 컨테이너화된 애플리케이션을 빌드, 장착 및 실행할 수 있도록 지원하는 특정 서비스를 제공합니다.

이러한 이유로 인해, Docker 채택은 빠르게 확산되고 지속적으로 증가하고 있습니다. 이 글에서, Docker Inc.는 매월 1,100만명의 개발자와 130억개의 컨테이너 이미지 다운로드(IBM 외부 링크)를 보고합니다.

profile
FrontEnd Developer

0개의 댓글