-
한 권으로 배우는 도커 & 쿠버네티스 - [PART 1] 2장 도커의 개념Study/Docker&Kubernetes 2025. 1. 9. 21:35
2장 도커의 개념
2.1 사전 기초 지식
도커를 이해하기 위해서는 운영체제, 프로그램, 스레드, 네임스페이스와 같은 개념을 먼저 이해해야한다.
2.1.1 운영체제의 개념
컴퓨터는 크게 '하드웨어, '소프트웨어' 로 구성되어 있다.
좁은 의미의 컴퓨터는 CPU, 램의 모음이라고 할 수 있다.
* 하드웨어 : 손으로 만질수 있는 기계장치를 의미
* 소프트웨어: 하드웨어에서 작동되는 프로그램을 의미 (엑셀, 파워포인트..등의 프로그램)
운영체제는 시스템 소프트웨어를 의미한다.
운영체제가 있어야 프로그램을 실행할 수 있다.
* 운영체제의 역할: 하드웨어, 소프트웨어 자원을 관리하고 이를 위해 스케줄링 기능 제공 및 프로그램 실행 환경 제공
컴퓨터에는 하드웨어, 소프트웨어로 구성되어있고,
소프트웨어는 운영체제와 애플리케이션으로 구성되어있고, 운영체제는 커널과 그외 라이브러리로 구성되어있다.
운영체제와 애플리케이션 사이에는 셸(shell)이 존재한다.
셸은 껍질이라는 뜻이있는데, 셸은 말 그대로 운영체제를 감싸고 있는 형태이다
셸을 통해 사용자는 명령어를 입력함으써 운영체제와 상호작용이 가능하다. (bash, zsh.. 등)
2.1.2 프로그램, 프로세스, 스레드의 개념
* 프로그램 : 실행가능한 명령어의 집합을 의미, 저장장치에 저장되어있지만 메모리에 올리가있지않은 정적인 상태
* 프로세스 : 실행 중인 프로그램 의미, 동적인 상태의 프로그램 (램에 존재함)
* 스레드 : 프로세스가 할당받은 자원을 이용하는 실행 단위, 프로세스 내에 실행되는 여러 흐름의 단위
프로세스는 최소 한 개 이상의 스레드를 가지며 이를 메인 스레드 라고 한다.
(ex. 워드에서 글을 작성할때, 키입력, 오탈자검증 등 한개의 프로세스의 여러개의 스레드가 실행되고있다)
-> 스레드의 컨테이너에 해당하며 스레드의 정보를 담고있다.
2.1.3 네임스페이스의 개념
프로세스를 실행할 때 시스템 리소스를 분리해서 실행 할 수 있도록 도와주는 기능을 의미한다
각각의 리소스를 구분하기 위한 식별 방법이다.
* 리눅스 네임스페이스 종류
- pid
- net
...
2.2 도커 기초지식
도커를 이해하기 위해선 컨테이너 및 가상화에 대해서 알고있어야한다.
2.2.1 도커의 정의
컨테이너라고 부르는 운영체제 수준의 가상화 방식으로 소프트웨어를 배포하는 방식을 사용하는 PasS 제품(데이터 단계만 사용자가 관리)을 의미한다.
도커를 사용하면 다양한 개발환경에서 컨테이너를 이용해 소프트웨어를 편리하게 배포할 수 있다.
운영체제 위에 도커가 설치되고 도커는 컨테이너 단위로 애플리케이션을 실행하게 된다.
각 컨테이너들은 애플리케이션을 실행하는 데 필요한 최소한의 바이너리, 라이브러리를 포함하며 서로 격리되어 있으므로 독립성을 보장한다.
2.2.2 컨테이너의 개념
컨테이너는 소프트웨어를 배포할때 필요한 코드, 라이브러리, 환경 설정 파일들을 한데 모아 격리시킨 후 실행가능한 패키지로 만든것을 의미한다.
최소 구성 요소로 분할하여 구축하는 방식인 마이크로 서비스 아키텍처의 기반이 된다.
각각의 격리된 컨테이너들끼리는 통신을 주고받을 수 있다.
이는 컨테이너가 동일한 운영체제 위에서 작동하기 때문에 가능하다. 이러한 작동 원리는 가상 머신에 비해 리소스 소모량이 적어 더 효율적인 리소스 관리가 가능하다.
2.2.3 가상화의 개념
가상화란 컴퓨터에서 활용하는 리소스를 추상화하는 개념을 의미한다.
가상화개념을 활용해 여러 개의 가상머신을 생성함으로써, 단일 컴퓨팅 자원을 여러개의 논리적인 자원으로 나누어 동작시킬 수 있다.
* 가상화의 종류
- 호스트 가상화: 운영체제를 설치한 후 하이퍼바이저를 통해 가상머신을 만들고 각 가상머신 내부에 게스트 운영체제를 설치한 형태
하이퍼바이저란 물리머신에서 다수의 가상머신을 실행할 때 활용하는 소프트웨어를 의미 (버추얼박스, VM웨어..)
일반적으로 많이 사용한다.
- 하이퍼바이저 가상화 : 호스트 운영체제를 필요로 하지 않는 방식
호스트 운영체제가 존재하지 않으므로 부팅 시 가상머신을 선택한다. 성능이 우수하다는 장점이 있지만 설정이 복잡하고 관리가 어려운 단점이 존재한다.
- 컨테이너 가상화 : 운영체제 위에 컨테이너를 운영하기 위해 필요한 도커를 설치한 후 다수의 컨테이너를 통해 애플리케이션을 실행하는 방식
-> 이 책에서는 컨테이너 가상화에 대해서 공부 할 예정이다.
2.2.4 도커의 구성 요소
* 도커 클라이언트 : docker-cli 라고한다. 명령어 행으로 dockerd API를 활용해 build, pull, run과 같은 명령을 내리며 도커 데몬과 통신한다.
* 도커 데몬: dokerd 라고 한다. 백그라운드에서 실행되는 데몬 프로세스에 해당한다. 도커 API 요청을 수신하고 도커 이미지, 컨테이너 등과 같은 도커와 관련된 객체를 관리한다.
* 고수준 컨테이너 런타임 : containerd 라고 한다. 컨테이너 실행과 관리에 필요한 기능을 수행한다.
컨테이너의 생명주기(도커 이미지 전송, 컨테이너 실행, 스토리지, 네트워크 ..) 를 모두 관리한다.
runc와 통신함으로써 컨테이너를 실행한다.
* 저수준 컨테이너 런타임 : runc 라고 한다. 오직 컨테이너 실행과 관련된 작업을 수행한다.
* containerd-shim : 컨테이너 실행을 조정하는 역할을 한다. containerd와 runc 사이에서 작동하는 중간 프로세스에 해당한다.
'Study > Docker&Kubernetes' 카테고리의 다른 글
[Docker] 도커 기초 개념 - 도커의 작동방식과 도커이미지, 컨테이너 실행 실습 (1) 2025.01.26 [Docker] 맥 OS에 Docker Desktop 설치하기 (1) 2025.01.23 한 권으로 배우는 도커 & 쿠버네티스 - 1장 실습 환경 구축 하기 (0) 2025.01.06