Docker

Seoyeon·2025년 9월 1일
0

백엔드기초

목록 보기
8/17

1. Docker란?

  • 컨테이너(Container) 기반 가상화 기술
  • OS 전체를 가상화하는 VM(Virtual Machine)과 달리, 프로세스 단위로 격리된 실행 환경 제공
  • “한 번 빌드하면 어디서든 똑같이 실행된다”가 장점

2. VM vs Docker 차이

  • VM (Virtual Machine)

    • 하이퍼바이저 위에 OS 전체를 올려야 함
    • 무겁고 실행 속도 느림
  • Docker (Container)

    • 호스트 OS 커널을 공유, 필요한 라이브러리/실행환경만 포함
    • 가볍고 빠름

3. 핵심 개념

(1) 이미지(Image)

  • 컨테이너 실행을 위한 설계도/템플릿
  • 여러 계층(layer)으로 쌓여 있음 (ex: Ubuntu + Python + 내 코드)
  • 불변(immutable) → 변경하려면 새 이미지 빌드

(2) 컨테이너(Container)

  • 이미지를 실행한 실행 인스턴스
  • 가볍고, 필요하면 여러 개 띄울 수 있음
  • 컨테이너 삭제하면 내부 데이터도 사라짐 → 데이터는 볼륨(volume)에 보관

(3) Dockerfile

  • 이미지를 정의하는 설계서(스크립트)

  • 어떤 OS, 어떤 패키지, 어떤 소스를 설치할지 명시

  • 예시:

    FROM python:3.10-slim
    WORKDIR /app
    COPY requirements.txt .
    RUN pip install -r requirements.txt
    COPY . .
    CMD ["python", "app.py"]

(4) 레지스트리(Registry)

  • 이미지를 저장/공유하는 공간
  • Docker Hub(공식), 개인 레지스트리(AWS ECR, GitHub Container Registry 등)

(5) 볼륨(Volume)

  • 컨테이너와 독립적인 데이터 저장소
  • 컨테이너가 죽어도 데이터는 유지됨

4. 주요 명령어

이미지 관련

docker pull nginx        # 이미지 다운로드
docker images            # 이미지 목록 확인
docker rmi <image_id>    # 이미지 삭제

컨테이너 관련

docker run -d -p 8080:80 nginx   # nginx 실행 (-d: 백그라운드, -p: 포트매핑)
docker ps                        # 실행중인 컨테이너
docker ps -a                     # 모든 컨테이너
docker stop <id>                 # 컨테이너 중지
docker rm <id>                   # 컨테이너 삭제

기타

docker exec -it <id> bash        # 컨테이너 내부 접속
docker logs <id>                 # 로그 확인

5. Docker Compose

  • 여러 컨테이너를 한꺼번에 관리할 수 있는 도구

  • docker-compose.yml 파일에 서비스 정의

  • 예시 (웹 + DB):

    version: '3'
    services:
      web:
        build: .
        ports:
          - "5000:5000"
        depends_on:
          - db
      db:
        image: mysql:8
        environment:
          MYSQL_ROOT_PASSWORD: root
  • 실행:

    docker compose up -d
    docker compose down

6. Docker의 장점

  • 환경 차이 없는 실행 (개발/운영 동일 환경 보장)
  • 빠른 배포와 확장 (컨테이너 여러 개 띄우기 쉬움)
  • CI/CD 파이프라인과 잘 맞음 (GitHub Actions, Jenkins 등과 연동)
  • 클라우드 환경(AWS, GCP, Azure)에서 표준처럼 사용됨

7. 실제 활용 예시

  • 백엔드 서버 배포: Spring Boot → Docker 이미지 빌드 후 EC2에서 실행
  • DB 실행: 로컬에 MySQL 설치 안 하고 docker run mysql로 바로 사용
  • 테스트 환경 구성: Redis, Kafka 같은 미들웨어도 도커로 간단하게 띄움
  • CI/CD: 코드 푸시 → GitHub Actions에서 Docker 이미지 빌드 → ECR 푸시 → EC2 배포

0개의 댓글