Dockerfile은 Docker 이미지를 빌드하기 위한 설명서 역할을 하는 텍스트 파일입니다. 이 파일에는 Docker가 이미지를 생성할 때 수행해야 하는 명령과 설정이 단계적으로 작성되어 있습니다. Dockerfile을 기반으로 Docker 이미지를 생성하면 컨테이너 실행에 필요한 환경이 포함된 상태로 배포할 수 있습니다.
Dockerfile의 주요 개념
1. Docker 이미지
- Dockerfile은 Docker 이미지를 생성하기 위한 템플릿입니다.
- Docker 이미지는 컨테이너 실행에 필요한 파일, 의존성, 애플리케이션 코드 등을 포함합니다.
2. 빌드 과정
- Dockerfile에 정의된 명령어를 기반으로
docker build
명령어를 실행하면, 해당 명령어 순서대로 단계를 수행하여 최종 이미지를 생성합니다.
Dockerfile의 기본 구조
Dockerfile은 여러 명령어로 구성됩니다. 각 명령어는 이미지 빌드의 특정 단계를 정의합니다.
1. FROM
- 기반 이미지를 지정합니다.
- 예: Python, Node.js, Ubuntu 등 기존 Docker 이미지를 기반으로 빌드.
FROM ubuntu:latest
2. RUN
- 이미지 빌드 시 실행할 명령어를 정의합니다.
- 예: 필요한 패키지 설치.
RUN apt-get update && apt-get install -y curl
3. COPY 또는 ADD
- 호스트 시스템에서 Docker 컨테이너로 파일을 복사합니다.
COPY app.py /app/app.py
4. WORKDIR
- 컨테이너 내에서 작업 디렉토리를 설정합니다.
WORKDIR /app
5. CMD
- 컨테이너가 실행될 때 기본으로 실행할 명령어를 지정합니다.
- CMD는 단일 명령만 정의할 수 있습니다.
CMD ["python3", "app.py"]
6. EXPOSE
- 컨테이너가 사용할 네트워크 포트를 지정합니다.
EXPOSE 8080
7. ENTRYPOINT
- CMD와 유사하지만 고정적으로 실행할 명령을 지정합니다.
ENTRYPOINT ["python3"] CMD ["app.py"]
Dockerfile 예제
Python 웹 애플리케이션 Dockerfile
# Step 1: 베이스 이미지 설정
FROM python:3.9-slim
# Step 2: 작업 디렉토리 설정
WORKDIR /app
# Step 3: 필요한 파일 복사
COPY requirements.txt .
# Step 4: 의존성 설치
RUN pip install --no-cache-dir -r requirements.txt
# Step 5: 애플리케이션 파일 복사
COPY . .
# Step 6: 네트워크 포트 노출
EXPOSE 8080
# Step 7: 애플리케이션 실행
CMD ["python", "app.py"]
빌드 및 실행
Dockerfile이 있는 디렉토리에서 이미지를 빌드:
docker build -t my-python-app .
컨테이너 실행:
docker run -p 8080:8080 my-python-app
Dockerfile의 장점
- 자동화:
- 이미지를 생성하는 과정을 자동화하여, 동일한 환경을 반복적으로 생성 가능.
- 버전 관리:
- Dockerfile을 코드와 함께 저장소에 저장하여, 애플리케이션과 환경 설정을 함께 버전 관리 가능.
- 이식성:
- Docker 이미지는 특정 환경에 종속되지 않으므로, 어디서나 동일한 설정으로 실행 가능.
Dockerfile의 단점
- 복잡한 설정:
- 많은 의존성과 커스터마이징이 필요한 경우, Dockerfile이 복잡해질 수 있음.
- 이미지 크기:
- 불필요한 파일이 포함되거나, 최적화되지 않으면 이미지 크기가 커질 수 있음.
결론
Dockerfile은 Docker 이미지를 정의하고 생성하는 데 핵심적인 도구입니다. 개발자는 Dockerfile을 통해 필요한 애플리케이션 환경을 정확히 정의하고, 빌드 및 배포 과정을 단순화할 수 있습니다. 😊
'Docker' 카테고리의 다른 글
[/tmp] 리눅스의 템프 디렉토리(Temporary Directory) (0) | 2024.12.03 |
---|---|
리눅스 시그널 (0) | 2024.12.03 |
Alpine (0) | 2024.12.03 |
Docker Redis (0) | 2024.12.03 |
[Mac] AWS EC2 Docker 설치 및 Docker 권한 추가 (0) | 2024.12.03 |