임대일

1.2 도커(Docker) 가상화 기술: 도커(Docker) 본문

도커/개발자를 위한 쉬운 도커

1.2 도커(Docker) 가상화 기술: 도커(Docker)

limdae94 2024. 5. 30. 13:23

 

 

개발자를 위한 쉬운 도커 | 데브위키 - 인프런

데브위키 | 현업 개발자가 도커를 사용한 경험을 녹여낸 새로운 커리큘럼으로 기존 교재 및 강의와 차별된 강의를 제공합니다. 단순한 명령어 사용법이 아닌 도커를 왜 사용해야하는지 대한 근

www.inflearn.com

 

 

1. 도커

도커는 2013년에 최초로 공개된 오픈소스 소프트웨어으로 컨테이너 가상화 기술을 사용하기 위한 도구이다.

도커 아키텍처

 

도커를 사용하면 커널의 컨테이너 가상화 기술을 사용자가 쉽게 활용할 수 있다. 도커와 같은 컨테이너 가상화 도구를 컨테이너 플랫폼이라고 부르는데, 컨테이너 플랫폼은 자체적으로 가지고 있는 컨테이너 엔진컨테이너 런타임으로 구성되어 있으며 의미는 다음과 같다.

 

  1. 컨테이너 엔진: 사용자의 요청을 받고 관리해주는 역할을 수행
  2. 컨테이너 런타임: 직접 커널과 통신하면서, 실제 격리된 공간을 만드는 역할을 수행

 

도커는 RUNC라는 컨테이너 런타임을 사용한다. 컨테이너 런타임은 OCI에서 규정한 컨테이너 런타임 인터페이스를 준수한다. 도커는 기본적으로 containerd라는 런타임을 사용하며, RUNC 도구를 통해 실제로 OCI Runtime Specification을 따르는 컨테이너를 실행한다. RUNC는 OCI 사양을 구현한 런타임 중 하나로, 도커 뿐만 아니라 다른 컨테이너 도구에서도 사용될 수 있다.

 

따라서 CRI 표준을 구현했기 때문에 무조건 RUNC을 사용하지 않아도 된다. 하지만 RUNC는 도커가 지원하는 기본 컨테이너 런타임이다. 컨테이너 플랫폼에는 Podman 혹은 Containerd 같은 다른 소프트웨어들도 존재한다. 컨테이너 가상화를 사용할 때 어느 컨테이너 플랫폼을 사용할 지, 어느 컨테이너 런타임을 사용할 지 자유롭게 선택할 수 있다. 그 중에서 도커는 가장 점유율이 높고, 문서화가 잘 정리되어 있어서 도커가 좋은 선택이라고 말할 수 있다.

 

 

2. 도커 동작 흐름

도커 동작 흐름은 클라이언트 - 서버 모델로 실행된다.
한 마디로 지난 시간에 학습한 웹 통신의 클라이언트와 서버의 관계와 동일하다.

도커 아키텍처 흐름

 

구체적으로, 명령어를 전달하는 클라이언트와 실제 컨테이너를 관리하는 도커 데몬이라는 서버가 존재한다. 클라이언트는 사용자의 명령을 도커 데몬에게 전달한다. 도커 데몬은 컨테이너를 관리하는 기능을 제공해주고, 도커 D 라고도 부른다. 보통 데몬이라고 이름이 붙은 소프트웨어는 서버에서 지속적으로 실행이 되는 소프트웨어를 의미한다. 도커 데몬 또한 호스트 OS에서 지속적으로 실행되면서 클라이언트의 요청에 따라서 컨테이너를 관리한다. 호스트 OS의 커널의 기능을 활용해서 컨테이너를 관리하는 것이다.

 

도커 데몬은 클라이언트가 컨테이너 관리를 할 수 있도록 API를 제공한다. 프로그래밍의 API와 동일한 개념으로, API는 상호 간의 약속을 의미한다. 도커 공식 홈페이지 docs.docker.com 를 통하여 Dokcer 엔진에서 제공하는 API를 살펴볼 수 있다. Docker 엔진 API로 어떠한 요청을 보낼 때 모두 API 양식에 맞게 보내야 한다.

 

컨테이너의 목록을 조회하는 API는 Containers -> List Containers에서 확인하고 API 양식에 맞춰서 요청을 보내면 컨테이너의 리스트를 얻을 수 있다. GET 요청으로 /containers/json 요청을 보내면 컨테이너의 목록을 조회할 수 있다. HTTP 요청을 보내야 하기 때문에 어떠한 메서드로 어디에 보내야 하는지에 대한 정보들이 제공된다.

docker docs 의 List Containers 페이지

 

하지만 API 양식에 맞춰서 요청을 보내거나 요청에 대한 응답도 읽기 어려운 형태로 오기 때문에 사용자가 API를 직접 사용하기에는 번거럽고 작업 하나하나 API를 파악하고 전달하라면 시간이 꽤 오래 걸리게 된다. 그래서 Docker 에서는 Command Line 도구인 CLI가 클라이언트 툴로 제공이 된다. CLI는 Command Line Interface를 의미한다. 클라이언트는 CLI 툴을 활용하여 명령어를 입력하면 해당 명령어를 서버의 API 양식에 맞게 만들어서 대신 전달한다. 따라서 CLI를 통해 사용자는 도커 데몬의 API와 쉽게 통신할 수 있다.

도커 아키텍처 예: 주민센터

 

현실에서도 법무사 같은 전문가와 상담하면서 요구사항을 그냥 말로만 전달하고 실제로 복잡한 문서 작성이나 업무 처리는 전문가가 대신 해주는 경우가 있다. CLI가 수행하는 역할이 바로 이렇게 중간다리 역할을 한다고 생각하면 된다. 그래서 Docker가 제공하는 클라이언트 툴을 사용하면 명령어 한 줄로 API와 통신할 수 있다.

 

도커 아키텍처: 실행 과정

 

예를 들어 CLI에서 컨테이너의 목록을 조회하기 위해선 docker ps라는 명령어 한 줄만 입력하면 된다. 그러면 이 명령어를 입력하고 엔터를 누르시면 Docker CLI는 이 명령을 아까 봤던 JSON 형태로 응답을 만들어서 보내게 된다. 따라서 CLI는 전달받은 응답을 사용자가 보기 편한 테이블 형태로 만들어서 화면에 표시한다.

 

도커 아키텍처: 동작 과정

 

  • 도커는 클라이언트 - 서버 모델로 실행
  • 클라이언트는 CLI, 서버는 도커 데몬으로 구성
  • 사용자는 CLI을 통하여 명령어를 입력하면 컨테이너 관리가 가능

 

명령어를 실행하면 CLI는 API 에 맞게 요청을 만들어서 Docker 데몬으로 전달한다. 그리고 Docker 데몬은 컨테이너 런타임을 통해서 컨테이너를 조작하고 그 결과를 CLI로 다시 전달한다. 오늘은 Docker의 아키텍처에 대해 학습했다. 다음 시간부터는 실습을 통해서 Docker를 직접 사용한다.