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를 활용하면 환경 차이로 인한 문제를 최소화하고,
개발 → 테스트 → 배포까지 전 과정을 자동화 및 최적화할 수 있습니다.
반응형