✅ Docker 개념 정리
1. 가상화(Virtualization)와 컨테이너(Containerization) 차이
구분 | 가상화 (Virtualization) | 컨테이너 (Containerization) |
---|---|---|
기술 방식 | 하드웨어 가상화 (Hypervisor 기반) | OS 커널 가상화 (Namespace, Cgroups) |
단위 | 전체 OS를 포함한 가상 머신(VM) | 애플리케이션 + 의존성만 분리 (프로세스 단위) |
자원 사용량 | 무겁다 (RAM, CPU 많이 사용) | 가볍다 (필요한 만큼만 사용) |
부팅 속도 | 느리다 (OS 부팅 필요) | 빠르다 (프로세스 수준 실행) |
대표 기술 | VMware, VirtualBox, KVM | Docker, Podman, containerd |
✔️ 요약
- 가상화는 OS 전체를 통째로 가상화. (ex. Ubuntu VM 안에 Ubuntu 설치)
- 컨테이너화는 "OS는 공유"하고, 프로세스/라이브러리 레벨만 격리.
2. Docker의 역할
Docker = 컨테이너 기술을 관리/제어하는 도구
- 컨테이너를 만들고(이미지 기반), 실행시키고, 삭제하고, 네트워크를 연결하는 플랫폼.
- 도커 엔진(Docker Engine) = 컨테이너를 실제로 실행하는 프로그램.
- 컨테이너는 "프로세스 + 파일시스템" 단위로 관리된다.
- Docker가 없더라도 리눅스 커널이 제공하는
namespace
,cgroup
기술을 직접 써서 컨테이너를 만들 수 있음. (복잡하고 어려워서 Docker가 대신 해주는 것.)
3. 개발환경 버전 문제 해결
Docker를 쓰는 이유 중 핵심: 개발 환경 통합
문제 상황
- 개발자는 JDK, Node.js, Python 같은 언어 버전이나 패키지(라이브러리) 버전 문제로 고통받음.
- "내 컴퓨터에선 잘 되는데 서버에서는 안 돼요" 문제 발생.
Docker 활용
- 필요한 라이브러리, 실행환경(예: JDK 11, Node 18, Python 3.11)을 컨테이너 이미지 안에 다 넣어놓음.
- 이 이미지를 어디에 배포하든 항상 똑같은 환경이 보장됨.
(맥이든 우분투든, AWS든, Azure든)
✔️ 이미지(Image)
: 컨테이너 실행에 필요한 파일과 설정을 모두 포함한 패키지.
✔️ 컨테이너(Container)
: 이미지를 실행한 상태(메모리에 올라온 프로세스).
4. "이미지를 구워서 전달" 비유
- Dockerfile로 개발환경(이미지)을 설계
docker build
명령어로 이미지를 "굽는다" (build = baking 이미지)- 이 이미지를
.tar
파일로 저장하거나, Docker Registry (ex. DockerHub, ECR)에 업로드해 다른 서버에 전달 - 서버에서는
docker pull
해서 가져와 실행 (docker run
)
한 번 구축한 환경을 어디서든 재현할 수 있다.
5. Ubuntu도 "가상 환경"인가?
✔️ 엄밀히 말하면:
- Ubuntu는 OS.
- "Ubuntu를 설치한 가상 머신"이나 "Ubuntu 기반 Docker 컨테이너"는 가상 환경이 맞음.
- Ubuntu 자체가 가상환경은 아님.
정리:
- Ubuntu는 가상화의 대상(guest OS)이 될 수 있음.
- Docker에서는 Ubuntu 이미지를 기반으로 컨테이너를 만들 수 있음.
컨테이너 내 Ubuntu
→ 실제 Ubuntu 커널이 아니라,
→ 호스트 OS의 커널을 공유하면서 Ubuntu 파일 시스템과 프로세스만 격리된 것임.
(= Ubuntu 처럼 보이지만 사실 리눅스 커널은 호스트와 공유)
6. Docker Desktop 유료화
✔️ Docker Desktop (맥/윈도우용):
- 가상머신(VM)을 띄워서 그 안에 Docker 엔진을 설치한 것.
- 맥이나 윈도우는 리눅스 커널이 없기 때문에 "작은 리눅스 머신"을 가상으로 띄워야 Docker를 돌릴 수 있음.
✔️ 2021년부터:
- 기업용 (250명 이상 / 연매출 1000만 달러 이상)은 Docker Desktop 유료 사용 필요.
- 개인/소규모 기업은 무료.
✔️ 중요:
- Docker 기술 자체(컨테이너 기술) = 오픈소스(
containerd
,runc
) - Docker Desktop은 편의를 위한 상용 소프트웨어.
즉, 리눅스 서버에서는 Docker Desktop 없이도 Docker 쓸 수 있다.
7. Docker 컨테이너와 고래 로고 의미
- 고래 🐳 : Docker Engine을 상징. (컨테이너들을 나르는 역할)
- 컨테이너 박스 📦 : 고래 위에 얹힌 여러 컨테이너들.
컨테이너 여러 개를 관리하는 플레이어 = Docker.
- 하나의 Docker 엔진이 수십, 수백 개의 컨테이너를 관리할 수 있음.
✅ 최종 요약 정리
용어 | 설명 |
---|---|
Docker | 컨테이너를 관리하는 플랫폼 (엔진, CLI, API) |
이미지(Image) | 컨테이너 실행에 필요한 정적 패키지 (read-only) |
컨테이너(Container) | 이미지를 실행한 상태 (독립 프로세스) |
Docker Desktop | Mac/Windows 사용자를 위한 Docker 실행 패키지 (VM 포함) |
가상화(Virtualization) | OS, 하드웨어까지 가상화 (ex. VMware) |
컨테이너화(Containerization) | 애플리케이션과 라이브러리만 격리 (Docker) |
namespace, cgroup | 리눅스 커널의 격리 및 자원관리 기능 |
containerd, runc | Docker의 핵심 오픈소스 엔진 구성 요소 |
🔥 실무 포인트
- 운영 환경 통일: 개발-테스트-운영 동일 이미지 사용
- 빠른 배포: 새 버전 배포 시 이미지 교체만
- 경량성: VM보다 훨씬 가볍고 빠른 실행
- 이식성: 어디서든 똑같이 실행 가능 (맥, 리눅스, 윈도우)
'CS > OS' 카테고리의 다른 글
[Linux] 로그인 셸 (Login Shell) vs 비로그인 셸 (Non-login Shell) (0) | 2025.04.17 |
---|---|
[Linux] 리눅스 로그인 환경 설정 파일 구조 정리 (0) | 2025.04.17 |
[Linux] Crontab 개념 정리 (0) | 2025.04.17 |
[Linux] 쉘 스크립트 실행과 프로세스 관리 (0) | 2025.04.17 |
[OS] vi 편집기 자주 사용하는 키 정리 (0) | 2025.04.03 |
댓글