이 글은 [2024 NEW] 개발자를 위한 쉬운 도커 강의를 듣고 작성한 글입니다! 모든 강의자료 이미지 출처는 해당 강사님께 있습니다.
이미지 레지스트리란?
이미지 레지스트리는 도커의 이미지를 저장하기 위한 저장소이다. 이미지 레지스트리를 통해서 개인이나 팀이 이미지를 공유하거나 필요한 이미지를 다운받을 수 있다. 깃허브가 소스코드를 저장하는 저장소이면, 도커허브는 이미지를 공유하는 저장소이다.
이미지 레지스트리 제품들이 공통적으로 제공하는 기능들을 정리하면 다음과 같다.
- 이미지 공유 : 이미지를 업로드 하고 다운로드 할 수 있다.
- 이미지 검색 : 이미지를 검색할 수 있다.
- 이미지 버전 관리 : 특정 버전의 이미지를 지정하여 다운받을 수 있다.
- 보안 : 원하는 사용자만 다운받을 수 있게 하거나, 업로드된 이미지의 보안을 검증한다.
- 파이프라인 : 이미지를 업로드 했을 때 자동으로 배포가 이루어질 수 있도록 연계 기능을 제공한다.
이미지 저장 공간
이미지가 저장되는 공간은 크게 3가지로 나눌 수 있다.
1. 호스트 머신의 로컬 스토리지 : 말 그대로 로컬에 존재하는 스토리지이다.
2. 프라이빗 레지스트리 : 기업에서 많이 사용한다. 특정 네트워크에서 접속이 가능하다.
3. 퍼블릭 레지스트리 : 모든 네트워크에서 접속이 가능하다. Docker Hub가 퍼블릭 레지스트리에 해당한다.
이미지 다운로드 과정
docker run nginx 명령어를 입력했을 때 이미지를 다운 받는 과정은 다음과 같다.
먼저, 로컬 스토리지에 해당 이미지가 존재하는지 검색한다. 로컬 스토리지에 이미지가 있으면 바로 실행되고, 이미지가 없으면 온라인 레지스트리에서 이미지를 다운받는다. 다운받은 이미지를 이용하여 컨테이너를 사용한다. 이후에 nginx 컨테이너를 실행할 때는, 바로 컨테이너로 실행된다.
네이밍 규칙
이미지 이름에는 이미지를 어디서 다운받는지, 어떤 버전의 이미지를 다운받는지에 대한 정보가 포함되어야 한다. 하지만 이때까지 nginx 이름만 적어도 이미지 다운받을 수 있던 이유는, 이미지 이름에 규칙이 있고 디폴트로 지정되는 기본값이 있기 때문이다.
이미지 이름은 레지스트리 주소 / 프로젝트명 / 이미지명 : 이미지 태그 로 구성된다.
레지스트리 주소는 어떤 레지스트리를 사용할지 지정하는 것이다. Docker hub 외에도 많은 레지스트리가 있다. 레지스트리가 비어있는 경우, 기본값으로 지정된 레지스트리 주소가 사용된다. Docker를 사용하는 경우, docker.io 이다. 프로젝트명은 이미지를 보관하는 폴더같은 개념이다. 레지스트리마다 프로젝트를 정의하는 방식이 다르다. Docker hub 같은 경우에는, 가입한 사용자의 계정명이 프로젝트명이 된다. 이미지명은 다운받을 이미지의 이름이다. 이미지 태그는 이미지의 버전이다. 버전에는 숫자와 영문 모두 사용이 가능하다. 값이 비어있다면 최신 버전을 의미하는 latest 가 기본값으로 사용된다.
nginx 같은 경우에는 프로젝트명까지 생략했는데, Docker가 직접 검증한 이미지는 오피셜 이미지로 제공하고 있다. 오피셜 이미지는 라이브러리라는 프로젝트에서 관리한다. 프로젝트명이 비워져 있으면 라이브러리가 기본값으로 사용된다. 즉, 프로젝트명을 비워 놓아서 공식 nginx 이미지를 다운받는 것이다.
실습 명령어
- docker pull 이미지명 : 로컬 스토리지로 이미지 다운로드
- docker tag 기존 이미지명 추가할 이미지명 : 로컬 스토리지의 이미지명 추가
- docker push 이미지명 : 이미지 레지스트리에 이미지 업로드
+ 이미지를 다운받을 때는 인증 정보가 필요 없지만, 이미지를 푸시할 때는 인증 정보가 필요하다.
- docker login : 이미지 레지스트리 인증 정보 생성
- docker logout : 이미지 레지스트리 인증 정보 삭제
- cat ~/.docker/config.json : 인증 정보가 파일 형태로 저장됨을 확인
'Docker' 카테고리의 다른 글
이미지 커밋과 빌드 (0) | 2024.02.20 |
---|---|
이미지와 레이어 (0) | 2024.02.19 |
컨테이너의 라이프사이클 (0) | 2024.02.17 |
이미지의 메타데이터(Metadata) (1) | 2024.02.17 |
이미지와 컨테이너 (1) | 2024.02.16 |