Docker 이미지 생성 및 커스터마이징 가이드

DockerBeginner
지금 연습하기

소개

이 단계별 가이드는 Docker 이미지를 대화형으로 실행하고, Docker 컨테이너를 탐색 및 조작하며, Docker 환경을 효과적으로 관리하는 방법을 안내합니다. 이 튜토리얼을 마치면 Docker 의 대화형 모드를 활용하여 컨테이너 기반 워크플로우를 간소화하는 방법에 대한 확실한 이해를 얻게 될 것입니다.

Docker 이미지 기본

Docker 이미지 이해

Docker 이미지는 컨테이너 기술의 기본 요소로, 사전 구성된 운영 체제와 애플리케이션 환경을 담고 있는 읽기 전용 템플릿입니다. 이러한 이미지는 컨테이너의 전체 파일 시스템을 정의하는 여러 레이어로 구성됩니다.

이미지 구조 및 레이어

graph TD
    A[베이스 이미지] --> B[애플리케이션 레이어]
    A --> C[설정 레이어]
    A --> D[의존성 레이어]

Docker 이미지의 주요 특징은 다음과 같습니다.

레이어 유형 설명 예시
베이스 이미지 기본 운영 체제 레이어 Ubuntu 22.04
의존성 레이어 필요한 라이브러리 및 패키지 Python 런타임
애플리케이션 레이어 실제 애플리케이션 코드 웹 애플리케이션

Docker 이미지 생성

Python 애플리케이션을 위한 Docker 이미지 생성 실제 예제는 다음과 같습니다.

## 프로젝트를 위한 새 디렉토리를 생성
mkdir python-app
cd python-app

## Dockerfile 생성
touch Dockerfile

## 기본 구성으로 Dockerfile 편집
echo "FROM ubuntu:22.04
RUN apt-get update && apt-get install -y python3 python3-pip
WORKDIR /app
COPY . /app
RUN pip3 install -r requirements.txt
CMD ['python3', 'app.py']" > Dockerfile

## Docker 이미지 빌드
docker build -t my-python-app .

이 Dockerfile 은 이미지 생성의 주요 단계를 보여줍니다.

  • 베이스 이미지 (Ubuntu 22.04) 선택
  • 시스템 의존성 설치
  • 작업 디렉토리 설정
  • 애플리케이션 파일 복사
  • 애플리케이션 요구사항 설치
  • 기본 명령 정의

이미지 관리 명령어

## 로컬 이미지 목록
docker images

## Docker Hub에서 이미지 가져오기
docker pull ubuntu:22.04

## 이미지 삭제
docker rmi my-python-app

Docker 이미지는 다양한 컴퓨팅 플랫폼에서 일관되고 재현 가능한 환경을 제공하여 애플리케이션 배포 및 확장을 효율적으로 지원합니다.

Docker 컨테이너 관리

컨테이너 실행 기본

Docker 컨테이너는 이미지의 실행 인스턴스를 나타내며, 애플리케이션 실행을 위한 격리된 환경을 제공합니다. 컨테이너 관리를 이해하는 것은 효과적인 배포 및 확장에 필수적입니다.

컨테이너 수명주기 상태

stateDiagram-v2
    [*] --> Created
    Created --> Running
    Running --> Paused
    Paused --> Running
    Running --> Stopped
    Stopped --> Removed
    Removed --> [*]

기본 컨테이너 관리 명령어

명령어 기능 예시
docker run 컨테이너 생성 및 시작 docker run ubuntu:22.04
docker ps 실행 중인 컨테이너 목록 docker ps -a
docker start 중지된 컨테이너 시작 docker start container_id
docker stop 실행 중인 컨테이너 중지 docker stop container_id
docker rm 컨테이너 제거 docker rm container_id

실제 컨테이너 실행 시나리오

대화형 컨테이너 모드

## Ubuntu 컨테이너를 대화형으로 실행
docker run -it ubuntu:22.04 /bin/bash

## 컨테이너 내에서 패키지 설치
apt-get update
apt-get install python3

## 컨테이너 종료
exit

백그라운드 컨테이너 실행

## 분리된 모드로 웹 서버 실행
docker run -d -p 8080:80 nginx

## 실행 중인 컨테이너 확인
docker ps

컨테이너 리소스 관리

## 컨테이너 리소스 제한
docker run -d \
  --cpus="1" \
  --memory="512m" \
  nginx

컨테이너 네트워킹

graph LR
    A[Docker 호스트] --> B[브리지 네트워크]
    B --> C[컨테이너 1]
    B --> D[컨테이너 2]
    B --> E[컨테이너 3]

Docker 는 컨테이너와 외부 네트워크 간의 원활한 통신을 가능하게 하는 유연한 네트워킹 기능을 제공합니다.

이미지 최적화 기법

이미지 크기 축소 전략

Docker 이미지 최적화는 효율적인 컨테이너 배포, 저장 공간 요구 사항 감소 및 성능 향상에 필수적입니다.

레이어 최적화 원칙

graph TD
    A[베이스 이미지] --> B[최소 의존성]
    B --> C[단일 레이어 실행]
    C --> D[캐시 최적화]

Dockerfile 최적화 팁

기법 설명 영향
다단계 빌드 빌드 및 실행 환경 분리 최종 이미지 크기 감소
Alpine 기반 이미지 경량 Linux 배포판 이미지 크기 최소화
RUN 명령어 결합 레이어 수 감소 이미지 복잡성 감소

실제 최적화 예제

## 최적화되지 않은 Dockerfile
FROM ubuntu:22.04
RUN apt-get update
RUN apt-get install -y python3
RUN pip3 install flask
COPY . /app
EXPOSE 5000
CMD ["python3", "app.py"]

## 최적화된 Dockerfile
FROM python:3.9-alpine
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app.py"]

이미지 크기 비교

## 이미지 크기 확인
docker images

캐싱 및 빌드 최적화

graph LR
    A[Dockerfile] --> B[레이어 캐싱]
    B --> C[변경되지 않은 레이어]
    B --> D[재빌드된 레이어]

효과적인 Docker 이미지 최적화는 전략적인 레이어 관리, 불필요한 의존성 최소화 및 빌드 캐시 메커니즘 활용을 통해 컨테이너 성능 및 확장성을 향상시키는 것을 포함합니다.

요약

이 자세한 가이드에서는 Docker 이미지를 다운로드하고 가져오는 방법, Docker 컨테이너를 대화형으로 실행하는 방법, 실행 중인 컨테이너를 탐색하고 조작하는 방법, 컨테이너에 대한 변경 사항을 수정하고 커밋하는 방법, 그리고 Docker 환경을 효율적으로 관리하는 방법을 배웁니다. 초보 사용자이든 숙련된 Docker 사용자이든, 이 튜토리얼은 Docker 이미지를 대화형으로 실행하고 컨테이너 기반 애플리케이션을 제어하는 데 필요한 지식을 제공합니다.