Docker란? 컨테이너 기반 가상화 플랫폼 이해하기

발라·2025년 7월 9일

서버 이해 첫걸음

목록 보기
4/11
post-thumbnail

Docker란?

Docker는 컨테이너라는 격리된 공간에서 애플리케이션을 실행하는 플랫폼이에요.

  • 컨테이너: 호스트 커널을 공유하면서도 프로세스별로 독립된 파일시스템·네트워크·리소스를 제공
  • 이미지(Image): 컨테이너 실행에 필요한 코드·라이브러리·설정 등을 계층화한 패키지
  • Dockerfile: 이미지를 어떻게 만들지 단계별로 정의한 스크립트

가상머신(VM)보다 가볍고(startup 빠름, 리소스 절약), 어디서나 동일하게 동작해서 “내 컴에서는 되는데 서버에서는 안 돼” 문제를 크게 줄여줘요.

주요 개념

1. 이미지(Image)

  • 불변(Immutable) 객체, 레이어로 구성
  • docker pull ubuntu:20.04 처럼 레지스트리에서 내려받음
  • 변경점만 저장해 효율적

2. 컨테이너(Container)

  • 이미지를 실행한 실제 프로세스
  • docker run → 실행, docker stop·docker rm → 관리
  • 독립된 네트워크·파일시스템·프로세스 네임스페이스 제공

3. Dockerfile

  • 이미지 빌드 스크립트
  • 예시:
    FROM python:3.9-slim
    WORKDIR /app
    COPY requirements.txt .  
    RUN pip install --no-cache-dir -r requirements.txt
    COPY . .
    CMD ["python", "app.py"]
  • docker build -t my-app:latest . 명령으로 빌드

4. 레지스트리(Registry)

  • 이미지 저장소 (Docker Hub, 개인 레지스트리 등)
  • docker push my-app:latest, docker pull my-app:latest

설치 방법

# Ubuntu
sudo apt update
sudo apt install -y docker.io
sudo systemctl enable --now docker
# 사용자 권한 설정 (선택)
sudo usermod -aG docker $USER
  • macOS·Windows: Docker Desktop 설치

기본 명령어

명령어설명
docker run -d --name 컨테이너명 이미지백그라운드에서 새 컨테이너 실행
docker ps실행 중인 컨테이너 목록
docker ps -a모든 컨테이너 목록
docker stop 컨테이너명컨테이너 중지
docker rm 컨테이너명컨테이너 삭제
docker images로컬 이미지 목록
docker rmi 이미지명이미지 삭제
docker build -t 이름:태그 .Dockerfile로 이미지 빌드

Volume & Network

Volume

  • 호스트와 데이터 공유
  • 예시:
    docker run -d \
      -v /host/data:/app/data \
      --name my-app \
      my-app:latest

Network

  • 기본 브리지(bridge) 네트워크 사용
  • 사용자 정의 네트워크:
    docker network create my-net
    docker run -d --network my-net --name web nginx
    docker run -d --network my-net --name api my-api

Docker Compose

여러 컨테이너를 하나의 서비스 스택으로 정의·실행할 때 사용해요.

version: '3'
services:
  db:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - db-data:/var/lib/mysql

  web:
    build: .
    ports:
      - "8080:80"
    depends_on:
      - db

volumes:
  db-data:
docker-compose up -d

마무리

  • 가볍고 일관된 배포: 개발·테스트·운영 환경이 동일
  • 빠른 시작 시간: VM 대비 리소스·시간 절약
  • 유연한 확장성: 마이크로서비스 아키텍처에 최적

이제 여러분의 프로젝트에 Docker를 도입해보세요!

profile
능숙한 바이브코딩을 할 수 있게 됨을 꿈꾸며

0개의 댓글