이미지를 저장 및 공유하는 방법은 무엇일까?
이미지 레지스트리 (Registry)
--
이미지 레지스트리는
도커 이미지를 저장하기 위한 저장소를 의미한다.
해당 이미지 레지스트리를 통해서
개인 또는 팀이 특정 이미지를 다른 사람들과 공유하거나
외부에서 필요한 이미지를 다운받아 사용할 수 있게 된다.
비유를 하자면 GitHub와 비슷하다.
GitHub에서 자신의 코드를 등록 및 공유를 할 수 있고 다른 사람의 코드를 다운 받을 수도 있는 것처럼
이미지 레지스트리도 자신의 이미지를 등록 및 공유할 수 있고 다른 사람의 이미지를 다운로드하여 사용할 수도 있다.
많은 종류의 이미지 레지스트리 플랫폼들이 존재하고
이때 가장 많이 사용되는 이미지 레지스트리가 Docker Hub이다.
GitHub : 소스 코드만 저장 및 공유
Docker Hub : 소스 코드를 사용해서 만들어진 애플리케이션과 해당 애플리케이션을 실행할 수 있는 환경이 모두 포함되어 있는 이미지를 저장 및 공유
Docker Hub와 같은 플랫폼은 public registry이다.
즉, 모두가 접근할 수 있는 레지스트리이기 때문에 이미지를 저장하는 것은 보안상에 문제가 될 수 있다.
그래서 Docker Hub 같은 서비스를 사용하지 않고 자신만의 레지스트리를 사용하는 방법도 있다.
대표적인 방법
- 개인 서버에 직접 레지스트리를 설치하여 사용하기 (HARBOR, 도커 프라이빗 레지스트리)
- 퍼블릭 클라우드의 서비스를 사용하기 (AWS EC2)
"docker run nginx" 명령어 과정
1. 로컬 저장소에 nginx 이미지가 존재하는지 검색 (있으면 바로 nginx이미지를 가지고 컨테이너 실행)
2. 로컬 저장소에 없다면 호스트 외부의 온라인 레지스트리에서 해당 이미지를 로컬 저장소로 다운로드
3. 다운로드 이후 바로 다운로드한 nginx이미지를 컨테이너로 실행
--
이미지 레지스트리 플랫폼들의 공통적으로 제공하는 기능
--
- 이미지 업로드 및 다운로드
- 이미지 검색 기능 (다른 사람의 이미지 포함)
- 이미지의 버전 관리
- 원하는 사용자만 해당 이미지를 다운로드하도록 설정
- 안전한 이미지를 다운로드할 수 있도록 업로드된 이미지의 보안 검증 기능
- DevOps 파이프라인 기능과 연계하여 이미지 업로드 시 자동 배포 기능
--
이미지의 네이밍 규칙
--
일반적으로 이미지를 다운로드할 때에는 이름에
- 이미지를 어디서 다운로드하는지에 대한 위치 정보
- 어떤 버전의 이미지를 다운로드하는지 버전에 대한 정보
의 정보가 포함되어 있어야 한다.
다만 이전에 Nginx이미지를 다운로드하여 실행시킬 때에는 그냥 이미지 이름만 작성했다.
docker run -d -p 8080:3000 --name hellonginx nginx
이것이 가능했던 이유는
이미지 이름에는 규칙이 존재하고 디폴트로 지정되어 있는 기본 값이 있기 때문에
자동으로 알아서 찾은 후 다운로드하게 된다.
이미지의 이름은 크게
레지스트리 주소, 프로젝트 이름, 이미지 이름, 이미지 태그로 구성되어 있다.
레지스트리 주소 | [ 생략시 기본 값 : docker.io ] 어떠한 레지스트리 주소를 사용할지, 이미지를 어디서 다운 받을지 작성한다. (docker Hub 말고도 레지스트리가 여러 개 존재할 수 있기 때문이다.) (도커의 기본 레지스트리 주소 = 도커 허브 주소 = docker.io) |
프로젝트 이름 | [ 생략시 기본 값 : library ] 이미지를 보관하는 폴더 같은 개념으로 저장소 이름 (도커를 사용할 때는 가입한 사용자의 계정명이 프로젝트 명이 된다.) |
이미지 이름 | 다운받을 이미지의 이름 |
이미지 태그 | [ 생략시 기본 값 : latest ] 이미지의 버전 (숫자와 영문 모두 사용 가능) (latest = 최신 버전) |
--
참고 및 출처
'Docker' 카테고리의 다른 글
이미지의 레이어 (Layer) (feat. 컨테이너의 레이어) (0) | 2024.06.17 |
---|---|
Docker Hub에 이미지 다운로드 및 업로드 명령어 (+ Docker Hub 사용법) (0) | 2024.06.16 |
컨테이너의 Lifecycle(생명주기) 정리 (+명령어) (0) | 2024.06.14 |
다른 사용자의 이미지를 다운로드하기 (+ Env 덮어씌우기) (0) | 2024.06.13 |
이미지를 컨테이너로 실행할 때 이미지의 메타데이터 Env와 Cmd 덮어씌우기 (명령어) (0) | 2024.06.12 |