0부터 시작하는 Docker 공부 - Private Registry 구현

Jaehong Lee·2022년 8월 19일
2
post-thumbnail

0. 들어가기 전에

docker pull registry
docker pull hyper/docker-registry-web
  • 다음 두 개의 이미지를 다운 받자

  • 이를 이용해 사설 저장소를 만들어보자

1. 이미지 저장소와 인증

이미지 저장소에는 먼저, 인증 정보를 보내야 한다

  • public registry : docker hub - 불특정 다수가 접속할 수 있는 공간이고, 모든 사용자가 회원 가입을 통해 이미지를 push 할 수 있다. pull 은 로그인을 하지 않으면, Ip 별로 하루에 100개 받을 수 있다

    • 로그인 정보가 있다면, 도커 허브에 접속시 config.json 에 있는 정보를 먼저 보내서 인증 정보를 확인 받는다
    • 로그인 정보가 있다면, Ip 가 아닌 사용자별로 100개를 받을 수 있다
  • private registry : 특정 사용자 / 그룹 사용자만 접속할 수 있다. private registry 에 로그인 할 때는 ' docker login 주소 ' 를 입력해야 한다

  • local registry : 사용자만 사용한다. 컨테이너 생성시 1차적으로 local registry 를 검색한다

2. registry 구축

https://docs.docker.com/registry/deploying/ 를 참조하자

  • 사설 저장소는 private-registry 이미지를 이용하여 구축 가능하다. 이 이미지를 컨테이너로 배포하여 사용한다
    • version 1 : python 으로 제작
    • version 2 : go 로 제작 ( 일반적으로 version 2 사용 )

  • registry 는 5000 번 Port 를 사용한다. registry version 은 2 를 사용한다

registry 구축해보기

docker container run -d -p 5000:5000 --restart=always -name registry -v /home/rapa/registry:/var/lib/registry registry
  • 위 코드를 통해 registry 컨테이너를 배포하여 저장소를 구축하자
  • 컨테이너를 배포하였다. 현재 이 저장소는 다른 사용자와 공유하는 것이 아닌 사용자 혼자 사용하는 것 이다

3. 이미지 Push 및 조회

일반적으로 이미지의 이름은 아래와 같은 형식을 취해야 한다

  1. public -> gildong/myweb:1.0 처럼 앞에 USER ID 를 입력해야 한다
  2. private -> reg.test.com:5000/myweb:1.0 or 192.168.1.101:5000/myweb:1.0 처럼 앞에 주소를 입력해야 한다
  3. local -> myweb:1.0 처럼 이미지 이름과 태그만 입력하면 된다

이미지 형식 변경

docker tag centos:7 localhost:5000/mycentos:1.0
  • 위 코드를 통해 private registry 에 올릴 수 있게 이미지의 형식을 변경하자

이미지 Push

docker push localhost:5000/mycentos:1.0

  • registry에 업로드 시켜주자

  • 원래라면, push 할 때 docker 에서 해당 주소에 대해 인증 정보가 있는지 확인한다. 만약 image push 명령을 내리면, 먼저 사용자의 docker 에서 config.json 을 보고, 주소에 대한 인증 정보를 조회하고, 인증 정보가 있다면, push 를 수행한다

registry 조회

  • 이렇게 registry 에 저장된 것은 curl 을 통해 조회할 수 있다
curl -XGET localhost:5000/v2/_catalog
  • 대문자 X 를 통해 GET 과 같은 METHOD 를 사용할 수 있다
  • 이를 통해 저장소에 mycentos 이미지가 저장되있는 것을 확인할 수 있다

4. 웹 GUI 연결

P. 214

  • 생성한 registry 를 웹 GUI 와 연결하자
docker run -d -p 8080:8080 --name registry-web --link registry:private -e REGISTRY_URL=http://211.183.3.136:5000/v2 -e REGISTRY_NAME=211.183.3.136:5000 --restart=always hyper/docker-registry-web

  • 위와 같이 위에 생성한 registry 와 link 하여 웹 GUI 컨테이너를 배포하자
  • 잘 접속된다

5. registry 의 Image Pull 하기

  • 생성한 registry 에 push 한 image 를 pull 해보자
docker pull localhost:5000/mycentos:1.0

  • 이미지가 잘 Pull 되었다

6. 실습 - 원격지 registry 접속 ( insecure-registry )

외부 클라이언트의 이미지 Pull , Push 를 위해서는 몇 가지 설정이 필요하다 ( p. 212 )

6.1 실습전 네트워크 환경 변경

  • 실습 전 배포한 컨테이너를 다 삭제해주자
  • Ip 를 변경해주자
  • 위의 형식으로 yaml 파일을 작성해주자
  • vmnet 0 으로 변경
  • 네트워크 변경 사항을 적용해주자

6.2 설정 추가

  • --insecure-registry : 보안상 좋지 않지만, 편의를 위해서는 좋다
    • 로컬에서 원격지에 있는 사설 저장소로 접속하기 위해서는 사설 저장소에 인증 정보를 전달해야 한다. 인증 정보는 config.json 파일에서 확인 한다
    • 단, 인증 정보가 없다면 해당 접근을 차단시킨다
    • insecure-registry 는 인증 정보가 없어도 접속하도록 허용하는 설정이다
      • 만약, 로그인을 하면, 인증 결과는 config.json 에 저장된다

    • 원래라면, push 할 때 docker 에서 해당 주소에 대해 인증 정보가 있는지 확인한다. 만약 image push 명령을 내리면, 먼저 사용자의 docker 에서 config.json 을 보고, 주소에 대한 인증 정보가 등록되어있는지 조회하고, 인증 정보가 있다면, push 를 수행한다. 이 인증 정보는 로그인을 통해 생성된다
    • 허나, 지금 우리는 docker login 을 하지 않고, 원격지 registry 에 접속하고자 하므로, 해당 주소에 대해 인증 정보가 없어도 접속을 할 수 있게 설정해준 것이다
    • insecure 설정은 클라이언트에서 하는 것이다

  • 편집기로 위 파일을 열어주자
  • 접속하고자 하는 원격지 registry 의 주소 입력. 옵션을 통해 인증 정보가 없이도 접속 가능하게 한다
  • 편집기로 daemon.json 을 열어주자. 파일이 없다면 새로 생성해주자
  • 접속하고자 하는 원격지 registry 의 주소 입력 해주자
  • 설정 변경 사항을 적용시키게 docker 를 재실행하자

6.3 설정 확인

  • docker info 로 insecure registries 항목을 확인하자

6.4 저장소 생성

  • 저장소 컨테이너 배포

6.5 이미지 형식 변경

  • 이미지 형식을 Push 하고자 하는 주소를 넣어 변경한다

6.6 이미지 Push

  • 이미지를 Push 하자

6.7 registry 확인

  • curl 로 확인하면, 이미지가 잘 Push 되었다

현재는 registry 에 inbound 에 대해 방화벽이나 보안이 아예 없다

사설 저장소로는 registry, harbor 를 사용할 수 있다

참조 ) https://velog.io/@tkfrn4799/harbor-private-docker-registry

7. 차후 만들어볼 환경

  • docker swarm - with registry auth 환경을 만들어볼 것 이다
profile
멋진 엔지니어가 될 때까지

1개의 댓글

comment-user-thumbnail
2024년 11월 6일

안녕하세요! 최근에 클라우드 공부를 시작한 학생입니다. insecure-registry 설정하면 인증 없이 어떻게 접속이 되는지 궁금했었는데 덕분에 잘 이해하고 갑니다👍 공부하면서 궁금한 것들이 있으면 자주 들릴께요!

답글 달기