이미지 레지스트리는 이미지를 저장하기 위한 저장소 입니다.
이 레지스트리를 통해 이미지를 다운로드 받거나 다른 사람과 공유할 수 있습니다.
소스코드를 저장하는 GitHub 와 비슷한 개념으로 소스코드 대신 이미지를 저장하는 것이 이미지 레지스트리 입니다.
대표적으로는 Docker Hub 가 있습니다.
이미지 레지스트리는 아래와 같은 기능을 제공합니다.
이미지가 저장되는 공간은 크게 3가지로 구분할 수 있습니다.
Host 머신의 로컬 스토리지프라이빗 레지스트리 : 기업에서 주로 사용 (특정 네트워크에서만 접근 가능)퍼블릭 레지스트리 : Docker Hub 등 (모든 네트워크에서 접근 가능)이미지를 찾는 과정은 아래와 같은 순서로 진행됩니다.
docker run nginx 명령어 입력docker run -d -p 80:80 --name hellonginx
nginx이전에 ngnix 컨테이너를 실행하기 위해 위 명령어로 컨테이너를 생성 및 실행 했었습니다.
이때, 맨 끝에 nginx 라는 이미지 이름으로 이미지를 지정했었는데,
이미지를 다운로드 받을 때는 어디서 다운 받는지, 버전은 어떤 버전을 사용할지 등 정보가 포함되어야 합니다.
그런데 위와 같이 이름만 가지고 이미지를 다운받을 수 있는 이유는
이미지 이름에 규칙이 있고 default로 지정되는 기본 값이 있기 때문입니다.
이미지 이름은 아래와 같이 구성되어 있습니다.
레지스트리 주소 / 프로젝트명 / 이미지명 : 이미지태그이미지를 docker hub 레지스트리에 다운로드, 업로드 하는 방법에 대해 알아보려 합니다.
먼저, https://hub.docker.com 에 접속해서 회원가입 및 로그인을 해주어야 합니다.
그리고 허브에서 nginx 를 검색해보면 Docker Official Image 외에도 Verified Publisher 라고 되어 있는 nginx 이미지들을 볼 수 있는데 이는 도커에서 공식적으로 제공하는 이미지는 아니어도 어느정도 규모가 있고 검증된 이미지라는 의미이니 안심하고 사용해도 될 것 같습니다.
이제 상단에 My hub 를 클릭하고 들어가면 Repositories 페이지로 이동하게 되는데 이 레파지토리가 내 이미지 저장소 입니다.
현재는 푸시한 이미지가 없기 때문에 비어있는 상태일 겁니다.
그러면 이미지를 다운로드 하고 내 이미지를 업로드 하기 위한 명령어를 알아보면 다음과 같습니다.
이미지 다운로드 및 업로드 명령어
# 로컬 스토리지로 이미지 다운로드
docker pull 이미지명
# 새로운 이미지명을 만드는 명령어,
# 새로운 이름을 붙여줄 원래 이미지가 있어야 기존에 있는 이미지는 그대로 두고 새로운 이름의 이미지를 만듭니다.
# 이미지의 이름을 변경하는 이유는 프로젝트의 이름을 변경하기 위해서 입니다.
docker tag 기존이미지명 추가할이미지명
# 이미지 레지스트리에 이미지 업로드
docker push 이미지명이제 간단한 실습을 해보겠습니다.
이를 위해 실습용 repo인 examplerepo에서 simple-web 이미지를 다운로드 받습니다.
docker pull examplerepo/simple-web:1.0그리고 tag 명령어를 통해 이미지의 이름을 바꿔보겠습니다.
# docker tag examplerepo/simple-web:1.0 레지스트리계정명/변경할이미지명
docker tag examplerepo/simple-web:1.0/rawon94/my-simple-web:1.0그리고 docker image ls 로 결과를 확인하면
REPOSITORY TAG IMAGE ID CREATED SIZE
examplerepo/simple-web 1.0 f50795ad0fec 17 months ago 272MB
rawon94/my-simple-web 1.0 f50795ad0fec 17 months ago 272MB위와 같이 새로운 이름인 my-simple-web 이미지가 추가된 것을 볼 수 있습니다.
다만, Image ID는 동일한 것으로 보아 실제로는 하나의 이미지에 여러 개의 이름을 붙인거란걸 알 수 있습니다.
다음은 push 명령어를 사용해서 새로 이름을 붙인 이미지를 내 레지스트리에 업로드 해보겠습니다.
# docker push 레지스트리명/이미지명:버전
docker push rawon94/my-simple-web:1.0만약 push 중 인증 에러가 발생한다면 그 이유는
Docker Hub에 로그인 되어 있지 않기 때문입니다.
웹 페이지에선 로그인 되어 있지만 터미널에서는 Docker Hub 계정정보가 없으므로
Docker login명령어를 통해 인증하면 됩니다.
여튼 다시 돌아와서 Docker Hub에 접속해서 내 레지스트리를 확인하면 push가 정상적으로 완료되었을 경우
이미지가 등록된 것을 볼 수 있습니다.
그러면 이전에 nginx 이미지를 가지고 컨테이너를 실행했던 것처럼 제 이미지를 다운로드 받아서 컨테이너를 실행시켜 볼 수도 있습니다.
docker run -d -p 80:80 --name my-simple-web rawon94/my-simple-web:1.0그러면 내가 업로드한 이미지를 다운받아서 컨테이너가 실행되며, 허브에 퍼블리시한 내 이미지의 다운로드 수가 1 증가한 것도 확인할 수 있습니다.
이 링크를 통해 구매하시면 제가 수익을 받을 수 있어요. 🤗