이 장에서는 Docker의 공식 레지스트리인 'Docker Hub'와 프라이빗 레지스트리 구축 방법에 대해 살펴보기로 한다.
Docker 레지스트리는 Docker 이미지의 저장소이다.
Dockerfile로부터 자동으로 Docker 이미지를 생성하는 방법에 대해 알아보기로 한다.
GitHub계정과 Docker Hub 계정을 연결해서 자동으로 이미지를 빌드해보기로 한다.
$ docker image pull tituvely/automated-build-test
생성한 Docker 이미지를 Docker Hub와 같은 퍼블릭 레지스트리에 공개하고 싶지 않은 경우가 생길 수 있다. 이 같은 경우에는 프라이빗 레지스트리를 구축해 이미지를 관리할 수 있다.
Docker 레지스트리를 프라이빗 네트워크 안에서 구축하려면 Docker의 공식 이미지 인 registry를 이용한다.
# registry 검색
$ docker search registry
# registry 다운로드
$ docker image pull registry
# 이미지 확인
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
registry latest 1fd8e1b0bb7e 3 months ago 26.2MB
# 다운로드한 registry 이미지를 바탕으로 레지스트리용 컨테이너를 시작
# 레지스트리는 5000번 포트를 사용하므로 -p 옵션을 사용하여 포트를 전송함
$ docker container run -d -p 5000:5000 --name registry registry
# 컨테이너 확인
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dceacb071664 registry "/entrypoint.sh /etc…" 7 seconds ago Up 6 seconds 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp registry
위 코드를 모두 실행하였다면 프라이빗 레지스트리가 구축이 된 것이다.
아래의 샘플 코드를 따라해보며 Docker 이미지를 프라이빗 레지스트리에 업로드해본다.
$ git clone https://github.com/asashiho/dockertext2
$ cd dockertext2/chap05/multi-stage
# docker-local이라는 이름의 이미지를 생성한다
$ docker build -t docker-local .
# 로컬에 작성한 'docker-local'라는 이름의 이미지를 localhost의 5000번 포트에서 작동하는 레지스트리에 'docker-remote'라는 이름으로 업로드하기 위해 태그를 붙인다.
$ docker image tag docker-local localhost:5000/docker-remote
# 태그가 붙은 이미지가 만들어진 것을 확인할 수 있다.
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost:5000/docker-remote latest 0349465b1ddf About a minute ago 6.11MB
docker-local latest 0349465b1ddf About a minute ago 6.11MB
$ docker image push localhost:5000/docker-remote
Using default tag: latest
The push refers to repository [localhost:5000/docker-remote]
9e39608ece28: Pushed
fba2bd6b8449: Pushed
5b8c72934dfc: Pushed
latest: digest: sha256:0660fa2d7e20245a3cf844dd4bbdf94e3d416fb9178595018680998340a81ddb size: 945
$ docker iamge rm localhost:5000/docker-remote
$ docker image rm docker-local
# localhost의 5000번 포트에서 작동하는 레지스트리로부터 docker-remote라는 이름의 이미지를 다운로드 함
$ docker image pull localhost:5000/docker-remote
$ docker image ls
# 프라이빗 레지스트리로부터 다운로드한 이미지를 사용하여 컨테이너를 시작
$ docker container run -it localhost:5000/docker-remote
프라이빗 레지스트리에서는 Docker 이미지를 영구 데이터로 관리할 필요가 있으므로 이를 주의해야 한다.
Docker 이미지는 인프라 구성 요소에서 애플리케이션의 개발 환경 및 실행 모듈도 포함하기 때문에 용량이 큰 경우가 있다. 이런 이미지를 모두 개발용 클라이언트 PC나 온프레미스 환경에서 관리하려면 비용과 시간이 많이 든다. 퍼블릭 클라우드에서는 Docker 이미지를 프라이빗으로 관리할 수 있는 매니지드 서비스가 제공되므로 이를 이용해 스토리지 운용이라는 힘든 작업에서 해방될 수 있다.
Google Cloud Platform(GCP)에서는 Docker 이미지를 프라이빗으로 관리할 수 있는 'Google Container REgistry'를 제공한다. 아래 링크를 참조하여 GCP에서 Google Container Registry 를 이용하여 Docker 이미지 업로드/다운로드해보자.
본문은 'Asa Shijo, <완벽한 IT 인프라 구축을 위한 Docker>, 정보문화사(2020)' 를 참고하여 정리한 글입니다.
[참고: 완벽한 IT 인프라 구축을 위한 Docker]