Docker-1 가상화와 컨테이너 개념
2025/09/28
n°69
category : DevOps
☼
2025/09/28
n°69
category : DevOps
클라우드 컴퓨팅에 대해 공부하기 위해 Docker 학습을 시작했습니다. 이 글은 인프런의 도커 마스터즈 강의를 듣고 작성했습니다.
효과적인 학습을 위해
강의 내용을 수기로 요약
강의 자료와 함께 수기에서 적은 내용을 markdown으로 옮기고
부족한 배경지식과 궁금증을 조사
하는 방식으로 학습했습니다.
이번 글에선 가상화의 기본 개념, 도커, 쿠버네티스의 개요를 살핍니다.
가상화: 하드웨어에 종속된 리소스로 IT 서비스를 만든다.
물리적 머신의 기능 → 여러 사용자 / 환경에 배포
=> 물리적 머신 최대한 활용한다.
*ref-keywords: virtualization
ex: Bluestack / NOX / 게임보이 에뮬레이터
하이퍼바이저와 같은 가상화 지원 기술은 일괄 처리를 수행하는 컴퓨터에 여러 명의 사용자가 동시에 액세스 가능하게 하는 기술
일괄 처리는 급여와 같은 루틴 태스크를 매우 빠르게 수천 번 실행하는 사업 부문에서 널리 사용되는 컴퓨팅 방식
수십 년 전에 개발되어 있었음.
1990년대 대부분의 기업이 물리 서버와 단일 벤더 IT 스택을 사용하고 있었기 때문에 다른 벤더의 하드웨어에서 레거시 애플리케이션을 실행할 수 없음
가상화 Virtualization를 통해 기업은 서버를 파티셔닝하고 여러 유형 및 버전의 운영 체제에서 레거시 애플리케이션을 실행
서버를 더 효율적으로 사용해 구매, 셋업, 냉각, 유지관리와 관련된 비용 감소
소프트웨어가 물리 리소스를 필요로 하는 가상 환경으로부터 <u>리소스를 분리</u>
호스트 컴퓨터 1대에서 운영체제 다수를 동시에 실행하는 논리적 플랫폼
Platform = 운영체제가 실행될 수 있는 기반 환경
하이퍼바이저는 노트북 등의 운영 체제에 배포하거나 서버 등의 하드웨어에 직접 설치
하이퍼바이저가 물리 리소스를 분할하여 가상 환경에서 사용
정의: 하이퍼바이저가 운영체제 없이 하드웨어 위에 직접 설치되는 형태
해당 하드웨어/베어메탈에 직접 설치
게스트 운영체제는 두 번째 수준으로 실행
제품: Xen, KVM, ESXi 등
Xen : 오픈소스 기반의 Type 1 하이퍼바이저로, 아마존 AWS 등 대규모 클라우드 인프라에서 사용
KVM : 리눅스 커널에 포함된 가상화 모듈로, 리눅스 자체를 Type 1 하이퍼바이저처럼 동작하게 함.
ESXi: VMware에서 제공하는 대표적인 상용 Type 1 하이퍼바이저로, 기업 서버 가상화 표준으로 널리 활용됨.
보통 기업에서 사용한다고 합니다.
❓베어 메탈 Bare-metal: 하드웨어 위에서 바로 실행
일반 프로그램처럼 호스트 운영체제에서 실행
게스트 운영체제는 세번째 수준으로 실행
?: "3번째 수준"?
제품: Virtualbox, Vmware, Parrallels 등
N번째 수준(Layer) 개념이 궁금하여 추가로 조사했습니다.
하드웨어 (CPU, 메모리, 디스크)
호스트 운영체제 (예: Windows, macOS, Linux)
하이퍼바이저 프로그램 (VirtualBox, VMware Workstation, Parallels 등)
게스트 운영체제(Guest OS) (가상 머신 안에 설치된 OS)
여기서 게스트 OS는하드웨어 → 호스트 OS → 하이퍼바이저 → 게스트 OS
순서로 실행되기 때문에, 흔히 “세 번째 수준(3rd layer)“이라고 표현한다고 합니다.
개념의 중요성에 대해 강조해주셨습니다. 도커가 널리 사용되면서 컨테이너=도커라고 합니다.
개인적으로는 Containerd, 컨테이너 런타임이 궁금하여 조금 더 알아보고 싶었습니다.
컨테이너는 가상환경을 사용해 각 마이크로 서비스를 격리(isolate)하는 기술
컨테이너는 가상머신처럼 하드웨어를 전부 구현하지 않기 때문에 매우 빠른 실행 가능
최근에 M3 맥에서 UTM을 활용하여 Windows OS를 실행했는데 상당히 무거웠습니다.
컨테이너는 도커, K8S의 환경에서 더 작은 단위로 격리되어 실행되어 빠른 것이 아닐까 예상했습니다.
이 부분은 사실 많이 낯선 내용이었습니다.
그래서 주로 벤치마크에서 Hypervisor / Docker / K8S의 성능 비교 및 자원 효율성 위주로 이해했습니다.
PageRank는 웹페이지들의 중요도를 수치로 평가하는 알고리즘
실제로 PageRank 점수를 계산하려면, 수백만~수십억 개의 노드와 링크로 구성된 대규모 그래프에서 위와 같은 연산을 반복 수행해야 함
이 과정은 행렬 곱셈, 벡터 연산 등 대량의 수치 계산과 반복적인 갱신이 필요하므로, 컴퓨팅 자원을 많이 소모
컨테이너 환경은 VM 환경에 비해 CPU 자원을 더 효율적으로 활용하며, 대기(Wait) 상태가 거의 없어 리소스 낭비가 적고, 작업 완료 시간도 짧음
VM 환경은 인스턴스가 많아질수록 CPU 대기(Wait) 시간이 급격히 늘어나고, 전체 작업 시간이 길어짐. 이는 가상화 오버헤드와 리소스 경합 때문임
베어메탈(Native), 가상머신(KVM), 그리고 다양한 컨테이너 환경(Docker, LXC, RKT)에서 CPU, 메모리, 디스크 I/O, 네트워크 성능을 비교한 벤치마크 결과
VM(KVM)은 모든 항목에서 오버헤드로 인해 성능이 떨어진다
Container는 기본적으로 Linux kernel 기능을 통해 구현된다고 합니다.
각 프로세스가 파일 시스템 마운트, 네트워크, 유저(uid), 호스트 네임(uts) 등에 대해 시스템에 독립 뷰를 제공
What you can see - 프로세스 격리를 통해 "뷰"를 제어한다는 의미로 이해했습니다.
네임스페이스를 통해 프로세스마다 격리한다는 개념이 중요한 것같습니다.
프로세스 그룹이 사용할 수 있는 시스템 자원(메모리, CPU, I/O, 네트워크 등)의 "양"을 제한하거나 모니터링하는 역할
cgroup은 자원의 '할당/제한/계량'을 담당하고, 네임스페이스는 '격리'를 담당
/cpu_mem_cg는 systemd와 cgroupfs와 같은 "cgroup 계층(hierarchy)"의 최상위 관리 주체를 나타냄
하지만 리눅스 네임스페이스, cgroup을 이용하여 컨테이너를 구성하는 것에 난이도가 있었기에 단순화한 툴(Docker)을 사용하게 됩니다.
컨테이너 기술의 사실상 표준
다양한 운영체제에서 사용 가능(리눅스, 윈도우, MacOS)
앱App에 국한 되지 않고 의존성 및 파일 시스템까지 패키징하여 빌드, 배포, 실행을 단순화
리눅스의 네임 스페이스와 cgroups와 같은 커널 기능을 사용하여 가상화
stateDiagram
[*] --> client : 사용자 명령 입력
state "Docker Client" as client {
[*] --> CLI : docker 명령어
CLI --> HTTP_REST : REST API 호출
}
state "Docker Server" as server {
[*] --> Daemon : Docker Daemon 시작
Daemon --> API : REST API 엔드포인트
API --> Containerd : 컨테이너 관리 요청
Containerd --> Runc : 컨테이너 실행
}
client --> server : HTTP REST 통신
server --> client : 응답 반환
note right of client
Docker CLI가 사용자 명령을
HTTP REST API로 변환하여
Docker Daemon과 통신
end note
note right of server
Docker Daemon이 REST API를 통해
클라이언트 요청을 받아
containerd와 runc를 통해
실제 컨테이너 작업 수행
end note도커의 클라이언트와 서버는 주로 REST API로 통신한다고 합니다.
도커 제어 CLI로 이해했습니다.
사용자가 도커와 상호 작용하기 위한 명령줄 도구
사용자는 도커 CLI를 통해 이미지를 빌드하고, 컨테이너를 생성하고, 관리할 수 있음
CLI는 사용자가 도커 명령어를 입력하면 도커 데몬(Docker Daemon)에 명령을 전달
도커의 핵심 서비스이며, <...