일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 기초강의
- 인공지능
- 장고 기초 강의
- 장고 튜토리얼
- 파이썬
- ADP
- 예제프로젝트
- 개발언어
- 개발자취업
- 장고
- 파이썬강의
- docker
- 개발자
- 파이썬 장고
- flask
- 쇼핑몰예제
- 웹개발
- C언어
- Python
- c++
- 프로그래밍
- 플라스크
- 에어플로우 기초강의
- Django
- c
- airflow
- 도커
- mlops
- cpp
- 도커 컴포즈
- Today
- Total
TITEDIOS Dev Note
[Docker]#13 Dockerfile 작성법 - 나만의 도커 이미지 만들기 본문

Dockerfile은 Docker 이미지를 생성하기 위한 스크립트 파일로, 일관된 환경을 제공하며 애플리케이션 배포를 간소화합니다. 이번 포스트에서는 Dockerfile의 기본 구조와 각 명령어의 사용법을 자세히 설명하겠습니다.
TL;DR
Dockerfile은 Docker 이미지를 생성하는 스크립트로, FROM, RUN, COPY, CMD 등의 명령어를 사용하여 작성합니다. 이를 통해 애플리케이션과 그 종속성 즉, 파이썬 패키지나 자바 모듈 등을 포함한 이미지를 빌드할 수 있습니다.
1. Dockerfile이란?
Dockerfile은 Docker 이미지를 빌드하기 위한 텍스트 파일입니다. 이 파일에는 이미지를 생성하는 데 필요한 명령어들이 포함되어 있으며, 이를 통해 애플리케이션과 그 환경을 정의할 수 있습니다.
2. Dockerfile의 기본 구조
Dockerfile은 일련의 명령어로 구성되어 있으며, 각 명령어는 이미지 빌드 과정에서 특정 작업을 수행합니다.
기본적인 작성법은 다음과 같습니다:
# Comment
INSTRUCTION arguments
일반적인 Dockerfile은 다음과 같은 기본 구조를 가지고 작성합니다:
# 베이스 이미지 설정
FROM 이미지명:태그
# 이미지 메타데이터 설정
LABEL key="value"
# 필요한 패키지 설치
RUN apt-get update && apt-get install -y 패키지명
# 작업 디렉토리 설정
WORKDIR /app
# 애플리케이션 파일 복사
COPY 소스경로 대상경로
# 애플리케이션 실행 명령 설정
CMD ["실행파일", "매개변수"]
3. Dockerfile 명령어
Dockerfile 내부에서 각각의 명령을 수행합니다. 사용되는 명령어가 조금 많을 수 있습니다. 한번 스윽 보시고 어떤 기능을 하는지만 눈으로 익혀두신 다음 실제 작업이나 업무를 하실 때 사전처럼 보시는게 더 편하실 수도 있습니다.
FROM
베이스 이미지를 설정합니다. 모든 Dockerfile은 반드시 FROM 명령어로 시작해야 합니다.
FROM ubuntu:20.04
LABEL
이미지에 메타데이터를 추가합니다.
LABEL maintainer="your-email@example.com"
RUN
이미지 빌드 과정에서 명령어를 실행합니다. 일반적으로 패키지 설치에 사용됩니다.
RUN apt-get update && apt-get install -y python3
COPY
파일을 호스트 시스템에서 이미지로 복사합니다. 현재 작업한 결과를 -> 컨테이너로 복사하는 개념입니다.
COPY . /app
ADD
로컬이나 원격의 디렉토리를 추가합니다. 파일을 복사하고, URL에서 파일을 다운로드하거나 압축을 풀 수 있습니다.
ADD https://example.com/file.tar.gz /app
WORKDIR
컨테이너 내부의 작업 디렉토리를 설정합니다.
WORKDIR /app
CMD
컨테이너가 시작될 때 실행할 기본 명령어를 설정합니다. Dockerfile에서 하나만 사용할 수 있습니다.
CMD ["python3", "app.py"]
ENTRYPOINT
컨테이너가 시작될 때 실행할 명령어를 설정합니다. CMD와 함께 사용하여 기본 인수를 설정할 수 있습니다.
ENTRYPOINT ["python3"]
CMD ["app.py"]
ENV
환경 변수를 설정합니다. 데이터베이스 등의 아이디, 패스워드 등 환경 변수를 통해 동적으로 제어할 수 있습니다.
ENV APP_ENV=production
EXPOSE
컨테이너가 수신할 포트를 지정합니다. 아래 예제는 컨테이너의 8080 포트를 오픈한다는 의미입니다.
EXPOSE 8080
VOLUME
컨테이너에서 마운트할 볼륨을 설정합니다.
VOLUME ["/data"]
4. Dockerfile 예제
다음은 Python 애플리케이션을 위한 Dockerfile 예제입니다:
# 베이스 이미지 설정
FROM python:3.8-slim
# 작업 디렉토리 설정
WORKDIR /app
# 종속성 파일 복사 및 설치
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
# 애플리케이션 파일 복사
# COPY {현재 파일 디렉토리} {컨테이너의 working 디렉토리}
COPY . .
# 애플리케이션 실행
CMD ["python", "app.py"]
5. Dockerfile 작성 모범 사례
- 이미지 크기 최소화: 불필요한 파일과 패키지를 제거하여 이미지 크기를 줄입니다.
- 캐싱 활용: Docker는 이미지 빌드 시 캐싱을 활용합니다. 자주 변경되지 않는 명령어를 상단에 배치하여 캐싱 효율을 높입니다.
- 다단계 빌드: 빌드 단계와 런타임 단계를 분리하여 이미지 크기를 줄이고 보안을 강화합니다.
6. 결론
Dockerfile을 작성하면 일관된 환경에서 애플리케이션을 빌드하고 배포할 수 있습니다. 이번 포스트에서는 Dockerfile의 기본 구조와 주요 명령어에 대해 알아보았습니다. 이를 통해 자기만의 Docker 이미지를 생성하고 애플리케이션 개발과 배포를 간소화해 보세요. 실제로 해보시면 생각보다 동작이 유연하고 재미있습니다.
도움이 되셨다면 공감 부탁드리겠습니다. 여러분의 공감이 정말 큰 힘이 됩니다.
감사합니다!
'Docker' 카테고리의 다른 글
[Docker]#15 Docker network - 도커 네트워크 기초 강의 (1) | 2024.08.27 |
---|---|
[Docker]#14 Dockerfile - 이미지 빌드 및 최적화 방법 (1) | 2024.08.26 |
[Docker]#12 Docker Hub - 공개 Docker 이미지 레지스트리 가이드 (1) | 2024.08.22 |
[Docker]#11 Docker 기본 명령어 - rm, attach, logs (1) | 2024.08.21 |
[Docker]#10 Docker 기본 명령어 - image (2) | 2024.08.20 |