Docker 레지스트리 이미지 효율적으로 관리하는 방법

DockerBeginner
지금 연습하기

소개

이 튜토리얼에서는 공개 Docker Hub 또는 프라이빗 레지스트리와 같은 레지스트리에서 Docker 이미지를 목록화하고 관리하는 방법을 안내합니다. 이미지를 검색하고, 목록을 필터링하고, Docker 이미지의 메타데이터를 검사하는 방법을 배우면서 컨테이너화된 애플리케이션을 효과적으로 관리할 수 있게 될 것입니다.

Docker 레지스트리 소개

Docker 레지스트리란 무엇인가요?

Docker 레지스트리는 Docker 이미지를 저장, 관리 및 배포하는 중앙 집중식 저장소입니다. 컨테이너 배포 및 공유를 위한 필수적인 인프라 구성 요소 역할을 합니다. Docker 레지스트리는 개발자가 다양한 환경에서 컨테이너 이미지를 푸시, 풀 및 관리할 수 있도록 지원합니다.

Docker 레지스트리의 주요 구성 요소

구성 요소 설명
이미지 저장소 Docker 이미지를 저장하는 위치
이미지 태그 특정 이미지 버전을 위한 고유 식별자
인증 이미지 관리를 위한 접근 제어 메커니즘

Docker 레지스트리 아키텍처

graph TD
    A[개발자] -->|이미지 푸시| B[Docker 레지스트리]
    B -->|이미지 풀| C[컨테이너 호스트]
    B -->|이미지 저장| D[이미지 저장소]

일반적인 Docker 레지스트리

  1. Docker Hub (공식 공개 레지스트리)
  2. Amazon Elastic Container Registry
  3. Google Container Registry
  4. Azure Container Registry
  5. 자체 호스팅 프라이빗 레지스트리

기본 Docker 레지스트리 작업

Docker Hub 에서 이미지 풀기

docker pull ubuntu:latest

레지스트리로 이미지 푸시하기

docker login registry.example.com
docker tag my-image:v1 registry.example.com/my-image:v1
docker push registry.example.com/my-image:v1

Docker 레지스트리의 활용 사례

Docker 레지스트리는 다음과 같은 작업에 필수적입니다.

  • 중앙 집중식 이미지 저장
  • 컨테이너 이미지의 버전 관리
  • 안전한 이미지 배포
  • 지속적인 통합 및 배포
  • 다중 환경 컨테이너 관리

레지스트리 이미지 작업

이미지 관리 워크플로우

graph LR
    A[로컬 개발] -->|빌드| B[Docker 이미지]
    B -->|태그| C[이미지 태깅]
    C -->|푸시| D[Docker 레지스트리]
    D -->|풀| E[원격 환경]

기본 이미지 작업

이미지 검색

docker search ubuntu
docker search --limit 5 python

레지스트리에서 이미지 풀기

## 특정 이미지 버전 풀기
docker pull nginx:1.21
docker pull python:3.9-slim

## 최신 이미지 풀기
docker pull alpine:latest

이미지 태깅 전략

태그 유형 예시 설명
버전 태그 myapp:1.0 특정 버전 릴리스
최신 태그 myapp:latest 가장 최근 버전
환경 태그 myapp:production 환경별 이미지

사용자 정의 이미지 생성 및 푸시

## 사용자 정의 이미지 빌드
docker build -t myapp:v1 .

## 레지스트리용 이미지 태그
docker tag myapp:v1 registry.example.com/myapp:v1

## 원격 레지스트리로 푸시
docker push registry.example.com/myapp:v1

고급 이미지 관리

로컬 및 원격 이미지 목록화

## 로컬 이미지 목록
docker images

## 원격 레지스트리의 이미지 목록
docker manifest inspect nginx

이미지 정리 및 정리

## 사용되지 않는 이미지 제거
docker image prune

## 특정 이미지 제거
docker rmi nginx:latest

레지스트리 보안 및 권장 사항

인증 및 접근 제어

graph TD
    A[사용자] -->|자격 증명| B[Docker 레지스트리]
    B -->|권한 부여| C{접근 제어}
    C -->|허용| D[이미지 풀기/푸시]
    C -->|거부| E[접근 거부]

레지스트리 인증 방법

방법 설명 보안 수준
기본 인증 사용자 이름/비밀번호 낮음
토큰 기반 JWT 인증 중간
OAuth 외부 ID 제공자 높음

안전한 프라이빗 레지스트리 구현

기본 인증 설정

## htpasswd 유틸리티 설치
sudo apt-get install apache2-utils

## 비밀번호 파일 생성
htpasswd -Bc /etc/docker/registry/htpasswd username

## 인증 설정으로 레지스트리 구성
docker run -d \
  -p 5000:5000 \
  -v /etc/docker/registry/htpasswd:/etc/docker/registry/htpasswd \
  -e "REGISTRY_AUTH=htpasswd" \
  -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
  -e "REGISTRY_AUTH_HTPASSWD_PATH=/etc/docker/registry/htpasswd" \
  registry:2

이미지 스캔 및 취약점 관리

Docker 이미지 취약점 스캔

## Trivy 보안 스캐너 설치
sudo apt-get install wget apt-transport-https gnupg lsb-release
wget -qO - | sudo apt-key add -
sudo add-apt-repository "deb  $(lsb_release -sc) main"
sudo apt-get update
sudo apt-get install trivy

## 취약점 검사
trivy image nginx:latest

이미지 버전 관리 및 거버넌스

이미지 태깅 전략 구현

## 의미적 버전 관리 예시
docker tag myapp:latest myapp:1.0.0
docker tag myapp:latest myapp:1.0.0-stable

## 버전 관리된 이미지 푸시
docker push myregistry.com/myapp:1.0.0
docker push myregistry.com/myapp:1.0.0-stable

네트워크 보안 고려 사항

레지스트리 통신 보안

## 레지스트리에 TLS 활성화
docker run -d \
  -p 5000:5000 \
  -v /path/to/certs:/certs \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
  registry:2

접근 제어 권장 사항

  • 최소 권한 원칙 적용
  • 강력하고 고유한 비밀번호 사용
  • 정기적인 자격 증명 회전
  • 다단계 인증 활성화
  • IP 화이트리스트 구현

요약

이 튜토리얼에서 다룬 기술들을 숙달하면, 레지스트리에서 Docker 이미지를 효율적으로 목록화하고 관리할 수 있게 됩니다. 이를 통해 컨테이너화된 애플리케이션에 필요한 올바른 버전과 구성을 확보할 수 있습니다. 검색 및 필터링부터 메타데이터 검사 및 이미지 자동 검색까지, Docker 이미지 관리 및 배포 프로세스를 간소화하는 데 필요한 기술을 습득하게 될 것입니다.