쪼꼬만 지식 가게

Tiny Wisdom Saves You!

Tiny Wisdom saves You!

데이터/IT 조금 전문적으로

도커(Docker) 이미지 생성 방법

쪼꼬만 아저씨 2025. 1. 7. 16:46
반응형

 

 

도커 이미지 생성 방법

1. 도커 이미지란?

도커 이미지는 컨테이너를 실행하기 위한 읽기 전용 템플릿입니다. 애플리케이션, 라이브러리, 설정 파일, 실행 환경 등을 포함하며, 이를 기반으로 컨테이너를 생성합니다.

이미지 구조:

  • 레이어(layer) 기반: 여러 개의 레이어가 쌓여 하나의 이미지가 만들어짐.
  • 변경 사항이 생기면 새로운 레이어가 추가됨.

2. 도커 이미지를 생성하는 방법

2.1. 기존 이미지 사용

Docker Hub 또는 Private Registry에서 이미지를 다운로드하여 사용.

docker pull <이미지 이름>:<태그>

예: docker pull python:3.9

2.2. Dockerfile을 이용한 이미지 생성

Dockerfile은 도커 이미지를 생성하기 위한 설정 파일입니다. 이미지 생성 과정을 자동화하여 재사용성과 유지 보수성을 높임.

3. Dockerfile 작성법

3.1. 기본 명령어

  • FROM: 베이스 이미지 지정. FROM python:3.9
  • WORKDIR: 작업 디렉토리 설정. WORKDIR /app
  • COPY: 파일 복사. COPY . /app
  • RUN: 명령 실행 (이미지 빌드 시 실행됨). RUN pip install -r requirements.txt
  • CMD: 컨테이너 시작 시 실행할 명령 설정. CMD ["python", "app.py"]
  • EXPOSE: 컨테이너에서 열릴 포트를 지정. EXPOSE 5000

3.2. Dockerfile 예제


FROM python:3.9
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD ["python", "app.py"]

4. 이미지 빌드 명령어

명령어: docker build

사용법:


docker build -t <이미지 이름>:<태그> <Dockerfile 경로>

예: docker build -t myapp:1.0 .

5. 이미지 태그 관리

태그는 이미지를 식별하는 데 사용됩니다.

  • 기본 형식: <이미지 이름>:<태그>
  • 예: myapp:1.0
  • 태그 변경:
    
    docker tag <기존 이미지> <새로운 이미지 이름>:<태그>
    

6. 이미지 최적화 팁

  1. 멀티스테이지 빌드 사용:
    
    FROM node:14 AS builder
    WORKDIR /app
    COPY . .
    RUN npm install && npm run build
    
    FROM nginx:alpine
    COPY --from=builder /app/build /usr/share/nginx/html
    
  2. 불필요한 파일 제외: .dockerignore 파일 작성.
    
    node_modules
    .git
    *.log
    

7. 실습 예제

7.1. Flask 애플리케이션 이미지 생성

1. 프로젝트 구조:


myapp/
├── app.py
├── requirements.txt
└── Dockerfile

2. Dockerfile 작성:


FROM python:3.9
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD ["python", "app.py"]

3. 이미지 빌드: docker build -t flask-app:1.0 .

4. 컨테이너 실행: docker run -p 5000:5000 flask-app:1.0

퀴즈

  1. 도커 이미지의 레이어 구조에 대해 설명하세요.
  2. CMDRUN의 차이점을 설명하세요.
  3. 다음 Dockerfile에서 잘못된 점은 무엇인가요?
    
    FROM ubuntu
    COPY . /app
    RUN pip install flask
    CMD python app.py
    
  4. 멀티스테이지 빌드의 주요 이점은 무엇인가요?
  5. .dockerignore 파일은 무엇을 위한 것이며, 작성 시 주의할 점은 무엇인가요?
반응형