한 줄로 배포하자! Docker & Compose
2025. 4. 23. 14:01
728x90

개발자라면 꼭 알아야 할 Docker, Dockerfile, Docker Compose 완전 정복

Docker는 개발, 배포, 운영의 일관성을 보장해주는 강력한 도구입니다.
이 글에서는 Docker의 핵심 개념부터 Dockerfile 작성법, Docker Compose로 여러 컨테이너를 관리하는 방법까지
예제와 함께 쉽게 정리해보았습니다.


1. Docker란?

Docker는 애플리케이션을 컨테이너라는 독립된 환경에 패키징하여
환경 간 차이를 줄이고, 개발과 배포를 더 쉽게 만들어주는 플랫폼입니다.

1.1 Docker 컨테이너

  • 컨테이너는 애플리케이션 실행에 필요한 모든 요소(코드, 라이브러리, 설정 등)를 포함한 패키지입니다.
  • 가상 머신보다 가볍고 빠르며, 격리된 환경에서 실행됩니다.
  • 동일한 컨테이너 이미지를 어디서든 동일하게 실행할 수 있습니다.

1.2 Docker 이미지

  • 컨테이너를 생성하기 위한 설정 템플릿입니다.
  • 실행 시 이미지를 바탕으로 컨테이너가 생성됩니다.
  • 이미지는 Docker Hub에서 받을 수도 있고, 직접 Dockerfile로 빌드할 수도 있습니다.

2. Dockerfile이란?

Dockerfile은 Docker 이미지 생성을 위한 설정 스크립트입니다.
어떤 환경에서 어떤 명령어를 실행할지 정의할 수 있습니다.

주요 명령어 설명

명령어 설명
FROM 베이스 이미지 설정
WORKDIR 작업 디렉토리 설정
COPY 로컬 파일을 이미지로 복사
RUN 명령어 실행 (예: 설치 등)
CMD 컨테이너 실행 시 기본 명령어
EXPOSE 컨테이너가 사용하는 포트 정의

예시 Dockerfile

FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
CMD ["npm", "run", "start"]
EXPOSE 3000

3. Docker Compose란?

여러 개의 컨테이너를 동시에 실행하고 관리할 수 있게 해주는 도구입니다.
docker-compose.yml 파일을 사용해 설정합니다.

기본 예시

version: '3'
services:
  app:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db

  db:
    image: postgres:13
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: mydb
    ports:
      - "5432:5432"

4. 명령어 정리

명령어 설명
docker build -t my-app . Dockerfile로 이미지 빌드
docker run my-app 컨테이너 실행
docker compose up --build 여러 서비스 동시에 실행
docker compose down 모든 서비스 종료 및 삭제
docker compose ps 현재 실행 중인 서비스 확인

5. 실제 예시: Node.js + DB 조합

version: '3'
services:
  auth-service:
    build: ./auth-service
    ports:
      - "3000:3000"
    depends_on:
      - db

  db:
    image: postgres:13
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: authdb

이처럼 애플리케이션과 데이터베이스를 동시에 실행할 수 있습니다.


6. 결론

도구 역할
Docker 컨테이너 기반 실행 환경 제공
Dockerfile 애플리케이션 실행 환경 정의
Docker Compose 여러 컨테이너를 동시에 구성하고 관리

Docker를 활용하면 환경 차이로 인한 문제를 최소화하고,
개발 → 테스트 → 배포까지 전 과정을 자동화 및 최적화할 수 있습니다.


반응형
JeongPark
JeongPark