컨테이너 기반의 애플리케이션 실행 환경입니다.
Dockerfile로부터 생성# Python 앱 예시
FROM python:3.10
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD ["python", "main.py"]
💡 주의: 이미지 수정 시에는 항상
docker build로 다시 빌드해야 적용됩니다.
docker run -d -p 8080:80 nginx
💡 주의: 컨테이너는 일회성입니다. 파일을 저장하려면
볼륨설정이 필요합니다.
FROM node:18
WORKDIR /app
COPY . .
RUN npm install
CMD ["npm", "start"]
💡 주의: 각 명령어는 레이어가 되므로, 변경이 잦은 부분은 아래쪽에 위치시켜야 효율적입니다.
docker run -v $(pwd):/app my_image
💡 주의: 컨테이너가 종료되어도 데이터는 유지됩니다. 데이터베이스 컨테이너에 필수!
| 명령어 | 설명 |
|---|---|
docker build -t name . | 이미지 빌드 |
docker images | 이미지 목록 보기 |
docker run -d -p 3000:3000 name | 컨테이너 실행 |
docker ps -a | 모든 컨테이너 목록 |
docker exec -it 컨테이너명 bash | 실행 중인 컨테이너에 접속 |
docker stop/start/rm | 컨테이너 정지/시작/삭제 |
여러 개의 컨테이너를 하나의 설정 파일로 정의하고 관리할 수 있게 해주는 도구입니다.
docker-compose.yml 파일 하나로, 여러 서비스(웹, DB 등)를 동시에 관리할 수 있습니다.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같은 유틸 사용 추천
| 문제 상황 | 해결 방법 |
|---|---|
| 컨테이너 안에서 코드 수정이 반영 안 됨 | 볼륨 마운트 확인 (volumes) |
| 포트 충돌 | docker ps로 확인하고 포트 수정 |
| 이미지가 너무 커짐 | .dockerignore로 불필요한 파일 제외 |
| DB 컨테이너 재시작 시 데이터 유실 | volumes 설정 필수 |
- Docker = 환경 통째로 격리해서 실행
- 컨테이너 = 이미지 기반으로 생성된 실행 단위
- Dockerfile = 이미지 정의 스크립트
- Compose = 여러 컨테이너를 코드로 관리
개발 환경부터 배포까지 일관된 환경을 보장하는 강력한 도구입니다. 숙련되면, 복잡한 프로젝트도 로컬에서 한 줄로 돌릴 수 있습니다.