Cloud Engineering Bootcamp/6. Docker (1)
2025-09-17 13:51:45
반응형

# 🐳 Docker 가상화 및 컨테이너 관리

## 1. 도커(Docker) 이해하기

### 📌 도커란?

- **도커(Docker)** 는 **프로그램을 격리해서 실행**시켜주는 도구예요.
    
- "내 컴퓨터에서는 되는데, 다른 컴퓨터에서는 안 돼!" 👉 이런 문제를 해결해줘요.
    
- **컨테이너(Container)** 라는 상자 안에 프로그램을 넣고 실행합니다.
    
- 가상머신(VM)보다 **가볍고 빠르다**는 장점이 있어요.
    

---

## 2. 가상화 vs 컨테이너


```mermaid
flowchart LR
    A["물리 서버<br/>💻"] --> B["가상화 (VM)<br/>🗂️"]
    A --> C["컨테이너 (Docker)<br/>📦"]

    B --> B1["운영체제 포함<br/>⚙️"]
    B --> B2["리소스 사용 많음<br/>📈"]

    C --> C1["공유 OS 위 실행<br/>⚡"]
    C --> C2["리소스 사용 적음<br/>💡"]
```



- **가상화(VM)**: 운영체제(OS)를 여러 개 띄워서 무거움.
    
- **컨테이너(Docker)**: 운영체제를 공유하므로 가볍고 빠름.
    

---

## 3. 도커의 기본 개념

- **이미지(Image)**: 프로그램을 찍어낼 수 있는 "빵틀" 같은 것.
    
- **컨테이너(Container)**: 이미지를 실행해서 만들어진 "빵" 같은 것.
    
- **도커 엔진(Docker Engine)**: 컨테이너를 만들고 실행시키는 프로그램.
    
- **도커 허브(Docker Hub)**: 전 세계 사람들이 만든 이미지를 공유하는 "앱스토어" 같은 곳.
    

---

## 4. 도커 컨테이너 생애주기

```mermaid
flowchart TD
    A[📦 이미지] --> B[▶️ 컨테이너 생성]
    B --> C[⏸️ 실행 중]
    C --> D[⏹️ 중지]
    D --> E[🗑️ 삭제]
    C --> F[🔄 새로운 버전으로 교체]
```



- 컨테이너는 **일회용품**처럼 쓰고 버리는 게 기본.
    
- 데이터는 **호스트 서버 디스크**에 따로 저장해두어야 안전해요.
    

---

## 5. 도커의 장점과 단점

|✅ 장점|⚠️ 단점|
|---|---|
|한 대의 서버에 여러 개 실행 가능|리눅스 프로그램만 지원|
|관리하기 쉽다|서버가 죽으면 컨테이너도 영향|
|개발환경 통일|컨테이너 1개만 쓰면 비효율|

---

## 6. 도커 기본 명령어 예시 (한 줄씩 주석 포함)


```bash
# 도커 허브에서 nginx(웹 서버) 이미지 다운로드
docker pull nginx  

# nginx 이미지를 이용해 컨테이너 실행 (이름을 myweb으로 지정)
docker run --name myweb -d -p 8080:80 nginx  

# 현재 실행 중인 컨테이너 확인
docker ps  

# 컨테이너 중지
docker stop myweb  

# 컨테이너 삭제
docker rm myweb  

# 이미지 삭제
docker rmi nginx  
```


📝 **설명**


- `docker pull nginx` → "nginx라는 빵틀을 가져온다"
    
- `docker run` → "그 빵틀로 빵(컨테이너)을 굽는다"
    
- `docker ps` → "지금 오븐에서 굽고 있는 빵들 확인"
    
- `docker stop` → "빵 굽는 거 멈추기"
    
- `docker rm` → "빵 버리기"
    
- `docker rmi` → "빵틀 버리기"
    

---

## 7. 현업에서 도커 활용 사례

- **개발 환경 통일**
    
    - 팀원 모두 같은 환경에서 개발 가능
        
    - "내 컴퓨터에서는 되는데?" 문제 해결
        
- **테스트 환경**
    
    - 새 버전 프로그램을 쉽게 테스트 가능
        
    - 예: 개발 → 테스트 → 운영 배포
        
- **마이크로서비스**
    
    - 여러 개의 작은 서버(웹, DB, API)를 컨테이너로 각각 실행
        
    - 서로 독립적이라 관리가 쉬움
        
- **CI/CD 자동화**
    
    - 깃허브 → 도커 빌드 → 서버 배포 자동화
        
    - 실무에서 **Jenkins, GitHub Actions, GitLab CI** 등과 자주 같이 씀
        

---

## 🚀 정리

- 도커는 **가볍고 빠른 가상화 기술**
    
- **이미지 → 컨테이너** 구조
    
- **현업에서는 개발환경 공유, 배포 자동화, 마이크로서비스 운영**에 필수

반응형