Docker란 무엇인가요?

완료됨

Docker 컨테이너 둘러보기를 시작하기 전에 팀에서 애플리케이션을 개발하고 배포하는 방법을 살펴보겠습니다. 또한 팀이 직면하는 몇 가지 문제에 대해 간략하게 논의합니다.

일반적으로 회사에서 애플리케이션을 개발하고 관리하는 프로세스에는 팀이 하나 이상 포함됩니다. 소프트웨어를 만드는 개발 팀과 이 애플리케이션의 배포를 담당하는 운영 팀이 있습니다. 운영 팀은 애플리케이션 호스팅 인프라의 관리도 담당합니다.

예를 들어 회사의 다양한 아울렛에서 사용하는 주문 추적 포털을 개발하고 있다고 가정합니다. 앱 개발 및 게시 프로세스 중에 여러 가지 환경에서 애플리케이션을 호스트합니다. 먼저 개발 팀은 개발 환경에서 소프트웨어를 개발하고 테스트합니다. 여기에서 소프트웨어는 QA(품질 보증) 환경에 배포된 후 사전 프로덕션 및 최종 프로덕션 환경에 배포됩니다.

앞의 시나리오에서 고려해야 할 몇 가지 과제가 있습니다.

  • 호스팅 환경 관리

    종류와 관계없이 모든 환경에는 소프트웨어 및 하드웨어 관리가 둘 다 필요합니다. 각 환경에 설치된 소프트웨어 및 구성된 하드웨어가 모두 동일한지 확인해야 합니다. 또한 일관되고 쉽게 재현할 수 있는 방식으로 환경별로 네트워크 액세스, 데이터 스토리지 및 보안과 같은 측면을 구성해야 합니다.

  • 소프트웨어 제공의 연속성

    환경에 애플리케이션을 배포하는 작업은 일관되게 수행해야 합니다. 각 배포 패키지에는 모든 시스템 패키지, 이진 파일, 라이브러리, 구성 파일 및 모든 기능을 갖춘 애플리케이션을 보장하는 기타 항목이 포함되어야 합니다. 또한 이 종속성이 모두 소프트웨어 버전 및 아키텍처와 일치하는지 확인해야 합니다.

  • 효율적인 하드웨어 사용

    배포된 각 애플리케이션은 동일한 하드웨어에서 실행되는 다른 애플리케이션과 격리된 방식으로 실행해야 합니다. 서버당 애플리케이션을 두 개 이상 실행하여 서로 성능을 저하하지 않고 리소스를 최대한 활용하려고 합니다.

  • 애플리케이션 이동성

    애플리케이션 이동성이 필수적인 이유는 다양합니다. 호스팅 환경에서 오류가 발생하거나 애플리케이션 규모를 확장해야 합니다. 두 경우에 모두 잠재적인 결과는 새 환경에 소프트웨어를 다시 배포하는 것입니다. 기본 인프라가 서로 다른 경우에도 한 호스트에서 다른 호스트로 소프트웨어를 이동하려고 합니다. 이 이동은 고객의 가동 중지 시간을 줄이기 위해 최대한 빨리 이루어져야 합니다.

이 과제를 해결하는 데 도움이 되는 Docker 기능을 살펴보기 전에 몇 가지 개념을 설명하고 Docker 아키텍처의 간략한 개요를 살펴보겠습니다.

컨테이너란?

컨테이너는 소프트웨어 패키지를 빌드하고 실행할 수 있는 격리된 환경입니다. 이 소프트웨어 패키지에는 모든 컴퓨팅 환경에서 빠르고 안정적으로 애플리케이션을 실행하기 위한 코드 및 모든 종속성이 포함됩니다. 이 패키지를 컨테이너 이미지라고 합니다.

컨테이너 이미지는 애플리케이션을 배포하는 데 사용하는 단위가 됩니다.

소프트웨어 컨테이너화란 무엇인가요?

소프트웨어 컨테이너화는 VM(가상 머신)을 사용하지 않고 컨테이너를 배포 및 실행하는 데 사용되는 OS 가상화 방법입니다. 컨테이너는 물리적 하드웨어, 클라우드, VM 및 여러 운영 체제에서 실행될 수 있습니다.

Docker란 무엇인가요?

Docker는 컨테이너를 개발, 제공 및 실행하는 데 사용되는 컨테이너화 플랫폼입니다. Docker는 하이퍼바이저를 사용하지 않으며, 애플리케이션을 개발하고 테스트하는 경우 데스크톱 또는 노트북에서 Docker를 실행할 수 있습니다. Docker의 데스크톱 버전은 Linux, Windows 및 macOS를 지원합니다. 프로덕션 시스템의 경우 Linux 및 Microsoft Windows Server 2016 이상의 여러 변형을 포함한 서버 환경에 Docker를 사용할 수 있습니다. Azure를 포함한 많은 클라우드가 Docker를 지원합니다.

Docker 아키텍처

Docker 플랫폼은 컨테이너화된 애플리케이션을 빌드, 실행 및 관리하는 데 사용하는 여러 구성 요소로 구성됩니다.

Docker 엔진

Docker 엔진은 클라이언트와 서버가 동일한 호스트에서 동시에 실행되는 클라이언트-서버 구현으로 구성된 여러 구성 요소로 구성됩니다. 클라이언트는 REST API를 사용하여 서버와 통신하며, REST API를 통해 클라이언트가 원격 서버 인스턴스와 통신할 수도 있습니다.

Diagram showing a high-level overview of the Docker architecture.

일부 화살표는 Docker 서버, 실행 중인 컨테이너 및 저장된 컨테이너 이미지 간의 통신을 보여 줍니다. 이 화살표는 Docker 서버에서 저장된 컨테이너 이미지를 로드하고 실행 중인 컨테이너를 관리하는 방법을 보여 줍니다.

Docker 클라이언트

Docker 클라이언트에는 두 가지 대안이 있습니다. 즉, docker라는 명령줄 애플리케이션 또는 Docker Desktop이라는 GUI(그래픽 사용자 인터페이스) 기반 애플리케이션이 있습니다. CLI와 Docker Desktop은 모두 Docker 서버와 상호 작용합니다. CLI 또는 Docker Desktop의 docker 명령은 Docker REST API를 사용하여 로컬 또는 원격 서버에 명령을 보내고 컨테이너를 관리하는 데 사용하는 기본 인터페이스로 작동합니다.

Docker 서버

Docker 서버는 dockerd라는 디먼입니다. dockerd 디먼은 Docker REST API를 통해 클라이언트의 요청에 응답하며 다른 디먼과 상호 작용할 수 있습니다. Docker 서버는 컨테이너의 수명 주기를 추적하는 작업도 담당합니다.

Docker 개체

컨테이너 배포를 지원하려면 여러 가지 개체를 만들고 구성해야 합니다. 여기에는 네트워크, 스토리지 볼륨, 플러그 인 및 기타 서비스 개체가 포함됩니다. 여기에서 이 개체를 모두 다루지는 않지만, 이 개체가 필요에 따라 만들고 배포할 수 있는 항목임을 기억하는 것이 좋습니다.

Docker Hub

Docker Hub는 SaaS(Software as a Service) Docker 컨테이너 레지스트리입니다. Docker 레지스트리는 생성되는 컨테이너 이미지를 저장하고 배포하는 데 사용하는 리포지토리입니다. Docker Hub는 Docker가 이미지 관리에 사용하는 기본 퍼블릭 레지스트리입니다.

프라이빗 Docker 레지스트리를 만들고 사용하거나, 사용 가능한 여러 클라우드 공급자 옵션 중 하나를 사용할 수 있습니다. 예를 들어 Azure Container Registry를 사용하여 여러 Azure 컨테이너 지원 서비스에서 사용할 컨테이너 이미지를 저장할 수 있습니다.