쿠버네티스 교육/강의 내용 정리

220617_3_도커_프라이빗 레지스트리 구축

kimhope 2022. 6. 17. 18:52
728x90

실습 환경 리소스 정리


컨테이너 & 이미지 모두 삭제

도커 컨테이너 모두 삭제

  • 구동 중인 모든 컨테이너 중지, 삭제
docker stop $(docker ps -aq) 
docker rm $(docker ps -aq)

 

도커 이미지 모두 삭제

docker rmi $(docker images -q)

 

  • 에러 발생: IMAGE ID 가 동일하여 충돌이 일어나 삭제할 수 없음
  • Error response from daemon: conflict: unable to delete e66264b98777 (must be forced) - image is referenced in multiple repositories
  • 해결: 강제 삭제
docker rmi -f $(docker ps -aq)

 


 

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


 

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

  • Docker 레지스트리는 프라이빗 네트워크 안에서만 이미지를 공개할 수 있음
  • registry 검색
[root@localhost ~]# docker search registry
NAME                            DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
registry                        The Docker Registry 2.0 implementation for s…   3614      [OK]
~

 

  • registry 다운로드
[root@localhost ~]# docker image pull registry

 

  • registry 이미지 확인
[root@localhost ~]# docker image ls
REPOSITORY     TAG       IMAGE ID       CREATED       SIZE
registry       latest    773dbf02e42e   3 weeks ago   24.1MB

 

  • registry 컨테이너 시작
  • 레지스트리는 5000번 포트를 사용함
[root@localhost ~]# docker container run -d -p 5000:5000 --name registry registry
09ad150b0b06f7e8407ae64893b1f38189eda07af8507b0e857c85df2c5e91fc

 

  • registry 컨테이너 확인
[root@localhost ~]# docker container ls
CONTAINER ID   IMAGE      COMMAND                  CREATED              STATUS              PORTS                                       NAMES
09ad150b0b06   registry   "/entrypoint.sh /etc…"   About a minute ago   Up About a minute   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   registry

 

Docker 이미지 업로드

  • Dockerfile.base 베이스 이미지 작성 후 빌드
# Dockerfile.base 작성
[root@localhost Dockerfile]# vi Dockerfile.base

FROM ubuntu:16.04

RUN apt-get -y update && apt-get -y upgrade
RUN apt-get -y install nginx

EXPOSE 80

ONBUILD ADD website.tar /var/www/html/

CMD ["nginx", "-g", "daemon off;"]

# web-base 이미지 빌드
[root@localhost Dockerfile]# docker build -t web-base -f Dockerfile.base .

 

  • index.html 작성 후 tar 파일로 저장
[root@localhost Dockerfile]# vi index.html

<!doctype html>
<html>
  <head>
    <h1>Private Registry</h1>
  </head>
  <body>
    <img src="https://miro.medium.com/max/560/1*0DFwvFiEE0BiSG6hC8Q-8Q.png">
  </body>
</html>


[root@localhost Dockerfile]# tar -cvf website.tar index.html

 

  • Dockerfile 작성
[root@localhost Dockerfile]# vi Dockerfile

FROM web-base

 

  • webpage 이미지 빌드
[root@localhost Dockerfile]# docker build -t webpage .

 

  • webpage 이미지 태그 설정
  • 로컬 이미지명: webpage
  • localhost의 5000번 포트에서 작동
  • 레지스트리에 업로드할 이미지명: rg-webpage
  • webpage와 rg-webpage의 IMAGE ID는 동일함 => 동일한 이미지임을 알 수 있음
[root@localhost Dockerfile]# docker image tag webpage localhost:5000/rg-webpage

[root@localhost Dockerfile]# docker image ls
REPOSITORY                  TAG       IMAGE ID       CREATED          SIZE
webpage                     latest    38288fd45692   3 minutes ago    222MB
localhost:5000/rg-webpage   latest    38288fd45692   3 minutes ago    222MB

 

  • 이미지 업로드
[root@localhost Dockerfile]# docker image push localhost:5000/rg-webpage
~
sha256:d4013a81e4478edbc5cda16ee11e92fb556f95a3f155edaa00245c6ae2df29bc size: 1781

 

  • 로컬 이미지 삭제
[root@localhost Dockerfile]# docker image rm localhost:5000/rg-webpage:latest
[root@localhost Dockerfile]# docker image rm webpage

 

 

 

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

  • 프라이빗 레지스트리에서 이미지 다운로드
[root@localhost Dockerfile]# docker image pull localhost:5000/rg-webpage
~
sha256:d4013a81e4478edbc5cda16ee11e92fb556f95a3f155edaa00245c6ae2df29bc
Status: Downloaded newer image for localhost:5000/rg-webpage:latest
localhost:5000/rg-webpage:latest

 

 

  • 이미지 목록 표시
[root@localhost Dockerfile]# docker image ls
REPOSITORY                  TAG       IMAGE ID       CREATED          SIZE
localhost:5000/rg-webpage   latest    38288fd45692   10 minutes ago   222MB

 

  • 작동 확인
  • 웹 브라우저에서 localhost IP:80로 접속
[root@localhost Dockerfile]# docker container run -d -p 80:80 localhost:5000/rg-webpage
d50b9e8f1baa1bfbb41cac59ffd20308f3760e781045891819710f96943be16c

 

  • 웹 브라우저에서 localhost IP:8888로 접속
[root@localhost Dockerfile]# docker container run -d -p 8888:80 localhost:5000/rg-webpage
c39e04736962f7c5ece162681557d5123e25c9fd69420bd4e44cf0371fcbf429

728x90