[Docker 이해하기] 6. Docker 이미지 공개
이 장에서는 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 업로드
- GitHub 레포지토리에 Dockerfile을 포함한 코드를 업로드한다.
참고: https://github.com/tituvely/Docker_Automated_Build
Docker Hub에 로그인
- Docker Hub에 로그인 한 후 [Settings] -> [Linked Accounts]에 가서 GitHub과 연결한다.
- Docker Hub에서 [Create Repository]를 클릭한 후, Github의 레포지토리와 연결해준다.
- Docker Hub에서 빌드가 진행되며 Docker image가 생성된 것을 확인할 수 있다.
- 빌드가 진행되지 않았다면, 빌드를 직접 Trigger해준다.
- 참고: https://hub.docker.com/r/tituvely/automated-build-test
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
- 다운받은 Dockerfile로부터 Docker image를 빌드한다
# docker-local이라는 이름의 이미지를 생성한다
$ docker build -t docker-local .
- Docker image에 태그를 붙인다
- docker [로컬의 이미지명] [업로드할 레지스트리의 주소:포트 번호]/[이미지명]
- 프라이빗 네트워크 안의 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
- 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
- 로컬에 저장되어있는 이미지 삭제
- 이미지 업로드가 완료되었으므로 로컬에 저장되어 있는 이미들을 삭제한다.
$ 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 이미지 업로드/다운로드해보자.
본문은 'Asa Shijo, <완벽한 IT 인프라 구축을 위한 Docker>, 정보문화사(2020)' 를 참고하여 정리한 글입니다.
[참고: 완벽한 IT 인프라 구축을 위한 Docker]
Author And Source
이 문제에 관하여([Docker 이해하기] 6. Docker 이미지 공개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@titu/Docker-이해하기-6.-Docker-이미지-공개저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)