Docker란?

김덕진·2025년 6월 7일

Infra

목록 보기
1/3

컨테이너 기반의 애플리케이션 실행 환경입니다.

  • 개발한 앱을 어디서든 동일하게 실행할 수 있도록 돕는 플랫폼입니다.
  • 애플리케이션, 라이브러리, 설정 등을 하나의 이미지(Image)로 묶어서 컨테이너(Container)로 실행합니다.

📦 1. Docker의 핵심 개념 요약

1. 이미지(Image)

  • 컨테이너 실행에 필요한 파일과 설정의 스냅샷
  • 보통 Dockerfile로부터 생성
# Python 앱 예시
FROM python:3.10
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD ["python", "main.py"]

💡 주의: 이미지 수정 시에는 항상 docker build로 다시 빌드해야 적용됩니다.


2. 컨테이너(Container)

  • 이미지로부터 실행되는 격리된 애플리케이션 실행 인스턴스
  • 실제 애플리케이션이 실행되는 "가상 환경"
docker run -d -p 8080:80 nginx

💡 주의: 컨테이너는 일회성입니다. 파일을 저장하려면 볼륨 설정이 필요합니다.


3. Dockerfile

  • 이미지를 자동으로 만들기 위한 스크립트
  • 명령어는 위에서 아래로 순차적으로 실행됨
FROM node:18
WORKDIR /app
COPY . .
RUN npm install
CMD ["npm", "start"]

💡 주의: 각 명령어는 레이어가 되므로, 변경이 잦은 부분은 아래쪽에 위치시켜야 효율적입니다.


4. 볼륨(Volumes)

  • 호스트와 컨테이너 사이에서 데이터를 공유할 수 있는 영역
docker run -v $(pwd):/app my_image

💡 주의: 컨테이너가 종료되어도 데이터는 유지됩니다. 데이터베이스 컨테이너에 필수!


🔄 2. Docker 주요 명령어

명령어설명
docker build -t name .이미지 빌드
docker images이미지 목록 보기
docker run -d -p 3000:3000 name컨테이너 실행
docker ps -a모든 컨테이너 목록
docker exec -it 컨테이너명 bash실행 중인 컨테이너에 접속
docker stop/start/rm컨테이너 정지/시작/삭제

🛠️ 3. Docker Compose란?

여러 개의 컨테이너를 하나의 설정 파일로 정의하고 관리할 수 있게 해주는 도구입니다.

  • docker-compose.yml 파일 하나로, 여러 서비스(웹, DB 등)를 동시에 관리할 수 있습니다.
  • 개발, 테스트 환경을 코드로 구성하여, 쉽게 배포 및 공유할 수 있습니다.

🔧 4. docker-compose.yml 예시

version: '3.8'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    volumes:
      - .:/app
    depends_on:
      - db

  db:
    image: postgres:14
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: mydb
    volumes:
      - dbdata:/var/lib/postgresql/data

volumes:
  dbdata:

📝 구성 설명

  • web: Node.js 앱 빌드 + 포트 + 소스 연동
  • db: PostgreSQL 데이터베이스 서비스
  • volumes: 데이터 유지
# 실행
docker-compose up --build

# 종료
docker-compose down

💡 주의: depends_on은 컨테이너 순서만 보장하며, DB가 "완전히 시작됨"을 보장하지는 않음 → wait-for-it 같은 유틸 사용 추천


📌 5. Docker Compose의 장점

  • 복잡한 환경 구성도 한 줄 명령어로 실행 가능
  • 모든 설정을 코드화 → 버전 관리 가능
  • 팀원 간 환경 공유 및 CI/CD 연동에 적합

⚠️ 실전에서 자주 겪는 문제와 팁

문제 상황해결 방법
컨테이너 안에서 코드 수정이 반영 안 됨볼륨 마운트 확인 (volumes)
포트 충돌docker ps로 확인하고 포트 수정
이미지가 너무 커짐.dockerignore로 불필요한 파일 제외
DB 컨테이너 재시작 시 데이터 유실volumes 설정 필수

🚀 마무리 요약

- Docker = 환경 통째로 격리해서 실행
- 컨테이너 = 이미지 기반으로 생성된 실행 단위
- Dockerfile = 이미지 정의 스크립트
- Compose = 여러 컨테이너를 코드로 관리

개발 환경부터 배포까지 일관된 환경을 보장하는 강력한 도구입니다. 숙련되면, 복잡한 프로젝트도 로컬에서 한 줄로 돌릴 수 있습니다.

profile
FrontEnd Developer

0개의 댓글