반응형
🧱 Dockerfile vs docker-compose 비교
항목 | Dockerfile | docker-compose |
목적 | 단일 애플리케이션의 이미지를 정의 | 여러 컨테이너(서비스)를 통합 실행 및 관리 |
사용 방식 | docker build → docker run | docker-compose up, down으로 전체 서비스 컨트롤 |
주요 기능 | OS, 종속성, 코드 복사, CMD 설정 | 여러 컨테이너 연결, 네트워크, 볼륨, 환경 변수 설정 |
장점 | 이식성, 이미지 버전관리, CI/CD 연동 | 마이크로서비스 또는 개발환경 전반 구성 자동화 |
단점 | 네트워크, DB, 연동 구성은 따로 필요 | 복잡한 빌드 옵션은 Dockerfile에 위임 필요 |
🐳 예제: Spring Boot + PostgreSQL
📁 폴더 구조
spring-boot-app/
├── Dockerfile
├── docker-compose.yml
├── target/myapp.jar
└── application.yml
📌 Dockerfile (Spring Boot)
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY target/myapp.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
📌 docker-compose.yml
version: '3.8'
services:
app:
build: .
ports:
- "8080:8080"
depends_on:
- db
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/mydb
SPRING_DATASOURCE_USERNAME: user
SPRING_DATASOURCE_PASSWORD: pass
db:
image: postgres:15
environment:
POSTGRES_DB: mydb
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
🟣 예제: NestJS + Redis
📁 폴더 구조
nestjs-app/
├── Dockerfile
├── docker-compose.yml
├── src/
└── package.json
📌 Dockerfile (NestJS)
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["npm", "run", "start:prod"]
📌 docker-compose.yml
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
depends_on:
- redis
environment:
REDIS_HOST: redis
REDIS_PORT: 6379
redis:
image: redis:7
🔧 예제: Kotlin + MySQL
dockerfile
# Dockerfile (Ktor)
FROM openjdk:17
COPY build/libs/app.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
# docker-compose.yml
version: '3.8'
services:
app:
build: .
ports:
- "8080:8080"
depends_on:
- mysql
environment:
DB_HOST: mysql
DB_USER: user
DB_PASS: pass
mysql:
image: mysql:8
environment:
MYSQL_DATABASE: mydb
MYSQL_ROOT_PASSWORD: pass
✅ 정리 요약
용도 | Dockerfile | docker-compose |
개별 이미지 정의 | ✅ | ❌ (Dockerfile 필요) |
멀티 컨테이너 구성 | ❌ (직접 명령어로 연결) | ✅ 여러 서비스 정의 및 실행 자동화 |
CI/CD 활용도 | 고정된 이미지 빌드 | dev/test 환경 구성, 테스트 병렬화에 유리 |
대표 명령어 | docker build, docker run | docker-compose up -d, logs, down |
반응형
'CICD' 카테고리의 다른 글
실제 운영환경에 가까운 nginx.conf 예제 (0) | 2025.04.02 |
---|---|
Nginx 지시자(directive) 기초 분석 예제!! (0) | 2025.04.02 |
왜 dev/prod 환경을 분리해야 할까? (0) | 2025.04.02 |
jenkins 설치(우분투) (0) | 2022.08.16 |