logoRawon_Log
홈블로그소개

Built with Next.js, Bun, Tailwind CSS and Shadcn/UI

Docker

Docker - 이미지 레지스트리

Rawon
2025년 9월 8일
목차
이미지 레지스트리
이미지명 규칙
이미지 레지스트리 실습

목차

이미지 레지스트리
이미지명 규칙
이미지 레지스트리 실습

이미지 레지스트리

이미지 레지스트리는 이미지를 저장하기 위한 저장소 입니다.

이 레지스트리를 통해 이미지를 다운로드 받거나 다른 사람과 공유할 수 있습니다.

소스코드를 저장하는 GitHub 와 비슷한 개념으로 소스코드 대신 이미지를 저장하는 것이 이미지 레지스트리 입니다.

대표적으로는 Docker Hub 가 있습니다.

이미지 레지스트리는 아래와 같은 기능을 제공합니다.

  • 이미지 공유
  • 이미지 검색
  • 이미지 버전 관리
  • 보안
  • 파이프라인

이미지가 저장되는 공간은 크게 3가지로 구분할 수 있습니다.

  • 도커가 설치되어 있는 Host 머신의 로컬 스토리지
  • 온라인 저장소
    • 프라이빗 레지스트리 : 기업에서 주로 사용 (특정 네트워크에서만 접근 가능)
    • 퍼블릭 레지스트리 : Docker Hub 등 (모든 네트워크에서 접근 가능)

이미지를 찾는 과정은 아래와 같은 순서로 진행됩니다.

  1. docker run nginx 명령어 입력
  2. 호스트 머신의 로컬 스토리지에 nginx 이미지가 있는지 검색
  3. 있다면 바로 실행
  4. 호스트에 이미지가 없다면 호스트 외부의 온라인 레지스트리에서 nginx 이미지를 호스트 머신의 로컬 스토리지에 다운로드
  5. 다운 받은 이미지를 사용해서 컨테이너 실행
  6. 다음부터 nginx 컨테이너를 실행할 때마다 로컬 스토리지에 다운받아 놓은 이미지를 사용하며, 온라인 레지스트리를 검색하지 않음.

이미지명 규칙

docker
docker run -d -p 80:80 --name hellonginx 
nginx

이전에 ngnix 컨테이너를 실행하기 위해 위 명령어로 컨테이너를 생성 및 실행 했었습니다.

이때, 맨 끝에 nginx 라는 이미지 이름으로 이미지를 지정했었는데,

이미지를 다운로드 받을 때는 어디서 다운 받는지, 버전은 어떤 버전을 사용할지 등 정보가 포함되어야 합니다.

그런데 위와 같이 이름만 가지고 이미지를 다운받을 수 있는 이유는

이미지 이름에 규칙이 있고 default로 지정되는 기본 값이 있기 때문입니다.

이미지 이름은 아래와 같이 구성되어 있습니다.

docker
레지스트리 주소 / 프로젝트명 / 이미지명 : 이미지태그
  • 레지스트리 주소
    • 어떤 레지스트리를 사용할지를 지정합니다.
  • 프로젝트명
    • 이미지를 보관하는 폴더의 개념 입니다.
    • Docker Hub의 경우 가입한 사용자의 계정명이 프로젝트 명이 됩니다.
  • 이미지명
    • 다운로드 받을 이미지의 이름 입니다.
  • 이미지 태그
    • 이미지의 버전을 의미하며, 숫자와 영문을 모두 사용할 수 있습니다.

이미지 레지스트리 실습

이미지를 docker hub 레지스트리에 다운로드, 업로드 하는 방법에 대해 알아보려 합니다.

먼저, https://hub.docker.com 에 접속해서 회원가입 및 로그인을 해주어야 합니다.

그리고 허브에서 nginx 를 검색해보면 Docker Official Image 외에도 Verified Publisher 라고 되어 있는 nginx 이미지들을 볼 수 있는데 이는 도커에서 공식적으로 제공하는 이미지는 아니어도 어느정도 규모가 있고 검증된 이미지라는 의미이니 안심하고 사용해도 될 것 같습니다.

이제 상단에 My hub 를 클릭하고 들어가면 Repositories 페이지로 이동하게 되는데 이 레파지토리가 내 이미지 저장소 입니다.

현재는 푸시한 이미지가 없기 때문에 비어있는 상태일 겁니다.

그러면 이미지를 다운로드 하고 내 이미지를 업로드 하기 위한 명령어를 알아보면 다음과 같습니다.

이미지 다운로드 및 업로드 명령어

docker
# 로컬 스토리지로 이미지 다운로드
docker pull 이미지명

# 새로운 이미지명을 만드는 명령어,
# 새로운 이름을 붙여줄 원래 이미지가 있어야 기존에 있는 이미지는 그대로 두고 새로운 이름의 이미지를 만듭니다.
# 이미지의 이름을 변경하는 이유는 프로젝트의 이름을 변경하기 위해서 입니다.
docker tag 기존이미지명 추가할이미지명

# 이미지 레지스트리에 이미지 업로드
docker push 이미지명

이제 간단한 실습을 해보겠습니다.

이를 위해 실습용 repo인 examplerepo에서 simple-web 이미지를 다운로드 받습니다.

docker
docker pull examplerepo/simple-web:1.0

그리고 tag 명령어를 통해 이미지의 이름을 바꿔보겠습니다.

docker
# docker tag examplerepo/simple-web:1.0 레지스트리계정명/변경할이미지명
docker tag examplerepo/simple-web:1.0/rawon94/my-simple-web:1.0

그리고 docker image ls 로 결과를 확인하면

docker
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
# docker push 레지스트리명/이미지명:버전
docker push rawon94/my-simple-web:1.0

만약 push 중 인증 에러가 발생한다면 그 이유는
Docker Hub에 로그인 되어 있지 않기 때문입니다.
웹 페이지에선 로그인 되어 있지만 터미널에서는 Docker Hub 계정정보가 없으므로
Docker login 명령어를 통해 인증하면 됩니다.

여튼 다시 돌아와서 Docker Hub에 접속해서 내 레지스트리를 확인하면 push가 정상적으로 완료되었을 경우

이미지가 등록된 것을 볼 수 있습니다.

그러면 이전에 nginx 이미지를 가지고 컨테이너를 실행했던 것처럼 제 이미지를 다운로드 받아서 컨테이너를 실행시켜 볼 수도 있습니다.

docker
docker run -d -p 80:80 --name my-simple-web rawon94/my-simple-web:1.0

그러면 내가 업로드한 이미지를 다운받아서 컨테이너가 실행되며, 허브에 퍼블리시한 내 이미지의 다운로드 수가 1 증가한 것도 확인할 수 있습니다.

이 링크를 통해 구매하시면 제가 수익을 받을 수 있어요. 🤗

https://inf.run/CigvZ