728x90
반응형
SMALL
🚀 강의 목표
- Dockerfile의 기본 구조와 주요 명령어를 학습합니다.
- 커스텀 Docker 이미지를 생성하고 실행해 봅니다.
- 실제 사례를 통해 실무에서 Dockerfile을 활용하는 방법을 이해합니다.
- Docker 이미지 빌드 과정 중 발생할 수 있는 문제를 해결합니다.
🧐 Dockerfile이란?
1. Dockerfile의 정의
Dockerfile은 Docker 이미지를 생성하기 위한 스크립트 파일입니다.
이미지 빌드 과정에서 실행할 명령어와 설정을 순서대로 기술합니다.
Dockerfile은 레시피 📜, 이미지는 레시피로 만든 요리 🍲입니다.
2. Dockerfile이 필요한 이유
- 재사용성: 동일한 이미지를 언제든지 동일한 환경에서 재생성할 수 있습니다.
- 자동화: 명령어를 수동으로 입력하지 않아도 이미지를 생성합니다.
- 버전 관리: Dockerfile을 Git에 저장하여 빌드 프로세스를 추적할 수 있습니다.
3. Dockerfile의 기본 구조
Dockerfile은 주로 아래 명령어들로 구성됩니다:
명령어 역할
| FROM | 기반이 되는 이미지 지정 |
|---|---|
| RUN | 명령어 실행 (예: 패키지 설치) |
| COPY/ADD | 파일을 이미지에 복사 |
| CMD | 컨테이너 시작 시 실행할 명령어 (1개만 작성 가능) |
| ENTRYPOINT | 컨테이너 실행 시 실행할 명령어 (CMD와 함께 사용 가능) |
| WORKDIR | 작업 디렉토리 설정 |
| ENV | 환경 변수 설정 |
| EXPOSE | 컨테이너에서 노출할 포트 |
🖥️ Dockerfile 작성 및 커스텀 이미지 생성
1. 간단한 Python 웹 애플리케이션 이미지 생성
1.1 준비물
- Python과 Flask를 이용한 간단한 웹 애플리케이션 코드:
app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return "Hello, Docker!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
```
- **requirements.txt** (Flask 설치)
1.2 Dockerfile 작성
- Dockerfile (현재 디렉토리에 작성)
# Step 1: Python 3.9 이미지를 기반으로 함
FROM python:3.9-slim
# Step 2: 작업 디렉토리 설정
WORKDIR /app
# Step 3: 애플리케이션 파일 복사
COPY requirements.txt requirements.txt
COPY app.py app.py
# Step 4: 의존성 설치
RUN pip install --no-cache-dir -r requirements.txt
# Step 5: 컨테이너 실행 시 Flask 서버 시작
CMD ["python", "app.py"]
1.3 Docker 이미지 빌드
- 이미지 생성 명령어:
docker build -t flask-app .
- \-t flask-app: 생성될 이미지 이름과 태그 설정
- .: 현재 디렉토리에 있는 Dockerfile을 사용
1.4 컨테이너 실행
- 컨테이너 실행 명령어:
- -d: 백그라운드 모드로 실행
- -p 5000:5000: 호스트의 5000번 포트를 컨테이너의 5000번 포트와 매핑
- --name flask-container: 컨테이너 이름 지정
- docker run -d -p 5000:5000 --name flask-container flask-app
- 브라우저에서 **http://localhost:5000**으로 접속하여 "Hello, Docker!" 메시지가 출력되면 성공! 🎉
2. Docker 이미지 최적화
2.1 멀티스테이지 빌드
Docker 이미지를 최적화하기 위해 멀티스테이지 빌드를 활용할 수 있습니다.
- 최적화된 Dockerfile:
# Step 1: Build 단계
FROM python:3.9-slim AS builder
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
# Step 2: 최종 이미지
FROM python:3.9-slim
WORKDIR /app
COPY --from=builder /app /app
COPY app.py app.py
CMD \["python", "app.py"\]
- 효과: 불필요한 빌드 아티팩트 제거, 이미지 크기 감소.
3. Dockerfile 활용 사례
3.1 Node.js 애플리케이션 Dockerfile
Node.js를 기반으로 간단한 애플리케이션을 Docker에 배포하는 사례:
FROM node:14
WORKDIR /usr/src/app
COPY package\*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD \["npm", "start"\]
- 사용 사례: React/Vue 등 SPA 프로젝트, API 서버.
3.2 MySQL 컨테이너 구성
MySQL 컨테이너를 데이터 볼륨과 함께 실행:
docker run --name mysql-container -e MYSQL\_ROOT\_PASSWORD=root -d -p 3306:3306 mysql:5.7
- MySQL 환경 설정을 Dockerfile로 관리할 수도 있습니다.
❗ 실습 중 발생할 수 있는 오류와 해결 방법
1. 이미지 빌드 실패
- 문제: docker build 실행 시 "file not found" 오류 발생.
- 해결: Dockerfile과 필요한 파일(app.py, requirements.txt)이 동일 디렉토리에 있는지 확인하세요.
2. 컨테이너 실행 후 종료
- 문제: 컨테이너 실행 직후 종료됨.
- 원인: CMD 또는 ENTRYPOINT에 잘못된 명령어 설정.
- 해결: Dockerfile의 CMD 명령어를 확인하고, docker logs로 로그를 점검하세요.
3. 포트 충돌
- 문제: "port is already in use" 오류 발생.
- 해결: 다른 포트를 사용하거나, 기존 컨테이너를 중지:
docker stop <컨테이너_ID>
📝 정리 및 다음 강의 예고
1. 정리
- Dockerfile은 커스텀 이미지를 생성하기 위한 강력한 도구입니다.
- 기본 명령어(FROM, RUN, CMD, COPY, WORKDIR)를 통해 이미지를 손쉽게 빌드할 수 있습니다.
- 멀티스테이지 빌드를 활용하면 최적화된 이미지를 생성할 수 있습니다.
2. 다음 강의 예고
다음 강의에서는 Docker 네트워킹을 다룹니다.
- Docker 컨테이너 간 통신
- 사용자 정의 네트워크 생성
- 포트 포워딩과 외부 접속 설정
네트워크를 활용해 더 강력한 Docker 환경을 구성해 보세요! 😊
더 알아보기: Docker 공식 문서
728x90
반응형
LIST
'소프트웨어 개발 > Docker' 카테고리의 다른 글
| 🐳 Docker 강의 5강: Docker 볼륨과 데이터 관리 (0) | 2025.01.27 |
|---|---|
| 🐳 Docker 강의 6강: Docker Compose를 활용한 멀티 컨테이너 환경 구성 (0) | 2025.01.27 |
| 🐳 Docker 강의 4강: Docker 네트워킹 (0) | 2025.01.27 |
| 🐳 Docker 강의 2강: Docker 이미지와 컨테이너 기본 사용법 (0) | 2025.01.27 |
| 🐳 Docker 강의 1강: Docker 기본 개념과 설치 (0) | 2025.01.27 |