소개
이 튜토리얼에서는 공개 Docker Hub 또는 프라이빗 레지스트리와 같은 레지스트리에서 Docker 이미지를 목록화하고 관리하는 방법을 안내합니다. 이미지를 검색하고, 목록을 필터링하고, Docker 이미지의 메타데이터를 검사하는 방법을 배우면서 컨테이너화된 애플리케이션을 효과적으로 관리할 수 있게 될 것입니다.
Docker 레지스트리 소개
Docker 레지스트리란 무엇인가요?
Docker 레지스트리는 Docker 이미지를 저장, 관리 및 배포하는 중앙 집중식 저장소입니다. 컨테이너 배포 및 공유를 위한 필수적인 인프라 구성 요소 역할을 합니다. Docker 레지스트리는 개발자가 다양한 환경에서 컨테이너 이미지를 푸시, 풀 및 관리할 수 있도록 지원합니다.
Docker 레지스트리의 주요 구성 요소
| 구성 요소 | 설명 |
|---|---|
| 이미지 저장소 | Docker 이미지를 저장하는 위치 |
| 이미지 태그 | 특정 이미지 버전을 위한 고유 식별자 |
| 인증 | 이미지 관리를 위한 접근 제어 메커니즘 |
Docker 레지스트리 아키텍처
graph TD
A[개발자] -->|이미지 푸시| B[Docker 레지스트리]
B -->|이미지 풀| C[컨테이너 호스트]
B -->|이미지 저장| D[이미지 저장소]
일반적인 Docker 레지스트리
- Docker Hub (공식 공개 레지스트리)
- Amazon Elastic Container Registry
- Google Container Registry
- Azure Container Registry
- 자체 호스팅 프라이빗 레지스트리
기본 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 이미지 관리 및 배포 프로세스를 간소화하는 데 필요한 기술을 습득하게 될 것입니다.



