블록체인
블록체인

Ship : 이미지 공유

목차

Dockerhub

도커에서 제공하는 기본 이미지 저장소
도커 허브는 maven repository와 같이 외부에 공개되어 있는 도커 이미지 레포지토리로 docker pull 명령을 이용하여 컨테이너를 로컬에 받아오거나, Docker image 빌드 시 베이스 이미지 등을 받아오는 데 주로 사용
베이스 이미지(Ubuntu, centos, debian 등 리눅스 배포판의 기본 기능을 제공), 공식 이미지(ruby, golang, java, python) 존재
베이스 이미지에 미들웨어나 라이브러리, 전개할 애플리케이션 등을 넣은 이미지를 겹쳐서 독자적인 도커 이미지를 만듬
회원가입만 하면 대용량의 이미지를 무료로 저장, 무료로 다운로드
기본적으로 모든 이미지는 공개되어 누구나 접근 가능하므로 비공개로 사용하려면 유료 서비스를 이용해야 함(한 개는 무료)
도커 허브는 반드시 public으로만 이미지를 push할 수 있으며 개인 사용자는 하나의 이미지만 private으로 사용 가능
도커 허브를 이용하면 레지스트리 구축 없이 도커 이미지를 저장, 배포할 수 있음
public/private 선택 가능

이미지 다운로드/업로드(docker image pull/push)

docker image pull [옵션] [이미지명[:태그명]]
docker image pull [옵션] [URL]
이미지명에 태그 미지정 시 default 값 : latest
c:\>docker image pull centos:7 7: Pulling from library/centos 2d473b07cdd5: Pull complete Digest: sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987 Status: Downloaded newer image for centos:7 docker.io/library/centos:7
PowerShell
복사
옵션
-a
docker image pull -a [이미지명]
모든 태그 취득
c:\>docker image pull -a centos
PowerShell
복사
docker image push [사용자명/이미지명[:태그명]]

Docker 리포지토리에 로그인/로그아웃(docker login/logout)

docker login -u [사용자명] -p [패스워드] [서버명]
도커 허브가 아닌 다른 환경에 도커 리포지토리가 있는 경우는 서버명 지정
hbeen@DESKTOP-EDC39JU:~$ docker login -u hyebeen -p fjrzlgPqls7! WARNING! Using --password via the CLI is insecure. Use --password-stdin. Login Succeeded Logging in with your password grants your terminal complete access to your account. For better security, log in with a limited-privilege personal access token. Learn more at https://docs.docker.com/go/access-tokens/
Bash
복사

Autoated Build

도커 허브의 기능
Github나 Bitbucket에서 관리되는 도커파일을 바탕으로 도커 이미지를 자동으로 빌드
1. Github에 Dockerfile 업로드
2. Docker Hub의 링크 및 빌드 설정
자동으로 빌드되며 완료되면 리포지토리에 이미지가 추가됨
3. 도커 이미지 취득
hbeen@DESKTOP-EDC39JU:~/sample$ docker image pull hyebeen/my-repo:latest latest: Pulling from hyebeen/my-repo Digest: sha256:1439aefc4a3fc6d85e4be9f0cecc4028cb09f1c218aba19710f1b4e7f39b0eb3 Status: Image is up to date for hyebeen/my-repo:latest docker.io/hyebeen/my-repo:latest
Bash
복사

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

인터넷상에 도커 이미지를 공개하고 싶지 않을때 사용
그러나 도커 이미지 등이 회사 내부에서 비공개적으로 사용되거나 사설 네트워크 등에서 사용되기 위해서는 내부 서버에 도커 레지스트리를 구축해야 함
도커 레지스트리를 프라이빗 네트워크 안에서 구축하려면 도커 스토어에 공개되어 있는 공식 이미지인 registry를 사용
registry version 0 : python, registry version 2: go 언어로 구축되어 있으며 version 2를 사용하는 것이 좋음
1. 도커 registry 이미지 다운
hbeen@DESKTOP-EDC39JU:~/sample$ docker image pull registry
Bash
복사
2. 컨테이너 시작
hbeen@DESKTOP-EDC39JU:~/sample$ docker container run -d -p 5000:5000 --name registry registry d3521b2ea7120527cd67caaf92f790c9687d30da6142b55410007911e0e1ad8c
Bash
복사
레지스트리는 5000번 포트를 사용하므로 5000으로 포트 지정
3.
도커 이미지 빌드
hbeen@DESKTOP-EDC39JU:~/sample$ docker build -t nginximage . hbeen@DESKTOP-EDC39JU:~/sample$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE nginximage latest 45d856f80c43 23 seconds ago 173MB
Bash
복사
4.
도커 이미지 태그 생성
docker image tag [로컬 이미지명] [업로드할 레지스트리 주소:포트번호/이미지명]
프라이빗 네트워크 내 도커 레지스트리에 업로드하려면 이미지에 태그를 붙여야 함
hbeen@DESKTOP-EDC39JU:~/sample$ docker image tag nginximage localhost:5000/nginximage-private hbeen@DESKTOP-EDC39JU:~/sample$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE nginximage latest 45d856f80c43 About a minute ago 173MB localhost:5000/nginximage-private latest 45d856f80c43 About a minute ago 173MB
Bash
복사
5.
이미지 업로드 후 확인
hbeen@DESKTOP-EDC39JU:~/sample$ docker image push localhost:5000/nginximage-private Using default tag: latest The push refers to repository [localhost:5000/nginximage-private] 59fa432c7eab: Pushed 455b0cc5ed10: Pushed 36ffdceb4c77: Pushed latest: digest: sha256:cdb1fb10695471be66c8e6771e870470177fe53973dcb23b8080785118b901ff size: 953
Bash
복사
6.
이미지 다운로드 및 작동 확인
hbeen@DESKTOP-EDC39JU:~/sample$ docker image rm nginximage Untagged: nginximage:latest hbeen@DESKTOP-EDC39JU:~/sample$ docker image rm localhost:5000/nginximage-private Untagged: localhost:5000/nginximage-private:latest Untagged: localhost:5000/nginximage-private@sha256:cdb1fb10695471be66c8e6771e870470177fe53973dcb23b8080785118b901ff Deleted: sha256:45d856f80c43f45e97dd1bfe5f929fd0345da295aad197a166caf17eea718b59 hbeen@DESKTOP-EDC39JU:~/sample$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE hbeen@DESKTOP-EDC39JU:~/sample$ docker image pull localhost:5000/nginximage-private Using default tag: latest latest: Pulling from nginximage-private 08c01a0ec47e: Already exists 0249a3ac8e49: Already exists 5a819ac3368e: Already exists Digest: sha256:cdb1fb10695471be66c8e6771e870470177fe53973dcb23b8080785118b901ff Status: Downloaded newer image for localhost:5000/nginximage-private:latest localhost:5000/nginximage-private:latest hbeen@DESKTOP-EDC39JU:~/sample$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE localhost:5000/nginximage-private latest 45d856f80c43 4 minutes ago 173MB
Bash
복사
** 주의할 점
프라이빗 레지스트리에서 도커 이미지를 영구 데이터로 관리하려면 호스트머신에 볼륨을 공유하거나 스토리지 마련해야 함
다중화 구성, 백업, 서버 감시 등과 같은 운용도 필요
LDAP 등의 인증을 붙이려면 별도의 인증서버를 사용해야 함
용량이 큰 이미지를 개발용 클라이언트 PC나 온프레미스 환경에서 관리하려면 비용과 시간이 많이 들기 때문에 퍼블릭 클라우드에서 제공하는 프라이빗 레지스트리 서비스 사용 고려 필요

클라우드 서비스를 사용한 프라이빗 레지스트리

AWS : Elatic Conation Registry
GCP : Google Container Registry
Google Cloud Storage를 데이터 저장 장소로 사용