Docker – local mirror

Dockerhub 제한 발표

https://www.docker.com/pricing/resource-consumption-updates

  • 안쓰는 리포지터리 삭제
  • 다운로드 제한

클라우드를 사용하는 경우에는 aws, gcp에서 클라우드 제공하는 미러 사용
앞으로는 어떻게든 mirror가 자동으로 잡히는 방향으로 설정이 잡히겠지만
아직까지는 수동으로 설정을 해 줘야한다.

dns를 잡아서 자동으로 처리 해 버릴수도 있지만 마음대로 그렇게 했다가 오류가 발생할 가능성도 있으니
개별 서버는 개별적으로 mirror 설정을 잡아줘야 한다

로컬 proxy registry 설치

https://github.com/docker/distribution

도커 소스코드가 생각보다 잘 관리되지 않고 있는 것 같다. 의존성 때문인지
https://github.com/docker/engine
이게 도커 메인코드인데 여기도 registry가 있는데 이걸 안쓰고 위의 리포를 사용해야한다.
그리고 moby는 뭘까

보통 받는이미지를 받고 또받고 하는데 이 과정에서 서버 부하가 과도하게 가니까 이걸 로컬 프록시로 처리 해 준다. 또 컨테이너 업로드는 dockerhub, quay, ecr, 개별설치 뭐가 됐건 레지스트리를 지정하고 할테니까
PROXY가 중요

도커 커맨드라인 실행

https://maelvls.dev/docker-proxy-registry-kind/

docker run -d --name docker-proxy-registry --restart=always -p 5000:5000 -e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io registry:2

docker compose

https://docs.docker.com/registry/deploying/

registry:
  restart: always
  image: registry:2
  ports:
    - 5000:5000
  environment:
    REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
    REGISTRY_HTTP_TLS_KEY: /certs/domain.key
    REGISTRY_AUTH: htpasswd
    REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
    REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
  volumes:
    - /path/data:/var/lib/registry
    - /path/certs:/certs
    - /path/auth:/auth

도커 데몬에 mirror에서 다운받도록 설정

도커 설정파일

  • /lib/systemd/system/docker.service 서비스실행시
  • /etc/docker/daemon.json 원래파일
  • /etc/systemd/system/docker.service.d 환경변수형태로
    https://docs.docker.com/config/daemon/systemd/

접속테스트 daemon.json, 윈도우 맥에서는 태스크아이콘에서 설정파일 편집

https서버인 경우

{
    "insecure-registries" : [
    ],
    "registry-mirrors": ["https://dockerhub-mirrror-addr.kr/"],
    "debug" : true,
    "experimental" : false
}

로컬 http로 실행하는 경우

{
  "insecure-registries": [
    "127.0.0.1:5000"
  ],
  "registry-mirrors": [
    "http://127.0.0.1:5000"
  ],
  "debug": true,
  "experimental": false
}

실행시킨 도커 로그를 켜놓은 다음
docker pull ubuntu를 해보면
로그에서 해당 서버를 통해 다운받는걸 확인할 수 있다

quay나 aws쓰는 경우에도
개발시에 자동으로 도커 이미지 받다보면
서버를 엄청 긁어댈 수도 있는데 그럴경우 속도도 더 빠르고 좋다.