레지스트리란 무엇인가요?
레지스트리란 무엇인가요?
이미지 레지스트리(registry)는 컨테이너 이미지를 저장하고 공유하는 중앙 집중식 위치예요. 공개형이거나 비공개형일 수 있고, Docker Hub가 기본 레지스트리예요. 이 가이드에서 레지스트리와 저장소(repository)의 차이를 이해하고 Docker Hub에 이미지를 빌드하고 푸시하는 방법을 배워요.
출처: 문서
본문
설명
이제 컨테이너 이미지가 무엇이고 어떻게 동작하는지 알았으니, 이런 이미지를 어디에 저장할지 궁금할 거예요.
컨테이너 이미지를 컴퓨터 시스템에 저장할 수는 있지만, 친구들과 공유하거나 다른 머신에서 사용하고 싶다면 어떨까요? 바로 여기서 이미지 레지스트리가 등장해요.
이미지 레지스트리는 컨테이너 이미지를 저장하고 공유하는 중앙 집중식 위치예요. 공개형이거나 비공개형일 수 있어요. Docker Hub는 누구나 사용할 수 있는 공개 레지스트리이며 기본 레지스트리예요.
Docker Hub가 인기 있는 선택지이긴 하지만, 오늘날 Amazon Elastic Container Registry(ECR), Azure Container Registry(ACR), Google Container Registry(GCR) 등 다양한 컨테이너 레지스트리가 있어요. 로컬 시스템이나 조직 내부에서 비공개 레지스트리를 운영할 수도 있어요. 예를 들어 Harbor, JFrog Artifactory, GitLab Container registry 등이 있어요.
레지스트리 대 저장소
레지스트리로 작업하다 보면 레지스트리와 저장소라는 용어가 서로 바꿔 쓸 수 있는 것처럼 들릴 수 있어요. 서로 관련이 있긴 하지만, 완전히 같은 것은 아니에요.
레지스트리는 컨테이너 이미지를 저장하고 관리하는 중앙 집중식 위치인 반면, 저장소는 레지스트리 안의 관련된 컨테이너 이미지들의 모음이에요. 프로젝트에 따라 이미지를 정리하는 폴더라고 생각하면 돼요. 각 저장소는 하나 이상의 컨테이너 이미지를 담고 있어요.
다음 다이어그램은 레지스트리, 저장소, 이미지 사이의 관계를 보여줘요.
flowchart TB
subgraph Registry
subgraph A["Repository A"]
A1["project-a:v1.0"]
A2["project-a:v2.0"]
end
subgraph B["Repository B"]
B1["project-b:v1.0"]
B2["project-b:v1.1"]
B3["project-b:v2.0"]
end
end
Tip Docker Personal 플랜은 비공개 저장소 하나와 무제한 공개 저장소를 제공해요. 무제한 비공개 저장소를 이용하려면 Docker Team 플랜으로 업그레이드하세요.
직접 해보기
이 실습에서는 Docker Hub 저장소에 Docker 이미지를 빌드하고 푸시하는 방법을 배워요.
무료 Docker 계정 가입
- 아직 만들지 않았다면 Docker Hub 페이지로 가서 새 Docker 계정에 가입해요. 이메일로 전송된 인증 단계를 반드시 완료하세요.
- Google이나 GitHub 계정으로 인증할 수 있어요.
첫 번째 저장소 만들기
- Docker Hub에 로그인해요.
- 오른쪽 상단 모서리의 Create repository 버튼을 선택해요.
- 네임스페이스(대부분 사용자 이름)를 선택하고 저장소 이름으로
docker-quickstart를 입력해요. - 가시성을 Public으로 설정해요.
- Create 버튼을 선택해 저장소를 만들어요.
그게 전부예요. 첫 번째 저장소를 성공적으로 만들었어요. 🎉
이 저장소는 지금 비어 있어요. 여기에 이미지를 푸시해서 채워 볼게요.
Docker Desktop으로 로그인
- 아직 설치하지 않았다면 Docker Desktop을 다운로드하고 설치해요.
- Docker Desktop GUI에서 오른쪽 상단 모서리의 Sign in 버튼을 선택해요.
샘플 Node.js 코드 클론
이미지를 만들려면 먼저 프로젝트가 필요해요. 빠르게 시작할 수 있도록 github.com/dockersamples/helloworld-demo-node에 있는 샘플 Node.js 프로젝트를 사용할 거예요. 이 저장소에는 Docker 이미지를 빌드하는 데 필요한 사전 빌드된 Dockerfile이 들어 있어요.
Dockerfile의 세부 사항은 걱정하지 마세요. 이후 섹션에서 배울 거예요.
- 다음 명령으로 GitHub 저장소를 클론해요.
git clone https://github.com/dockersamples/helloworld-demo-node - 새로 만들어진 디렉터리로 이동해요.
cd helloworld-demo-node - 다음 명령을 실행해 Docker 이미지를 빌드하고,
YOUR_DOCKER_USERNAME을 여러분의 사용자 이름으로 바꿔요.docker build -t /docker-quickstart .Note
docker build명령 끝에 점(.)이 포함되도록 하세요. 이 점은 Docker에게 Dockerfile을 어디서 찾을지 알려 줘요. - 다음 명령을 실행해 새로 만든 Docker 이미지를 나열해요.
다음과 같은 출력이 보여요.docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE /docker-quickstart latest 476de364f70e 2 minutes ago 170MB - 다음 명령을 실행해 이미지를 테스트하기 위해 컨테이너를 시작해요. (사용자 이름을 여러분의 것으로 바꾸세요)
브라우저에서 http://localhost:8080 을 방문해 컨테이너가 동작하는지 확인할 수 있어요.docker run -d -p 8080:8080 /docker-quickstart docker tag명령으로 Docker 이미지에 태그를 지정해요. Docker 태그를 사용하면 이미지에 라벨을 붙이고 버전을 관리할 수 있어요.docker tag /docker-quickstart /docker-quickstart:1.0- 마지막으로
docker push명령으로 새로 빌드한 이미지를 Docker Hub 저장소에 푸시할 차례예요.docker push /docker-quickstart:1.0 - Docker Hub를 열고 저장소로 이동해요. Tags 섹션으로 이동해 방금 푸시한 이미지를 확인해요.
이 실습에서 Docker 계정에 가입하고, 첫 번째 Docker Hub 저장소를 만들고, 컨테이너 이미지를 빌드하고 태그를 붙여 Docker Hub 저장소에 푸시했어요.
추가 자료
다음 단계
컨테이너와 이미지의 기본을 이해했으니, 이제 Docker Compose에 대해 배울 준비가 됐어요. Docker Compose란 무엇인가요?