이번 챕터에서는 레지스트리 운영하기를 실습으로 진행할거야!!
먼저 첫번째!
== Public Registry ==
여기서 말하는 Public Registry는 Docker Hub를 말하는거야
그럼 하나의 키워드(httpd)로 컨테이너 이미지를 검색해보자!
docker search httpd
hub.docker.com에 배포된 컨테이너 이미지들 중 'httpd' 키워드를 포함하는 이미지들의 목록이 나온다!
Official Image와 Automated Image들이 함께 표시되니 신뢰할 수 있는 이미지를 가져올 수 있다!
그럼 한 번 컨테이너 이미지를 가져와보자!
docker pull httpd:latest
httpd 라는 이름을 가진 컨테이너 이미지의 최신버전을 가져오는 명령어다!
httpd 컨테이너 이미지를 잘 가져왔다!
가져온 httpd 컨테이너 이미지를 내 레포지토리에 업로드 하고자 한다!
그렇기 때문에 Docker Hub 로그인을 먼저 진행해야 한다
docker login
로그인 완료!!
하지만 이전 챕터에서 얘기했듯 컨테이너 이미지 태그에 Docker Hub 계정이 포함되어 있지 않으면
Permission Denied 에러가 뜬다
그러면 가져온 httpd 컨테이너 이미지의 태그를 변경해보자
docker tag httpd:latest <Docker Hub ID>/httpd:latest
(docker tag 커맨드는 태그 변경이 아닌 새로운 태그로 복사하는 커맨드로 보인다)
이제는 httpd 컨테이너 이미지를 내 Docker Hub 레포지토리에 올려보자!
docker push <Docker Hub ID>/httpd:latest
이렇게 Docker Hub 레포지토리에 잘 올라온 것을 확인할 수 있다!!
이렇게 Docker Hub의 내 레포지토리에 올린 컨테이너 이미지들은 누구나 볼 수 있고 누구나 쓸 수 있다
물론, Docker Hub 내에서 프라이빗 레지스트리를 만들 수 있지만
무료버전에서는 한 개의 레지스트리만 생성 가능하고, 그 이상은 비용을 지불해야 한다!
하지만 굳이 Docker Hub에 비용을 지불하면서 프라이빗 레지스트리를 생성하지 않고,
회사에서 프라이빗 레지스트리를 직접 만들어서 운용해도 된다
== Private Registry ==
이번엔 프라이빗 레지스트리를 운영해보려고 한다
근데 프라이빗 레지스트리를 왜 써야 할까?
첫째, 외부 네트워크 연결이 안 된 상태에서도 자유롭게 사용하고 싶을 때
둘째, 보안 등의 이유로 사내에서만 사용하는 레지스트리가 필요할 때
자, 그럼 프라이빗 레지스트리를 직접 만들어보자!
우리는 Docker Hub에 올라와 있는 registry라는 이름의 컨테이너 이미지로 프라이빗 레지스트리를 만들거다!
registry 컨테이너 이미지를 가져와서 실행해보자!
docker run -d -p 5000:5000 --restart always --name registry registry:2
# -p 5000:5000 => 5000번 포트로 포워딩
# --restart always => 오류발생 및 docker 서비스가 시작될 때 자동으로 시작하도록 함
# -d 옵션, registry registry:2 => registry 컨테이너 이미지를 'registry:2' 라는 이름으로 데몬 실행
registry 컨테이너 이미지를 pull 해와서 실행까지 잘 됐다!
여기서 한가지 짚고 넘어가야할 점!
우리는 지금까지 <Docker Hub Id>/httpd:latest 라는 태그를 사용해왔다
이 태그를 해석하면 'Docker Hub ID의 레포지토리에 있는 httpd의 최신버전 컨테이너 이미지' 라는 뜻이다
그렇다면 우리가 방금 만든 레지스트리에 있는 컨테이너 이미지는 어떻게 태그해야 할까???
localhost:5000/httpd:latest
# localhost의 5000번 포트에 연결된 레포지토리에 있는 httpd의 최신버전 컨테이너 이미지
위와 같이 태깅을 해주면 된다!
그러면 우리가 가져온 httpd 컨테이너 이미지의 태그를 변경해서 로컬 레지스트리에 push 해보자!
docker tag httpd:latest localhost:5000/httpd:latest
docker push localhost:5000/httpd:latest
엥? 그럼 이 로컬 레지스트리에는 들어갔는지 어떻게 확인하지...?
리눅스는 모든 것을 파일로 다루기 떄문에 이것 또한 파일로 저장되어있어!
경로를 알려줄게
/var//lib/docker/volumes/<Hashing된 이미지>/_data/docker/registry/v2/repositories
파일 시스템의 Depth가 엄청 깊다..
이렇게 로컬에 레지스트리를 생성해서 쓸 수도 있고,
아니면 <IP주소:포트번호>/httpd:latest 이런 식으로 회사 내부 서버의 IP 주소로 레지스트리를 생성해도 되고,
개인용 NAS가 있다면 그 NAS IP 주소로 레지스트리를 생성해도 돼 (단, 이 경우에는 외부 네트워크가 필요할거야)!
이렇게 생성된 프라이빗 레지스트리에는 마음껏 컨테이너 이미지를 저장할 수도 있고,
저장된 컨테이너 이미지를 마음껏 가져올 수도 있어!!
자~ 이렇게 프라이빗 레지스트리도 만들어서 컨테이너 이미지를 push 해봤어!!
이제 프라이빗 레지스트리 만들라고 하면 잘 할 수 있겠지?!
그럼 오늘은 여기까지 하구 다음에 또 보자!
안녕

References
따라하며 배우는 도커(따배도) - Youtube 이성미 강사
'Docker' 카테고리의 다른 글
Docker 톺아보기 14탄 - Docker Container 사용하기 (실습편) (0) | 2022.12.20 |
---|---|
Docker 톺아보기 13탄 - Docker Container 사용하기 (이론편) (0) | 2022.12.20 |
Docker 톺아보기 11탄 - 컨테이너 보관창고 Registry (이론편) (0) | 2022.12.16 |
Docker 톺아보기 10탄 - 도커 컨테이너 만들어보기(실습편) (0) | 2022.12.15 |
Docker 톺아보기 9탄 - 도커 컨테이너 만들어보기(이론편) (0) | 2022.12.13 |