CS | Docker

성수당·2025년 8월 7일

나혼자 CS

목록 보기
15/18
post-thumbnail

🐳 Docker란?

Docker는 컨테이너 기반의 오픈소스 가상화 플랫폼이다. 쉽게 말해, 애플리케이션을 실행하는 데 필요한 모든 요소(코드, 라이브러리, 환경설정 등)를 하나의 '패키지'로 묶어서 컨테이너(Container) 라는 독립된 환경에서 실행할 수 있게 해주는 도구다.

🥔 가상머신과 컨테이너의 차이

항목가상머신(VM)컨테이너(Docker)
구조하이퍼바이저 위에 전체 OS 설치호스트 OS 위에서 격리된 프로세스 실행
부팅 속도수 분 이상수 초 이내
리소스 사용무겁고 많은 리소스 사용가볍고 효율적
용도다양한 OS 환경이 필요한 경우빠른 배포 및 테스트 환경 구성

| Docker는 개인 환경에서 사용하는 기존 OS를 매핑해준다.

🥔 Docker의 핵심 개념

✅ 이미지(Image)

컨테이너를 실행하기 위한 '설계도'.
우분투, 파이썬, Node.js 등 다양한 환경이 이미지로 제공된다.

✅ 컨테이너(Container)

이미지를 기반으로 실행된 인스턴스.
이미지가 설계도라면, 컨테이너는 실제 동작하는 집이다.

✅ Dockerfile

이미지를 만들기 위한 명세서.
"어떤 기반 이미지로 시작해서, 뭘 설치하고, 뭘 실행할 건지"를 적는다.

✅ Docker Hub

공식 이미지나 사용자 정의 이미지를 공유하는 저장소.
https://hub.docker.com에서 다양한 이미지 검색 가능.

✅ 볼륨(Volume)

컨테이너가 꺼져도 데이터가 유지되도록 하는 방법.
DB 데이터를 저장할 때 자주 사용한다.

🥔 Docker의 기본 명령어

# 버전 확인
docker --version

# 이미지 검색
docker search python

# 이미지 다운로드
docker pull python:3.10

# 컨테이너 실행 (터미널 접속 포함)
docker run -it python:3.10 bash

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

# 전체 컨테이너 목록 (중지된 것도 포함)
docker ps -a

# 컨테이너 정지
docker stop <컨테이너ID>

# 컨테이너 삭제
docker rm <컨테이너ID>

# 이미지 삭제
docker rmi <이미지ID>

🥔 Dockerfile 예시

간단한 Python Flask 앱을 Docker로 실행한다고 가정해보자.

# Dockerfile
# 1. Python 3.10 이미지를 기반으로
FROM python:3.10

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

# 3. 파일 복사
COPY . .

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

# 5. 애플리케이션 실행
CMD ["python", "app.py"]
# bash
# 빌드
docker build -t myflaskapp .

# 실행
docker run -p 5000:5000 myflaskapp

🥔 실전 예제: Flask + Redis 연동 (Docker Compose)

두 개 이상의 컨테이너를 한 번에 관리하고 싶을 땐 docker-compose를 사용한다.

# yaml
# docker-compose.yml
version: "3"
services:
  web:
    build: .
    ports:
      - "5000:5000"
    depends_on:
      - redis
  redis:
    image: "redis:alpine"
# bash
docker-compose up --build

🥔 Docker의 장단점 정리

✅ 장점

  • 어디서든 동일한 환경 제공 (OS 상관 없음)

  • 빠른 배포 및 테스트 가능

  • CI/CD와도 잘 어울림

  • 경량화된 환경

❌ 단점

  • 초반 학습 곡선 존재

  • 네트워크, 스토리지 등 복잡한 구성은 익숙해져야 함

  • GUI 환경과는 궁합이 좋지 않음

profile
말하는 감자🥔

0개의 댓글