[Docker 이해하기] 6. Docker 이미지 공개

Titu·2021년 7월 26일
0

이 장에서는 Docker의 공식 레지스트리인 'Docker Hub'프라이빗 레지스트리 구축 방법에 대해 살펴보기로 한다.

Docker 레지스트리는 Docker 이미지의 저장소이다.

6.1 Docker 이미지의 자동 생성 및 공개

Dockerfile로부터 자동으로 Docker 이미지를 생성하는 방법에 대해 알아보기로 한다.

Automated Build

  • Docker Hub에는 버전 관리 툴인 GitHub 및 Bitbucket과 연결하여 Dockerfile로부터 Docker 이미지를 자동으로 생성하는 'Automated Build' 기능이 있다.

GitHub계정과 Docker Hub 계정을 연결해서 자동으로 이미지를 빌드해보기로 한다.

GitHub에 Dockerfile 업로드

Docker Hub에 로그인

  • Docker Hub에 로그인 한 후 [Settings] -> [Linked Accounts]에 가서 GitHub과 연결한다.
  • Docker Hub에서 [Create Repository]를 클릭한 후, Github의 레포지토리와 연결해준다.
  • Docker Hub에서 빌드가 진행되며 Docker image가 생성된 것을 확인할 수 있다.

Docker image 다운로드

  • 로컬 환경에서 Docker Hub로부터 직접 생성한 Docker image를 다운로드 받아본다.
$ docker image pull tituvely/automated-build-test

6.2 Docker Registry를 사용한 프라이빗 레지스트리 구축

생성한 Docker 이미지를 Docker Hub와 같은 퍼블릭 레지스트리에 공개하고 싶지 않은 경우가 생길 수 있다. 이 같은 경우에는 프라이빗 레지스트리를 구축해 이미지를 관리할 수 있다.

로컬 환경에 Docker 레지스트리 구축하기

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 이미지 업로드

아래의 샘플 코드를 따라해보며 Docker 이미지를 프라이빗 레지스트리에 업로드해본다.

$ git clone https://github.com/asashiho/dockertext2
$ cd dockertext2/chap05/multi-stage
  1. 다운받은 Dockerfile로부터 Docker image를 빌드한다
# docker-local이라는 이름의 이미지를 생성한다
$ docker build -t docker-local . 
  1. Docker image에 태그를 붙인다
    • docker [로컬의 이미지명] [업로드할 레지스트리의 주소:포트 번호]/[이미지명]
      • 프라이빗 네트워크 안의 Docker 레지스트리에 업로드하려면 해당 문법을 사용하여 이미지에 태그를 붙여야 한다.
# 로컬에 작성한 '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
  1. Docker image를 프라이빗 레지스트리에 업로드한다.
$ 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
  1. 로컬에 저장되어있는 이미지 삭제
    • 이미지 업로드가 완료되었으므로 로컬에 저장되어 있는 이미들을 삭제한다.
$ docker iamge rm localhost:5000/docker-remote
$ docker image rm docker-local

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

# localhost의 5000번 포트에서 작동하는 레지스트리로부터 docker-remote라는 이름의 이미지를 다운로드 함
$ docker image pull localhost:5000/docker-remote

$ docker image ls

# 프라이빗 레지스트리로부터 다운로드한 이미지를 사용하여 컨테이너를 시작
$ docker container run -it localhost:5000/docker-remote

프라이빗 레지스트리에서는 Docker 이미지를 영구 데이터로 관리할 필요가 있으므로 이를 주의해야 한다.

6.3 GCP(Google Cloud Platform)를 사용한 프라이빗 레지스트리 구축

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

Google Cloud Platform(GCP)에서는 Docker 이미지를 프라이빗으로 관리할 수 있는 'Google Container REgistry'를 제공한다. 아래 링크를 참조하여 GCP에서 Google Container Registry 를 이용하여 Docker 이미지 업로드/다운로드해보자.

Container Registry 빠른 시작 가이드


본문은 'Asa Shijo, <완벽한 IT 인프라 구축을 위한 Docker>, 정보문화사(2020)' 를 참고하여 정리한 글입니다.

[참고: 완벽한 IT 인프라 구축을 위한 Docker]

profile
This is titu

0개의 댓글