일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 유니티
- 도커
- git
- c# 윈폼
- Python
- Algorithm
- 플러터
- Data Structure
- c#
- jupyter lab
- 다트 언어
- gitlab
- c# 추상 클래스
- dart 언어
- c언어
- Houdini
- github
- C언어 포인터
- c# winform
- Flutter
- C# delegate
- 포인터
- 깃
- C++
- jupyter
- 구조체
- Unity
- HTML
- vim
- docker
- Today
- Total
nomad-programmer
[DevOps/Docker] 클라우드 서비스를 사용한 Private Docker 저장소 구축 본문
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
// 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 이미지를 공유할 수 있기 때문에 자사에서 개발한 라이브러리 등을 공유하는 일도 가능하다.