Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
05-16 04:51
관리 메뉴

nomad-programmer

[DevOps/Docker] 클라우드 서비스를 사용한 Private Docker 저장소 구축 본문

DevOps/Docker

[DevOps/Docker] 클라우드 서비스를 사용한 Private Docker 저장소 구축

scii 2020. 12. 3. 23:33

Docker 이미지는 인프라 구성 요소에서 래플리케이션의 개발 환경 및 실행 모듈도 포함하기 때문에 용량이 큰 것도 있다. 이런 이미지를 모두 개발용 클라이언트 PC나 온프레미스 환경에서 관리하려면 비용과 시간이 많이 든다. 퍼블릭 클라우드에는 Docker 이미지를 프라이빗으로 관리할 수 있는 매니지드 서비스가 제공되므로 이것을 이용하는 것이 좋다.

Google Cloud Platform (GCP) 은 Docker 이미지를 프라이빗으로 관리할 수 있는 'Google Container Registry' 를 제공하고 있다. 이 서비스는 GCP의 오브젝트 스토리지 서비스인 'Google Cloud Storage' 를 데이터 저장 장소로 사용하고 있다.

Google Container Registry 를 사용하여 Dockerfile로부터 생성한 독자적인 Docker 이미지를 관리하는 방법을 대해 알아보자.


Google Container Registry 준비

Google Container Registry를 이용하려면 API 사용을 허가해야 한다. 브라우저에서 GCP의 웹 콘솔에 로그인하고 [API 및 서비스] -> [라이브러리]를 선택한다.

여기서 'Google Contianer Registry' 를 검색하여 API 설정을 연다. 'Google Container Registry' 액세스 권한 설정 화면이 표시되면 [사용 설정] 버튼을 클릭힌다. 이것으로 웹 콘솔에서의 사전 준비는 끝났다.


Docker 이미지 업로드

Google Container Registry의 준비가 끝났으므로 여기로 Docker 이미지를 업로드한다. Docker 이미지를 업로드할 때는 태그를 설정한다.

Google Container Registry에 업로드하기 위해서는 다음과 같은 규칙으로 이미지에 태그를 붙여야 한다.

// 태그 이름 (Google Container Registry)

docker tag [로컬의 이미지명] [Google Container Registry의 호스트명]/[프로젝트 ID]/[이미지명]

Google Container Resitry의 호스트명은 이미지의 저장 위치에 따라 다음 세 개 중 하나를 선택한다.

  • us.gcr.io 미국
  • eu.gcr.io 유럽
  • asia.gcr.io 아시아

예를 들어 로컬에 있는 'busybox:latest' 라는 이름의 Docker 이미지를 GCP 프로젝트 ID가 'docker-book' 이고, 아시아에 'scii-busybox' 라는 이름으로 업로드하는 경우, Docker 이미지에 대해 다음의 명령으로 태그를 설정한다.

// 태그 설정
$ docker tag busybox:latest asia.gcr.io/docker-book/scii-busybox

$ docker image ls
REPOSITORY                             TAG                 IMAGE ID            CREATED             SIZE
asia.gcr.io/docker-book/scii-busybox   latest              sadlkjl43axd        9 days ago          1.23MB

docker image ls 명령을 사용하여 이미지를 확인하면, 이 이미지의 ID가 원래의 'busybox' 와 똑같다는 것을 알 수 있다. 즉, 실체는 동일한 이미지를 가리킨다.

이와 같이 태그를 설정한 이미지를 Google Container Registry에 업로드한다. 업로드하려면 다음의 gcloud 명령을 사용한다. 

gcloud 명령으로 Docker를 조작할 때는 명령 옵션으로 '--' 가 필요하므로 주의해야 한다.
// 이미지 업로드

$ gcloud docker -- push asia.gcr.io/docker-book/scii-busybox

gcloud가 설치되어 있지 않다면 아래의 링크를 통해 설치하자.

cloud.google.com/sdk/docs/install#deb

 

Google Cloud SDK 설치  |  Cloud SDK 문서

이 페이지에는 Cloud SDK 설치를 선택하고 유지하기 위한 안내가 포함되어 있습니다. 설치 안내 참고: 프록시/방화벽을 사용하는 경우 자세한 설치 방법은 프록시 설정 페이지를 참조하세요. Linux C

cloud.google.com

// gcloud 명령 실행 전 해야 할 사전 작업
$ gcloud init
$ gcloud auth login

이미지 업로드가 완료되었으므로 로컬에 저장되어 있는 이미지는 다음의 명령을 사용하여 삭제한다. 또한 GCP의 프로젝트명과 ID 'docker-book' 은 환경에 따라 바꿔 지정해야 한다.

// 이미지 삭제
$ docker image rm asia.gcr.io/docker-book/scii-busybox
$ docker image rm docker-science

Docker 이미지의 다운로드와 작동 확인

Google Container Registry 상에 있는 이미지를 로컬 환경으로 다운로드하려면 gcloud 명령을 실행한다. 예를 들어 위에서 작성한 GCP의 프로젝트 ID가 'docker-book' 인 아시아 'asia.grc.io' 에서 관리되고 있는 'scii-busybox' 라는 이름의 이미지를 다운로드하는 경우, 다음의 명령을 실행한다.

// 이미지 다운로드

$ gcloud docker -- pull asia.gcr.io/docker-book/scii-busybox

이와 같이 Docker Hub와 똑같은 요령으로 클라우드상의 private 저장소에서 Docker 이미지를 관리할 수 있다. 


Private한 Docker 이미지를 퍼블릭 클라우드에서 관리함으로써 프로그래머는 스토리지의 운용이라는 힘든 작업에서 해당된다. 또한 라이브러리의 버전도 포함한 구성 관리가 가능하므로 로컬 PC든 클라우드든 온프레미스 서버든 상관 없이 똑같은 환경에서 수행할 수 있다는 장점이 있다.

또한 개발팀 내에서 이미지를 공유할 수 있으므로 멤버가 각기 다른 환경에서 수행하는 일은 없다. Docker Hub와 달리 private한 환경에서 Docker 이미지를 공유할 수 있기 때문에 자사에서 개발한 라이브러리 등을 공유하는 일도 가능하다. 

Comments