메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

한빛랩스 - 지식에 가능성을 머지하다 / 강의 콘텐츠 무료로 수강하시고 피드백을 남겨주세요. ▶︎

IT/모바일

원리부터 이해하는 도커 - 컨테이너, 가상화, 구성요소

한빛미디어

|

2024-06-10

|

by 장철원

7,580

✅ 도커의 정의

 

도커docker라는 용어는 회사를 의미할 수도 있고 소프트웨어를 의미하는 것일 수도 있습니다. 회사로서의 도커는 최초 2008년 솔로몬 하익스Solomon Hykes가 프랑스 파리에서 닷클라우드DotCloud라는 이름으로 설립되었습니다. 그리고 2013년 9월 19일에 PaaSPlatform-as-a-Service의 형태로 출시되었습니다.

 

[그림 2-1] 컨테이너의 개념을 상징하는 도커의 로고

 

소프트웨어로서의 도커는 컨테이너Container라고 부르는 운영체제 수준의 가상화 방식으로 소프트웨어를 배포하는 방식을 사용하는 PaaS 제품을 의미합니다. PaaS는 Platform as a Service의 줄임말로 [그림 2-2]와 같이 애플리케이션, 데이터 단계만 사용자가 관리하는 서비스를 의미합니다. 쉽게 말해, 도커를 사용하면 다양한 개발 환경에서 컨테이너를 이용해 소프트웨어를 편리하게 배포할 수 있습니다. 게다가 도커는 오픈소스이므로 누구나 사용할 수 있는 소프트웨어입니다.

 

[그림 2-2] IaaS, PaaS, SaaS의 구분

 

자신이 개발한 소프트웨어를 배포해본 경험이 있는 개발자라면 동일한 코드라도 다양한 환경에서 배포하는 것이 얼마나 큰 스트레스를 주는지 느껴본 적이 있을 것입니다. 예컨대A, 라는 환경에서는 배포하는 데 문제가 없지만, B라는 환경에서는 시스템 환경이 달라서 배포할 수 없는 경우를 쉽게 찾아볼 수 있습니다. 이럴 때 도커를 사용하면 바로 이런 문제를 해결할 수 있는 것입니다.

 

[그림 2-3] 프로그램 설치가 안 되는 경우

 

이를 그림으로 나타내면 [그림2-3]과 같습니다. 소프트웨어 A와 소프트웨어 B를 서버 1과 서버 2에 설치하는 상황을 가정하겠습니다. 그리고 서버 1에는 소프트웨어 C 버전 5.0이 설치되어 있고 서버 2에는 소프트웨어 C 버전 6.0이 설치되어 있습니다. 소프트웨어 A는 소프트웨어 C 버전 5.0에서 작동하고, 소프트웨어 B는 소프트웨어 C 버전 6.0에서 작동한다고 하면, 소프트웨어 A는 서버 1에서는 작동하지만 서버 2에서는 작동하지 않습니다. 반면 소프트웨어 B는 서버 1에서는 작동하지 않지만 서버 2에서는 작동합니다. 이런 경우 도커를 사용해 소프트웨어 C를 버전에 따라 각각 다르게 격리시키면 하나의 서버에 소프트웨어 A와 B 모두 설치할 수 있습니다.

 

[그림 2-4] 도커를 활용한 애플리케이션 실행

 

[그림 2-4]는 도커를 활용한 애플리케이션 실행을 그림으로 나타낸 것입니다. 운영체제 위에 도커가 설치되고 도커는 컨테이너 단위로 애플리케이션을 실행하게 되는데 컨테이너들은 서로 격리되어 있으므로 독립성을 보장합니다. 각 컨테이너는 애플리케이션을 실행하는 데 필요한 최소한의 바이너리, 라이브러리를 포함합니다. 

 

 

✅ 컨테이너의 개념

 

여러분은 일상에서 컨테이너라는 단어를 들어본 적이 있을 겁니다. 바로 화물선에 화물을 무작위로 적재하는 것이 아니라 ‘컨테이너’라는 상자에 넣어서 쌓게 됩니다.

 

[그림 2-5] 도커와 화물선의 컨테이너

 

그렇다면 소프트웨어 개발에서의 컨테이너Container란 무엇일까요? 컨테이너는 소프트웨어를 배포할 때 필요한 코드, 라이브러리, 환경 설정 파일들을 한데 모아 격리시킨 후 실행가능한 패키지로 만든 것을 의미합니다. 서로 다른 컨테이너는 격리된 환경에서 작동되므로 서로 충돌하지 않는다는 장점이 있습니다. 이러한 컨테이너의 개념은 소프트웨어 시스템을 구축할 때 최소 구성 요소로 분할하여 구축하는 방식인 마이크로서비스 아키텍처Microservice Architectgure의 기반이 됩니다.

 

[그림2-6] 컨테이너의 개념

 

격리된 서로 다른 컨테이너들끼리는 통신을 주고받을 수 있습니다. 이는 컨테이너가 동일한 운영체제 위에서 작동하기 때문에 가능합니다. 이러한 작동 원리는 가상머신에 비해 리소스 소모량이 적으므로 더 효율적인 리소스 관리가 가능합니다.

 

 

✅가상화의 개념

 

도커를 이해하려면 가상화의 개념을 먼저 이해해야 합니다. 가상화Virtualization란 컴퓨터에서 활용하는 리소스를 추상화하는 개념을 의미하는 용어입니다. 가상화 개념을 활용해 여러 개의 가상머신을 생성함으로써, 단일 컴퓨팅 자원을 여러 개의 논리적인 자원으로 나누어 동작시킬 수 있습니다.

 

[그럼 2-7] 가상화의 종류

 

[그림  2-7]은 가상화의 종류를 나타낸 그림입니다. 왼쪽 그림은 호스트 가상화라고 부릅니다. 운영체제를 설치한 후 하이퍼바이저를 통해 가상머신을 만들고 각 가상머신 내부에는 게스트 운영체제가 설치됩니다. 이때 하이퍼바이저Hypervisor란 단일 물리 머신에서 다수의 가상머신을 실행할 때 활용하는 소프트웨어를 의미합니다. 버추얼박스, VM웨어vmware 등과 같은 종류가 있습니다. 일반적으로 호스트 가상화 방식을 많이 사용합니다.

 

[그림 2-7]의 가운데 그림은 하이퍼바이저 가상화 방식입니다. 하이퍼바이저 가상화는 호스트 가상화와는 달리 호스트 운영체제를 필요로 하지 않는 방식에 해당합니다. 호스트 운영체제가 존재하지 않으므로 부팅 시 가상머신을 선택하게 됩니다. 성능이 우수하다는 장점이 있습니다만 초기 설정이 복잡하고 관리가 어려울 수 있다는 단점이 있습니다.

 

[그림 2-7]의 오른쪽 그림은 컨테이너 가상화 방식입니다. 운영체제 위에 컨테이너를 운영하기 위해 필요한 도커를 설치한 후 다수의 컨테이너를 통해 애플리케이션을 실행하는 방식입니다. 이 책에서 활용하는 도커, 쿠버네티스는 컨테이너 가상화 방식을 활용하는 소프트웨어입니다. 컨테이너 가상화 방식을 사용하면 컨테이너 간 격리가 되기 때문에 다른 애플리케이션에 영향을 미치지 않아 서로 다른 컴퓨팅 환경에서 애플리케이션을 실행하는 데 용이합니다.

 

 

✅ 도커 구성 요소

 

도커의 구성 요소에 대해 알아보겠습니다. 도커 구성 요소는 단순히 설명을 읽을 때보다 이후 도커실습을 한 후에 더 쉽게 이해할 수 있습니다. [그림 2-8]은 컨테이너가 실행되기까지 필요한 구성요소를 나타낸 그림입니다.

 

[그림2-8] 도커 구성 요소

 

도커 클라이언트Docker Client는 docker-cli라고 부릅니다. 도커 클라이언트는 이후 실습에서 우분투에서 실행하는 터미널이라고 생각하면 편합니다. 그리고 도커 클라이언트는 명령어 행으로 dockerdAPI를 활용해 build, pull, run과 같은 명령을 내립니다. 또한 도커 클라이언트는 도커 데몬Docker Daemon과 통신합니다.

도커 데몬은 dockerd라고 부르는데 백그라운드에서 실행되는 데몬 프로세스에 해당합니다. 도커 데몬은 도커 API 요청을 수신하고 도커 이미지, 컨테이너 등과 같은 도커와 관련된 객체를 관리합니다.

containerd는 컨테이너 실행과 관리에 필요한 기능을 수행하는 오픈소스 컨테이너 런타임입니다. containerd는 컨테이너의 생명주기를 모두 관리합니다. 여기서 말하는 생명주기는 도커 이미지 전송, 컨테이너 실행, 스토리지, 네트워크 등을 포함합니다. 컨테이너 실행만 담당하는 runc와는 다른 역할을 하며 고수준 컨테이너 런타임High-Level Container runtime에 해당합니다. 

runc는 컨테이너 실행과 관련된 작업을 수행하는 저수준 컨테이너 런타임Low-Level Container runtime입니다. containerd는 실행 이외에도 컨테이너 관리를 위한 다양한 역할을 하지만, runc는 실제 컨테이너 실행만 담당합니다.

containerd-shim은 containerd와 runc 사이에서 작동하는 중간 프로세스에 해당하는데, 컨테이너 실행을 조정하는 역할을 합니다. containerd는 runc와 통신함으로써 컨테이너를 실행합니다. 이때, containerd-shim이 containerd와 runc 사이에서 중개자 역할을 수행합니다.


 

'한 권으로 배우는 도커 & 쿠버네티스'는 현재 IT 환경에서 필수적인 이 두 가지 기술을 단계별로 깊이 있게 다룹니다. 도커의 기본 개념과 원리, 도커 설치와 기초 명령어, 컨테이너 네트워크와 스토리지에 대해 자세히 설명합니다. 그리고 실제로 Django와 Flask 애플리케이션을 도커 컨테이너로 실행해보는 실습이 곁들여 있죠.

쿠버네티스 파트에서는 쿠버네티스의 구조와 구성 요소를 꼼꼼히 알아본 뒤, 실습 환경에 쿠버네티스 클러스터를 직접 구축해봅니다. 디플로이먼트, 서비스, 스토리지 볼륨 등 쿠버네티스 기초부터 익히고, Django와 Flask를 쿠버네티스에 배포하는 방법까지 다룹니다. 나아가 CI/CD 파이프라인 구축, 모니터링 환경 구성까지 자세히 소개하고 있습니다.

무엇보다 실습 환경 구축 방법을 친절하게 안내하고, 각 장마다 실습 예제를 통해 이론을 실무에 바로 적용할 수 있도록 했습니다. 초심자라도 차근차근 단계를 밟아가다 보면 어느새 도커와 쿠버네티스 전문가가 되어있을 것입니다.

현재 클라우드 네이티브 애플리케이션 개발과 데브옵스가 점점 더 중요해지고 있습니다. 도커와 쿠버네티스로 컨테이너 기반 개발과 운영 환경을 구축하는 것은 필수적인 역량입니다. 이 책을 통해 이러한 기술 역량을 기르신다면, 현대 IT 기술의 중심에 서실 수 있을 것입니다. 더 효율적이고 확장 가능한 애플리케이션 개발과 운영 환경을 구축할 수 있는 발판이 되어줄 것입니다.

 

✅컨테이너 개념부터 쿠버네티스를 활용한 배포까지 『한 권으로 배우는 도커 & 쿠버네티스』

 

도서구매 교보문고 / 예스24 / 알라딘

댓글 입력
자료실

최근 본 상품0