2025-09-18 00:59:19
๋ฐ˜์‘ํ˜•

# ๐Ÿณ Docker ์‚ฌ์šฉ ๊ฐ€์ด๋“œ

## 1. ๋„์ปค ๊ตฌ์„ฑ ์š”์†Œ

### ๐Ÿ“Œ ์ฃผ์š” ๊ตฌ์„ฑ์š”์†Œ

- **Docker Client (docker-cli)**  
    ์‚ฌ์šฉ์ž๊ฐ€ ํ„ฐ๋ฏธ๋„์—์„œ ๋ช…๋ น์–ด ์ž…๋ ฅ (์˜ˆ: `docker run`)
    
- **Docker Daemon (dockerd)**  
    ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰, ์ปจํ…Œ์ด๋„ˆ/์ด๋ฏธ์ง€ ๊ด€๋ฆฌ
    
- **containerd**  
    ์ปจํ…Œ์ด๋„ˆ์˜ ์ „์ฒด ์ƒ์• ์ฃผ๊ธฐ ๊ด€๋ฆฌ (์ƒ์„ฑ, ์‹คํ–‰, ์ค‘์ง€, ์‚ญ์ œ)
    
- **runc**  
    ์‹ค์ œ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ๋‹ด๋‹น
    
- **containerd-shim**  
    containerd ↔ runc ์ค‘๊ฐ„ ์—ฐ๊ฒฐ์ž, ์‹คํ–‰ ์กฐ์ •
    

---

### ๐Ÿ“Š ๋„์ปค ๊ตฌ์„ฑ์š”์†Œ ๋‹ค์ด์–ด๊ทธ๋žจ

```mermaid
flowchart TD
    A["์‚ฌ์šฉ์ž (Docker CLI)"] --> B["Docker Daemon (dockerd)"]
    B --> C["containerd (์ปจํ…Œ์ด๋„ˆ ์ƒ์• ์ฃผ๊ธฐ ๊ด€๋ฆฌ)"]
    C --> D["runc (์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰)"]
    C --> E["containerd-shim (์ค‘๊ฐœ์ž)"]
```


---

## 2. ๋„์ปค ์‹คํ–‰ ํ™˜๊ฒฝ

- **๋ฆฌ๋ˆ…์Šค**: ๋ฐ”๋กœ ์„ค์น˜ ๊ฐ€๋Šฅ (CLI ํ™˜๊ฒฝ ์œ„์ฃผ)
    
- **์œˆ๋„์šฐ / macOS**:
    
    - Docker Desktop ํŒจํ‚ค์ง€ ์‚ฌ์šฉ (๋‚ด๋ถ€์ ์œผ๋กœ ๋ฆฌ๋ˆ…์Šค VM ์‹คํ–‰)
        
    - ์‚ฌ์šฉ์ž๋Š” VM ์‹ ๊ฒฝ ์•ˆ ์“ฐ๊ณ  ์ผ๋ฐ˜ ํ”„๋กœ๊ทธ๋žจ์ฒ˜๋Ÿผ ์‹คํ–‰ ๊ฐ€๋Šฅ
        

---

### ๐Ÿ“‹ ๋„์ปค Desktop ์š”๊ตฌ์‚ฌํ•ญ

- **์œˆ๋„์šฐ**
    
    - Windows 10 64bit (Pro, Enterprise, Education) / Build 16299 ์ดํ›„
        
    - Home ๋ฒ„์ „์€ WSL2 ํ•„์š”
        
    - CPU ๊ฐ€์ƒํ™”(SLAT) ์ง€์›, ๋ฉ”๋ชจ๋ฆฌ 4GB ์ด์ƒ
        
- **macOS**
    
    - 2010๋…„ ์ดํ›„ ๋ชจ๋ธ
        
    - macOS 10.13 ์ดํ›„, ๋ฉ”๋ชจ๋ฆฌ 4GB ์ด์ƒ
        
- **๋ฆฌ๋ˆ…์Šค**
    
    - Ubuntu 16.04 ์ดํ›„ ๋“ฑ ์ฃผ์š” ๋ฐฐํฌํŒ ์ง€์›
        

---

## 3. ๋„์ปค ๋™์ž‘ ๋ฐฉ์‹

### ๐Ÿ“Š ๋™์ž‘ ํ๋ฆ„

```mermaid
sequenceDiagram
    participant U as ์‚ฌ์šฉ์ž (docker run)
    participant C as Docker Client
    participant D as Docker Daemon
    participant H as Docker Hub
    participant N as Container

    U->>C: docker run hello-world
    C->>D: ๋ช…๋ น ์ „๋‹ฌ
    D->>H: ์ด๋ฏธ์ง€ ์š”์ฒญ (hello-world)
    H-->>D: ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ
    D->>N: ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ ๋ฐ ์‹คํ–‰
    N-->>U: ์‹คํ–‰ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
```



---

### ๐Ÿ“ฆ ์ด๋ฏธ์ง€์™€ ์ปจํ…Œ์ด๋„ˆ

- **์ด๋ฏธ์ง€(Image)**
    
    - ํ”„๋กœ๊ทธ๋žจ + ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ + ์„ค์ •์„ ๋ฌถ์€ ํŒจํ‚ค์ง€
        
    - "๋นตํ‹€" ๊ฐ™์€ ์—ญํ• 
        
    - ์—ฌ๋Ÿฌ ๊ฐœ์˜ "๋ ˆ์ด์–ด(Layer)"๋กœ ๊ตฌ์„ฑ
        
- **์ปจํ…Œ์ด๋„ˆ(Container)**
    
    - ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•œ ์ธ์Šคํ„ด์Šค
        
    - ์‹คํ–‰/์ค‘์ง€/์‚ญ์ œ ๊ฐ€๋Šฅ
        
    - ๋…๋ฆฝ๋œ ํŒŒ์ผ ์‹œ์Šคํ…œ๊ณผ ํ™˜๊ฒฝ์„ ๊ฐ€์ง
        

---

## 4. ๋„์ปค ์ฒซ ์‹คํ–‰ (Hello World)

### ๐Ÿš€ ๋ช…๋ น์–ด

`# ๋„์ปค "hello-world" ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ docker run hello-world`  

### ๐Ÿ“ ํ•œ ์ค„์”ฉ ์„ค๋ช…

- `docker` → ๋„์ปค ๋ช…๋ น์–ด ์‹คํ–‰
    
- `run` → ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ
    
- `hello-world` → Docker Hub์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ ํ…Œ์ŠคํŠธ ์ด๋ฏธ์ง€
    

---

### โšก ์‹คํ–‰ ๊ณผ์ •

1. ์‚ฌ์šฉ์ž๊ฐ€ `docker run hello-world` ์ž…๋ ฅ
    
2. Docker Client → Docker Daemon์— ๋ช…๋ น ์ „๋‹ฌ
    
3. Daemon์ด Docker Hub์—์„œ ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ
    
4. Daemon์ด ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ ๋ฐ ์‹คํ–‰
    
5. ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉ์ž ํ„ฐ๋ฏธ๋„์— ์ถœ๋ ฅ
    

---

## 5. ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ฐ€๋ฒผ์šด ์ด์œ 

- ์šด์˜์ฒด์ œ๋ฅผ ํ•˜๋‚˜์”ฉ ํฌํ•จํ•˜๋Š” VM๊ณผ ๋‹ฌ๋ฆฌ,  
    **ํ˜ธ์ŠคํŠธ OS ์ปค๋„์„ ๊ณต์œ **ํ•ด์„œ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ์ด ์—†์Œ.
    
- ๋”ฐ๋ผ์„œ ์‹คํ–‰ ์†๋„๋„ ๋น ๋ฅด๊ณ , ๋ฉ”๋ชจ๋ฆฌ/๋””์Šคํฌ ํšจ์œจ๋„ ์ข‹์Œ.
    

---

## 6. ํ˜„์—…์—์„œ ๋„์ปค ํ™œ์šฉ ์‚ฌ๋ก€

- **๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ณต์œ **
    
    - ํŒ€์› ๋ชจ๋‘ ๊ฐ™์€ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์‚ฌ์šฉ (ํ™˜๊ฒฝ ์ฐจ์ด๋กœ ์ธํ•œ ๋ฌธ์ œ ๋ฐฉ์ง€)
        
- **ํ…Œ์ŠคํŠธ ๋ฐ ๋ฐฐํฌ ์ž๋™ํ™” (CI/CD)**
    
    - GitHub Actions, Jenkins, GitLab CI/CD์™€ ์—ฐ๊ณ„ํ•ด ์ž๋™ ๋ฐฐํฌ
        
- **๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์šด์˜**
    
    - ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋…๋ฆฝ์ ์ธ ์ปจํ…Œ์ด๋„ˆ๋กœ ์„œ๋น„์Šค ์šด์˜ (์˜ˆ: ์›น, DB, ์บ์‹œ ๋ถ„๋ฆฌ)
        
- **ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ๊ณผ ๊ฒฐํ•ฉ**
    
    - AWS ECS, EKS / GCP GKE / Azure AKS ๋“ฑ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ
        

---

# โœ… ์ •๋ฆฌ

- ๋„์ปค๋Š” **์ด๋ฏธ์ง€ → ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ๊ตฌ์กฐ**
    
- **Docker CLI → Daemon → containerd → runc** ํ๋ฆ„
    
- ํ˜„์—…์—์„œ๋Š” **๊ฐœ๋ฐœํ™˜๊ฒฝ ํ†ต์ผ, ์ž๋™ํ™” ๋ฐฐํฌ, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์šด์˜**์— ํ•„์ˆ˜
    

---

๐Ÿ‘‰ ์—ฌ๊ธฐ๊นŒ์ง€ ํ•˜๋ฉด **๋„์ปค ์‚ฌ์šฉ ๊ตฌ์กฐ + ์„ค์น˜ + ๋™์ž‘ ์›๋ฆฌ + Hello World ์‹ค์Šต**์„ ์ „์ฒด์ ์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์–ด์š”.

๋ฐ˜์‘ํ˜•