소개
이 포괄적인 튜토리얼은 Docker 이미지의 기본 개념을 탐구하여 개발자 및 DevOps 전문가에게 컨테이너 이미지를 생성, 구조화 및 관리하는 심층적인 통찰력을 제공합니다. Docker 이미지 아키텍처의 핵심 원리를 이해함으로써 독자들은 효율적이고 재현 가능한 소프트웨어 배포 솔루션을 구축하기 위한 실질적인 지식을 얻게 될 것입니다.
이 포괄적인 튜토리얼은 Docker 이미지의 기본 개념을 탐구하여 개발자 및 DevOps 전문가에게 컨테이너 이미지를 생성, 구조화 및 관리하는 심층적인 통찰력을 제공합니다. Docker 이미지 아키텍처의 핵심 원리를 이해함으로써 독자들은 효율적이고 재현 가능한 소프트웨어 배포 솔루션을 구축하기 위한 실질적인 지식을 얻게 될 것입니다.
Docker 이미지는 애플리케이션 실행에 필요한 모든 것을 포함하는 경량의 독립 실행형 실행 패키지입니다. 코드, 런타임, 시스템 도구, 라이브러리 및 설정이 포함됩니다. 다양한 컴퓨팅 환경에서 일관되고 휴대 가능한 소프트웨어 배포를 가능하게 하여 컨테이너 기술의 기본 구성 요소 역할을 합니다.
| 레이어 유형 | 설명 | 예시 |
|---|---|---|
| 베이스 레이어 | 기본 운영 체제 | Ubuntu 22.04 |
| 중간 레이어 | 시스템 의존성 | Python 런타임 |
| 애플리케이션 레이어 | 소스 코드 및 애플리케이션 파일 | 웹 애플리케이션 |
| 설정 레이어 | 런타임 설정 | 포트 매핑 |
## 프로젝트 디렉토리 생성
mkdir my-docker-app
cd my-docker-app
## 간단한 Python 애플리케이션 생성
echo "print('Hello, Docker!')" > app.py
## Dockerfile 생성
cat > Dockerfile << EOL
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y python3
COPY app.py /app/app.py
WORKDIR /app
CMD ["python3", "app.py"]
EOL
## Docker 이미지 빌드
docker build -t my-python-app .
## 컨테이너 실행
docker run my-python-app
이 예제는 최소한의 Ubuntu 베이스를 사용하여 Docker 이미지를 생성하고 Python 을 설치하며 간단한 Python 스크립트를 실행하는 방법을 보여줍니다. Dockerfile 은 이미지의 각 레이어를 정의하여 다양한 환경에서 재현성과 일관성을 보장합니다.
Docker 이미지는 생성되면 변경되지 않는 불변 (immutable) 특성을 가집니다. 각 이미지는 여러 개의 읽기 전용 레이어로 구성되어 있으며, 다른 이미지에서 공유될 수 있습니다. 이는 저장 및 다운로드 시간을 효율적으로 개선합니다.
Docker 는 Ubuntu 22.04 시스템에서 이미지를 효율적으로 관리하기 위한 다양한 명령어를 제공합니다. 이러한 명령어를 이해하는 것은 깨끗하고 최적화된 컨테이너 환경을 유지하는 데 필수적입니다.
## 모든 로컬 이미지 목록 보기
docker images
## 자세한 이미지 검사
docker inspect ubuntu:latest
## 특정 기준으로 이미지 필터링
docker images --filter "dangling=true"
| 작업 | 명령어 | 설명 |
|---|---|---|
| 이미지 다운로드 | docker pull |
레포지토리에서 이미지 다운로드 |
| 이미지 삭제 | docker rmi |
로컬 이미지 삭제 |
| 사용되지 않는 이미지 삭제 | docker image prune |
사용되지 않는 이미지 정리 |
| 이미지 태그 | docker tag |
이미지 별칭 생성 |
## 모든 사용되지 않는 이미지 삭제
docker image prune -a
## 특정 이미지 삭제
docker rmi image_name:tag
## 실행 중인 컨테이너가 없는 이미지 삭제
docker image prune -f
## 이미지 크기 확인
docker images --format "{{.Repository}}:{{.Tag}}: {{.Size}}"
## 다단계 빌드를 사용하여 최소 이미지 빌드
FROM ubuntu:22.04 AS builder
## 의존성 빌드
FROM ubuntu:22.04
## 필요한 아티팩트만 복사
## 특정 이미지 버전 태그
docker tag original_image:latest new_image:v1.0
## 태그된 이미지 레포지토리에 업로드
docker push new_image:v1.0
| 레포지토리 유형 | 접근 권한 | 사용 사례 |
|---|---|---|
| Docker Hub | 공개/개인 | 커뮤니티 이미지, 공식 레포지토리 |
| 프라이빗 레지스트리 | 제한적 | 엔터프라이즈 환경, 민감한 프로젝트 |
| 클라우드 레지스트리 | 관리형 | 확장 가능, 통합된 클라우드 배포 |
## Docker Hub 로그인
docker login
## 프라이빗 레지스트리 인증 생성
docker login private-registry.example.com
## 레지스트리 자격 증명 생성
htpasswd -Bc registry.password username
## 로컬 이미지 저장 공간 제한
docker system prune -a --volumes
## 중복 이미지 삭제
docker image prune
## 저장 공간 제한 설정
docker system df
#!/bin/bash
## Docker 이미지 정리 스크립트
## 30일 이상 된 이미지 삭제
docker image prune -a --filter "until=720h"
## 사용되지 않는 볼륨 삭제
docker volume prune -f
## 사용되지 않는 네트워크 삭제
docker network prune -f
## 최신 이미지 다운로드
docker pull ubuntu:latest
docker pull nginx:stable
## 프라이빗 레지스트리로 태그 및 업로드
docker tag ubuntu:latest private-registry.com/ubuntu:latest
docker push private-registry.com/ubuntu:latest
## 이미지 취약점 스캔
docker scan ubuntu:latest
## CI/CD 파이프라인과 통합
trivy image ubuntu:latest
Docker 이미지는 현대 컨테이너화 기술의 중요한 구성 요소로, 다양한 컴퓨팅 환경에서 일관되고 휴대 가능한 소프트웨어 배포를 가능하게 합니다. 이미지 생성, 레이어 관리 및 레포지토리 관행을 숙달함으로써 개발자는 애플리케이션 패키징을 간소화하고, 배포 효율성을 높이며, 다양한 플랫폼 및 인프라에서 안정적인 소프트웨어 배포를 보장할 수 있습니다.