한 줄 요약
컨테이너 레지스트리는 도커 이미지를 저장하고 공유하는 저장소예요. 이미지를 레지스트리에 올려 두면 다른 서버에서 같은 이미지를 내려받아 실행할 수 있어요.

1. 핵심 개념
1.1 컨테이너 레지스트리란
공식 문서는 이미지 레지스트리를 컨테이너 이미지를 저장하고 공유하는 중앙 저장소로 정의해요. 공개(public) 또는 비공개(private)로 운영할 수 있어요.
Docker Hub는 누구나 쓸 수 있는 공개 레지스트리이고, 도커의 기본 레지스트리예요.
1.2 레지스트리, 리포지토리, 태그
세 용어는 비슷해 보이지만 범위가 달라요.
| 용어 | 의미 |
|---|---|
| 레지스트리(registry) | 이미지를 저장·관리하는 서비스 전체예요 (예: Docker Hub) |
| 리포지토리(repository) | 레지스트리 안에서 관련 이미지를 모아 둔 단위예요 (예: myapp) |
| 태그(tag) | 같은 리포지토리 안에서 버전이나 종류를 구분하는 이름이에요 (예: 1.0) |
1.3 왜 중요한가
- 내 컴퓨터에서 만든 이미지를 서버로 옮기는 표준 경로예요.
- CI/CD 파이프라인이 만든 이미지를 보관하는 장소예요.
- 태그로 버전을 관리해 이전 버전으로 되돌리기 쉬워요.
2. 쉽게 이해하기
레지스트리를 도서관에 비유해 볼게요.
- 레지스트리는 도서관 건물이에요.
- 리포지토리는 책 한 종류가 꽂힌 서가예요.
- 태그는 "개정 2판" 같은 판 표시예요.
- 다이제스트는 책 내용 전체로 만든 지문이에요. 내용이 한 글자라도 다르면 지문이 달라져요.
3. 이미지 이름 읽는 법
공식 문서 기준 이미지 이름의 구조는 이래요.
[호스트[:포트]/]네임스페이스/리포지토리[:태그]
| 예시 | 호스트 | 네임스페이스 | 리포지토리 | 태그 |
|---|---|---|---|---|
alpine |
docker.io (기본값) |
library (기본값) |
alpine |
latest (기본값) |
example.com:5000/team/my-app:2.0 |
example.com |
team |
my-app |
2.0 |
ghcr.io/<계정>/myapp:1.0 |
ghcr.io |
<계정> |
myapp |
1.0 |
- 호스트를 생략하면 Docker Hub(
docker.io)로 해석돼요. - 네임스페이스를 생략하면 공식 이미지용
library로 해석돼요. - 태그를 생략하면
latest로 해석돼요.
3.1 latest는 "최신"이라는 뜻이 아니에요
latest는 태그를 생략했을 때 쓰이는 기본 이름이에요. 가장 최근 버전을 자동으로 가리키는 기능은 없어요. 운영 환경에서는 1.0처럼 명확한 태그를 쓰는 편이 안전해요.
3.2 다이제스트로 고정하기
태그는 다른 이미지를 가리키도록 바뀔 수 있어요. 내용 기준으로 고정하려면 다이제스트를 써요.
docker pull alpine@sha256:<다이제스트 값>
다이제스트(digest): 이미지 내용으로 계산한 고유 식별값이에요. 내용이 같으면 값도 같아요.
4. Docker Hub에 이미지 올리기
# 1) 로그인
docker login
# 2) 레지스트리 형식에 맞게 태그 붙이기
docker tag myapp:1.0 <Docker Hub 사용자명>/myapp:1.0
# 3) 업로드
docker push <Docker Hub 사용자명>/myapp:1.0
# 4) 다른 서버에서 내려받기
docker pull <Docker Hub 사용자명>/myapp:1.0
docker tag는 이미지를 복사하지 않아요. 같은 이미지에 이름을 하나 더 붙이는 명령이에요.
5. GitHub Container Registry(GHCR)에 이미지 올리기
GHCR은 GitHub이 제공하는 컨테이너 레지스트리예요. 주소는 ghcr.io예요.
5.1 인증 준비
공식 문서는 명령줄에서 로그인할 때 personal access token (classic) 사용을 안내해요. 권한(scope)은 용도에 맞게 선택해요.
read:packages: 이미지 내려받기write:packages: 이미지 올리기
5.2 업로드 절차
# 토큰을 환경 변수로 저장한 뒤 로그인
export CR_PAT=<발급받은 토큰>
echo $CR_PAT | docker login ghcr.io -u <GitHub 사용자명> --password-stdin
# 태그 붙이기
docker tag myapp:1.0 ghcr.io/<계정 또는 조직>/myapp:1.0
# 업로드
docker push ghcr.io/<계정 또는 조직>/myapp:1.0
--password-stdin을 쓰면 토큰이 명령 기록(history)에 남지 않아요.
5.3 공개 범위
공식 문서에 따르면 패키지를 처음 올리면 기본 공개 범위는 비공개(private)예요. 공개로 바꾸려면 패키지 설정에서 변경해요.
6. 핵심 정리
- 컨테이너 레지스트리는 이미지를 저장하고 공유하는 중앙 저장소예요.
- 레지스트리 > 리포지토리 > 태그 순서로 범위가 좁아져요.
- 호스트를 생략하면 Docker Hub, 태그를 생략하면
latest로 해석돼요. latest는 기본 이름일 뿐이에요. 운영에서는 버전 태그나 다이제스트를 써요.- GHCR은
ghcr.io주소를 쓰고, 첫 업로드 시 기본 비공개예요.
7. 추가 정보
다른 레지스트리
공식 문서는 Docker Hub 외에도 클라우드 사업자의 레지스트리(Amazon ECR, Azure Container Registry 등)와 직접 운영하는 레지스트리(Harbor, GitLab Container Registry 등)를 예로 들어요.
주의사항
- 이미지 안에 비밀번호나 키를 넣지 마세요. 이미지에 접근 권한이 있는 사람은 내용을 확인할 수 있어요.
- 리포지토리 이름은 소문자로 작성해요. 대문자가 섞이면 이미지 이름 형식 오류가 발생해요.
- Docker Hub에는 요청 횟수 제한이 있어요. 구체적인 한도는 요금제에 따라 달라지므로 공식 문서에서 확인하세요.
'운영체제 및 플랫폼 > Docker(도커)' 카테고리의 다른 글
| GitHub Actions 사용법 기초 — 워크플로·잡·스텝 개념 한 번에 정리 (0) | 2026.09.24 |
|---|---|
| 멀티 스테이지 빌드로 도커 이미지 크기 줄이기 — 빌드 도구는 두고 결과물만 담기 (0) | 2026.09.23 |
| Docker Compose 사용법 — 여러 컨테이너를 파일 하나로 관리하기 (0) | 2026.09.21 |
| 도커 네트워크 개념 정리 — 컨테이너끼리 통신하는 방법과 포트 공개 (0) | 2026.09.18 |
| 도커, Dockerfile, 도커파일작성법, 도커빌드, 빌드캐시, dockerignore, CMD ENTRYPOINT 차이, 도커이미지, 컨테이너, DevOps (0) | 2026.09.17 |