콘텐츠로 이동

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

1. 도커(Docker) 이해하기

📌 도커란?

  • 도커(Docker)프로그램을 격리해서 실행시켜주는 도구예요.

  • "내 컴퓨터에서는 되는데, 다른 컴퓨터에서는 안 돼!" 👉 이런 문제를 해결해줘요.

  • 컨테이너(Container) 라는 상자 안에 프로그램을 넣고 실행합니다.

  • 가상머신(VM)보다 가볍고 빠르다는 장점이 있어요.


2. 가상화 vs 컨테이너

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. 도커 컨테이너 생애주기

flowchart TD
    A[📦 이미지] --> B[▶️ 컨테이너 생성]
    B --> C[⏸️ 실행 중]
    C --> D[⏹️ 중지]
    D --> E[🗑️ 삭제]
    C --> F[🔄 새로운 버전으로 교체]
  • 컨테이너는 일회용품처럼 쓰고 버리는 게 기본.

  • 데이터는 호스트 서버 디스크에 따로 저장해두어야 안전해요.


5. 도커의 장점과 단점

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

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

# 도커 허브에서 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 등과 자주 같이 씀


🚀 정리

  • 도커는 가볍고 빠른 가상화 기술

  • 이미지 → 컨테이너 구조

  • 현업에서는 개발환경 공유, 배포 자동화, 마이크로서비스 운영에 필수