목차
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를 데이터 저장 장소로 사용