도커 기초

Sleeper·2025년 5월 28일

구디아카데미

목록 보기
3/3

🐳 도커(Docker) 기초 완벽 가이드

목차

  1. 도커란 무엇인가?
  2. 가상화 vs 컨테이너화
  3. 도커의 핵심 개념
  4. 도커 설치하기
  5. 기본 명령어
  6. Dockerfile 작성하기
  7. 실습: 간단한 웹 애플리케이션 컨테이너화
  8. 마무리

도커란 무엇인가?

도커(Docker)는 컨테이너 기반의 가상화 플랫폼입니다. 애플리케이션과 그 실행 환경을 하나의 패키지로 묶어서 어떤 환경에서든 동일하게 실행할 수 있게 해주는 도구입니다.

도커가 해결하는 문제들

  • "내 컴퓨터에서는 잘 돌아가는데..." 문제 해결
  • 개발 환경과 운영 환경의 차이로 인한 오류 방지
  • 빠른 배포와 확장성 제공
  • 시스템 자원의 효율적 사용

가상화 vs 컨테이너화

기존 가상화 (VM)

┌─────────────────────────────────────┐
│            Application              │
├─────────────────────────────────────┤
│             Binaries/Libs           │
├─────────────────────────────────────┤
│            Guest OS                 │
├─────────────────────────────────────┤
│            Hypervisor               │
├─────────────────────────────────────┤
│             Host OS                 │
├─────────────────────────────────────┤
│            Infrastructure           │
└─────────────────────────────────────┘

컨테이너화 (Docker)

┌─────────────────────────────────────┐
│            Application              │
├─────────────────────────────────────┤
│             Binaries/Libs           │
├─────────────────────────────────────┤
│            Docker Engine            │
├─────────────────────────────────────┤
│             Host OS                 │
├─────────────────────────────────────┤
│            Infrastructure           │
└─────────────────────────────────────┘

주요 차이점

구분가상화 (VM)컨테이너화 (Docker)
리소스 사용량높음 (각각 OS 필요)낮음 (OS 공유)
시작 시간느림 (분 단위)빠름 (초 단위)
이식성보통높음
보안강함보통

도커의 핵심 개념

1. 이미지 (Image)

  • 컨테이너를 만들기 위한 템플릿 또는 설계도
  • 읽기 전용(Read-only)
  • 여러 개의 레이어로 구성

2. 컨테이너 (Container)

  • 이미지를 실행한 인스턴스
  • 실제로 애플리케이션이 동작하는 환경
  • 읽기/쓰기 가능

3. Dockerfile

  • 이미지를 만들기 위한 설정 파일
  • 텍스트 파일로 이미지 생성 과정을 코드화

4. 레지스트리 (Registry)

  • 이미지를 저장하고 공유하는 저장소
  • Docker Hub가 가장 유명한 공개 레지스트리

도커 설치하기

Windows/Mac

  1. Docker Desktop 다운로드
  2. 설치 후 재시작
  3. 터미널에서 확인:
docker --version

Ubuntu

# 패키지 업데이트
sudo apt update

# 필요한 패키지 설치
sudo apt install apt-transport-https ca-certificates curl software-properties-common

# Docker 공식 GPG 키 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# Docker 레포지토리 추가
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# Docker 설치
sudo apt update
sudo apt install docker-ce

# 현재 사용자를 docker 그룹에 추가
sudo usermod -aG docker $USER

기본 명령어

이미지 관련 명령어

# 이미지 검색
docker search nginx

# 이미지 다운로드
docker pull nginx

# 로컬 이미지 목록 확인
docker images

# 이미지 삭제
docker rmi nginx

컨테이너 관련 명령어

# 컨테이너 실행
docker run nginx

# 백그라운드에서 실행
docker run -d nginx

# 포트 매핑하여 실행
docker run -d -p 8080:80 nginx

# 컨테이너 목록 확인 (실행 중)
docker ps

# 모든 컨테이너 목록 확인
docker ps -a

# 컨테이너 중지
docker stop [컨테이너ID]

# 컨테이너 삭제
docker rm [컨테이너ID]

# 컨테이너 로그 확인
docker logs [컨테이너ID]

# 컨테이너에 접속
docker exec -it [컨테이너ID] /bin/bash

유용한 옵션들

# 이름 지정하여 실행
docker run --name my-nginx -d nginx

# 볼륨 마운트
docker run -v /host/path:/container/path nginx

# 환경변수 설정
docker run -e ENV_VAR=value nginx

# 자동 재시작 설정
docker run --restart=always nginx

Dockerfile 작성하기

기본 구조

# 베이스 이미지 지정
FROM ubuntu:20.04

# 메타데이터 추가
LABEL maintainer="your-email@example.com"
LABEL description="My first Docker image"

# 작업 디렉토리 설정
WORKDIR /app

# 파일 복사
COPY . /app

# 패키지 설치
RUN apt-get update && apt-get install -y \
    python3 \
    python3-pip \
    && rm -rf /var/lib/apt/lists/*

# 의존성 설치
RUN pip3 install -r requirements.txt

# 포트 노출
EXPOSE 5000

# 환경변수 설정
ENV FLASK_APP=app.py

# 실행 명령어
CMD ["python3", "app.py"]

주요 명령어 설명

명령어설명예시
FROM베이스 이미지 지정FROM python:3.9
WORKDIR작업 디렉토리 설정WORKDIR /app
COPY파일/디렉토리 복사COPY . /app
RUN이미지 빌드 시 명령어 실행RUN pip install flask
CMD컨테이너 시작 시 실행될 명령어CMD ["python", "app.py"]
EXPOSE포트 노출EXPOSE 5000
ENV환경변수 설정ENV NODE_ENV=production

이미지 빌드

# Dockerfile이 있는 디렉토리에서
docker build -t my-app:1.0 .

# 특정 Dockerfile 지정
docker build -f Dockerfile.dev -t my-app:dev .

실습: 간단한 웹 애플리케이션 컨테이너화

1. Flask 애플리케이션 만들기

app.py:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return '<h1>Hello Docker! 🐳</h1>'

@app.route('/health')
def health():
    return {'status': 'healthy'}

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)

requirements.txt:

Flask==2.3.3

2. Dockerfile 작성

FROM python:3.9-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY app.py .

EXPOSE 5000

CMD ["python", "app.py"]

3. 이미지 빌드 및 실행

# 이미지 빌드
docker build -t flask-app .

# 컨테이너 실행
docker run -d -p 5000:5000 --name my-flask-app flask-app

# 브라우저에서 http://localhost:5000 접속

4. 확인 및 정리

# 로그 확인
docker logs my-flask-app

# 컨테이너 중지 및 삭제
docker stop my-flask-app
docker rm my-flask-app

# 이미지 삭제
docker rmi flask-app

Docker Compose (보너스)

여러 컨테이너를 한 번에 관리할 때 사용합니다.

docker-compose.yml:

version: '3.8'

services:
  web:
    build: .
    ports:
      - "5000:5000"
    environment:
      - FLASK_ENV=development
    volumes:
      - .:/app
    depends_on:
      - redis

  redis:
    image: redis:alpine
    ports:
      - "6379:6379"
# 서비스 시작
docker-compose up -d

# 서비스 중지
docker-compose down

도커 사용 시 주의사항

보안

  • 루트 권한으로 실행하지 말 것
  • 불필요한 패키지 설치 금지
  • 민감한 정보는 환경변수나 시크릿 사용

성능 최적화

  • 이미지 크기 최소화 (멀티스테이지 빌드 활용)
  • .dockerignore 파일 활용
  • 레이어 캐싱 활용

데이터 관리

  • 중요한 데이터는 볼륨 사용
  • 컨테이너는 언제든 삭제될 수 있음을 염두

참고 자료

0개의 댓글