Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

이열매의 메모장

Docker Overview 본문

Docker

Docker Overview

이열매 2019. 12. 12. 00:31

도커 개요


 도커는 어플리케이션 개발, 전송, 실행을 위한 플랫폼입니다. 도커를 이용하면 어플리케이션을 인프라와 분리하여 빠르게 소프트웨어를 배포할 수 있습니다. 또한, 어플리케이션 관리와 동일한 방식으로 인프라 관리 또한 가능합니다. 도커를 활용하면 개발과 제품 배포 간 지연 시간을 단축할 수 있습니다.

 

도커 플랫폼이란

 도커는 독립적인 환경에서 어플리케이션을 패키지하고 실행하는 컨테이너를 제공합니다. 이러한 독립성과 보안성 덕분에 사용자는 한 호스트 내에서 다수의 컨테이너를 동시에 실행할 수 있습니다. 컨테이너는 VM 사용 방식과 달리 호스트 머신의 커널을 직접적으로 실행하여 추가적인 하이퍼바이저를 적재할 필요가 없기 때문에 가볍습니다. 이는 사용자가 가상 머신을 사용하는 것보다 같은 하드웨어에서 더 많은 컨테이너를 실행시킬 수 있음을 의미합니다. 심지어 가상머신을 호스트 머신 삼아 도커 컨테이너를 실행하는 것도 가능합니다.

 

도커는 컨테이너의 생명주기를 관리하기 위해 다음과 같은 기능을 제공합니다:

  • 컨테이너를 이용하여 어플리케이션과 해당 앱에 대한 컴포넌트 또한 개발이 가능합니다.
  • 어플리케이션 배포와 테스트를 컨테이너 단위로 관리할 수 있습니다.
  • 언제든지 어플리케이션을 컨테이너나 통합 서비스 형태로 운영 환경에 배포할 수 있습니다. 이는 운영 환경이 로컬 데이터 센터이든, 클라우드 제공자이든 상관 없습니다.

 

 

도커 엔진

도커 엔진은 클라이언트/서버 응용 프로그램으로 다음과 같은 주 구성 요소를 갖습니다:

  • 도커 데몬 프로세스 - 장기 실행 서버 ( dockerd  명령어)
  • REST API - 프로그램이 데몬과 통신 및작업 수행시
  • CLI 클라이언트 (docker 명령어)

 

 CLI는 도커의 REST API를 사용하여 도커의 데몬을 제어하거나 통신합니다. 거의 대부분의 도커 프로그램들이 기본 API와 CLI를 사용합니다.

데몬은 이미지, 컨테이너, 네트워크와 볼륨과 같은 도커의 객체를 생성하고 관리합니다.

자세한 사항은 하단의 도커 아키텍처를 참조하세요.

 

 

도커를 사용해 무엇을 할 수 있을까?

빠르고 지속적인 어플리케이션 배포

 로컬 컨테이너 사용 시 개발자의 작업 환경(어플리케이션과 서비스 제공 환경)이 표준화되므로, 개발 주기가 간소화됩니다. 컨테이너는 CI/CD 워크플로우(지속적인 통합 및 배포)에 적합합니다.

 

다음과 같은 상황에 대해 생각해 봅시다:

  • 컨테이너를 사용하면 로컬 환경에서 개발자가 코드를 작성하고 동료와 작업 공유가 가능합니다.
  • 도커를 사용하면 어플리케이션을 테스트 환경으로 push하고 자동으로 테스트 되도록 합니다.
  • 버그 발견 시, 개발 환경에서 버그를 수정하고 테스트 및 검증을 위해 테스트 환경에 재배포 할 수 있습니다.
  • 테스트가 완료되면 업데이트 된 이미지를 운영 환경으로 push하여 간단히 고객들에게 버그 수정을 적용할 수 있습니다.

반응형 배포 및 확장

컨테이너 기반 도커 플랫폼은 휴대성이 뛰어난 워크로드를 지원합니다. 도커 컨테이너는 개발자의 개인 노트북, 데이터 센터의 PM이나 VM, 클라우드 제공자 혹은 통합 환경 모두에서 실행될 수 있습니다.

도커의 휴대성과 가벼운 특성은 동적으로 워크로드를 관리하기 쉽고, 업무 요구 사항에 따라 실시간으로 어플리케이션과 서비스의 확장 및 분리가 가능하게 합니다.

동일한 하드웨어에서 더 많은 워크로드 실행 가능

도커는 가볍고 빠릅니다. 도커는 하이퍼바이저 베이스인 가상 머신보다 가용성이 높고 효율적이기 때문에, 사용자가 더 많은 컴퓨팅 용량을 활용할 수 있도록 합니다. 즉, 도커는 적은 리소스로 더 많은 작업을 수행해야 하는 중소 규모 배포에 적합합니다.

 

도커 아키텍처

Docker는 클라이언트-서버 아키텍처를 사용합니다. Docker 클라이언트는 Docker 데몬과 통신합니다. Docker 데몬은 Docker 컨테이너를 빌드, 실행 및 배포하는 작업을 수행합니다. Docker 클라이언트와 데몬은 동일한 시스템에서 실행되거나 원격 Docker 데몬에 Docker 클라이언트를 연결할 수 있습니다. Docker 클라이언트와 데몬은 UNIX 소켓 또는 네트워크 인터페이스를 통해 REST API로 통신합니다.

Docker 데몬

Docker 데몬 (dockerd) 은 Docker API 요청을 수신하고 이미지, 컨테이너, 네트워크 및 볼륨과 같은 Docker 객체를 관리합니다. 데몬은 다른 데몬과 통신하여 Docker 서비스를 관리합니다.

Docker 클라이언트

Docker 클라이언트 (docker) 는 일반적으로 사용자가 Docker와 상호 작용하는 기본 방법입니다.  docker run 같은 명령을 사용하면 클라이언트는 이 명령을 dockerd에 보내어 수행하게 합니다. docker 명령은 Docker API를 사용합니다. Docker 클라이언트는 다수의 데몬과 통신할 수 있습니다.

도커 레지스트리

Docker 레지스트리는 Docker 이미지를 저장합니다. Docker Hub는 누구나 사용할 수있는 공개 레지스트리이며 Docker는 기본적으로 Docker Hub에서 이미지를 찾습니다. 물론 자신의 개인(비공개) 레지스트리만을 찾도록 할 수 있습니다. 만약 Docker Datacenter (DDC)를 사용하는 경우, Docker Trusted Registry (DTR)가 포함됩니다.

docker pull 또는 docker run 명령을 사용할 경우, 사용자가 설정한 레지스트리에서 필요한 이미지를 가져옵니다. docker push 명령을 사용할 경우에는 설정된 레지스트리로 푸시됩니다.

 

 

도커 객체

Docker를 사용하면 이미지, 컨테이너, 네트워크, 볼륨, 플러그인 및 기타 객체를 생성하여 사용하게 됩니다. 다음은 이러한 객체에 대해 간략히 설명하겠습니다.

이미지

이미지는 도커 컨테이너 생성 명령어로 이루어진 읽기 전용 템플릿입니다. 다른 이미지를 기반으로 설정을 추가하여 생성하는 것 또한 가능합니다. 예를 들어 ubuntu 이미지를 기반으로 하지만, Apache 웹 서버와 어플리케이션을 설치하도록 이미지를 빌드할 수 있습니다.

사용자는 자신만의 이미지를 만들거나 다른 사람이 만들어서 레지스트리에 게시한 이미지를 사용할 수 있습니다. 자신만의 이미지를 만들고 싶다면, 이미지 실행 시 필요한 단계를 정의하는 Dockerfile 을 작성해야 합니다. Dockerfile 내 각각의 명령어는 이미지에 레이어를 만듭니다. Dockerfile을 변경하고 다시 빌드할 경우 해당 레이어만 다시 작성됩니다. 이것이 바로 이미지를 가볍고 빠르게 만들 수 있는 이유입니다.

컨테이너

컨테이너는 실행 가능한 이미지의 인스턴스입니다. Docker API 또는 CLI를 사용하면 컨테이너를 작성, 시작, 중지, 이동 또는 삭제할 수 있습니다. 사용자는 컨테이너를 다른 네트워크의 스토리지에 연결할 수 있고, 현재 변경된 컨테이너 상태를 새로운 이미지로 생성할 수도 있습니다.

기본적으로 컨테이너는 다른 컨테이너 및 해당 호스트 머신과 격리되어 있습니다. 사용자는 컨테이너의 네트워크, 스토리지 또는 기타 기본 하위 시스템이 다른 컨테이너 또는 호스트 시스템과 분리되는 방식을 제어할 수 있습니다.

컨테이너는 생성한 이미지로부터 정의됩니다. 만약 컨테이너가 제거될 경우, 해당 컨테이너 내부에서 변경한 상태는 영구적으로 저장되지 않고 사라집니다.

 

 

 

 

 

 

 

 


* 도커 공식 문서 한글 번역 (영문 공식 문서는 이쪽으로)

 

'Docker' 카테고리의 다른 글

도커 캐시 디렉토리 경로 변경  (0) 2019.10.31
Docker - 3. 자동 빌드  (0) 2019.10.21
Docker - 2. 도커 사용하기  (0) 2019.10.14
쿠버네티스  (0) 2019.10.09
Docker - 1. 도커란  (0) 2019.10.08
Comments