이미지 레지스트리와 이미지 네이밍 규칙에 대해서 알아보겠습니다
이미지 레지스트리
이미지를 저장하는 저장소
GitHub 같은 저장소의 역할을 한다. 가장 유명한 레지스트리는 Docker Hub입니다.
이미지 레지스트리가 공통적으로 제공하는 기능
- 이미지 공유
- 이미지 검색
- 이미지 버전 관리
- 보안
- 파이프라인
이미지 공유
이미지를 다운로드, 업로드하는 기능을 제공합니다.
이미지 검색
이미지 레지스트리에 있는 이미지들을 검색하고 필요한 이미지를 찾아볼 수 있습니다.
이미지 버전 관리
이미지 레지스트리는 버전 관리 기능이 있기 때문에 사용자는 원하는 버전을 다운로드할 수 있습니다.
보안
안전한 이미지를 다운로드할 수 있도록 업로드된 이미지의 보안을 검증하는 기능도 있습니다.
파이프라인
DevOps 파이프라인 기능과 연계해서 이미지를 업로드했을 때 자동으로 배포가 이루어질 수 있도록 연계 기능이나 알림 기능도 제공합니다.
이미지가 저장되는 공간
- 호스트 머신의 로컬 스토리지
- 퍼블릭 레지스트리(모든 네트워크에서 접근이 가능)
- 예) dockerhub
- 프라이빗 레지스트리(특정한 네트워크에서만 접근이 가능)
- 주로 기업에서 사용
docker run niginx
- 로컬 스토리지에 해당 이미지가 있는지 확인
- 이미지 존재하면 바로 실행, 없으면 온라인 레지스트리에서 이미지를 로컬 스토리지로 다운
- 다운로드한 로컬 스토리지의 이미지를 사용해서 컨테이너를 실행
- 다음부터 실행하는 컨테이너들은 로컬 스토리지에 있는 이미지를 사용, 온라인 스토리지에 접근하지 않습니다.
퍼블릭 레지스트리의 위험
모든 네트워크에서 접근이 가능하기 때문에 중요한 이미지를 업로드하면 보안에 취약합니다.
그래서 개인용 레지스트리를 사용하는 방법도 존재합니다.
- 직접 자신의 서버에 레지스트리를 설치해서 사용하는 방법
- HARBOR, Docker 프라이빗 레지스트리
- 퍼블릭 클라우드 서비스(비용 발생)
- AWS ECR, Azure ACR
이미지 네이밍 규칙
이미지 이름에는 이미지 출처, 버전이 포함되어 있어야 합니다.
하지만 아래의 명령어에서 nginx
라는 이미지 이름만으로 다운이 가능한 이유는
이미지 이름에 규칙이 있고 디폴트로 지정되는 기본 값이 있기 때문입니다.docker run -d -p 80:80 --name hellonginx nginx
레지스트리주소/프로젝트명/이미지명:이미지태그
docker.io/myProject/myNginx:2.1.0-alpine[...] 안에
있는 단어는 생략이 가능하다.
예) [docker.io]/myProject/myNginx:[latest]
레지스트리주소: 레지스트리 유형을 지정
비어있는 경우 기본 값으로 지정된 주소가 사용됩니다(docker.io
)
프로젝트명: 이미지를 보관하는 폴더의 개념
도커의 경우 가입한 사용자의 계정명
이미지명: 다운로드할 이미지의 이름
이미지태그: 이미지의 버전
이미지태그를 생략하면latest(최신버전)
이 등록됩니다.
도커사가 직접 인증한 이미지
nginx 같은 도커사에서 직접 인증한 이미지는 DOCKER OFFICIAL IMAGE
로 지정
라이브러리라는 프로젝트에서 관리합니다. 별도의 프로젝트명(계정명)을 입력하지 않아도 프로젝트명이 기본 값으로 적용됩니다.
docker run --name hellonginx nginx
는 내부적으로docker run --name hellonginx docker.io/library/nginx:latest
가 되는것입니다.