it-source

기본 도커 레지스트리를 docker.io 에서 개인 레지스트리로 변경하는 방법은 무엇입니까?

criticalcode 2023. 9. 8. 21:33
반응형

기본 도커 레지스트리를 docker.io 에서 개인 레지스트리로 변경하는 방법은 무엇입니까?

기본적으로 명령을 실행하는 경우:

sudo docker pull ruby:2.2.1

기본적으로 docker.io 공식 사이트에서 꺼냅니다.

Pulling repository docker.io/library/ruby

개인 등록부로 변경하려면 어떻게 해야 합니까?그 말은 내가 만약

sudo docker pull ruby:2.2.1

제 개인 등록부에서 가져올 겁니다. 출력은 다음과 같습니다.

Pulling repository my_private.registry:port/library/ruby

업데이트: 설명에 따라 현재 기본 레지스트리를 변경할 수 없습니다. 자세한 내용은 이 문제를 참조하십시오.

호스트와 포트를 사용자 자신의 것으로 대체하여 이 작업을 수행할 수 있어야 합니다.

docker pull localhost:5000/registry-demo

서버가 원격에 있거나 인증이 있는 경우 다음을 사용하여 서버에 로그인해야 할 수 있습니다.

docker login https://<YOUR-DOMAIN>:8080

실행 중:

docker pull <YOUR-DOMAIN>:8080/test-image

여기서 언급하지 않은 도커 허브의 거울(예: 아티팩트 또는 커스텀)의 사용 사례가 있습니다.이는 기본 레지스트리를 변경해야 하는 가장 유효한 경우 중 하나입니다.

다행히 Docker(최소 버전 19.03.3)를 사용하면 미러(Docker CE에서 테스트)를 설정할 수 있습니다.도커 허브에 없는 거울에 추가적인 이미지를 밀어 넣어도 작동할지는 모르겠지만 대신 거울을 사용할 것은 알고 있습니다.도커 설명서: https://docs.docker.com/registry/recipes/mirror/ #Configure-the-descer-descer-descer-decoder.

기본적으로, 당신은 다음과 같은 것을 추가해야 합니다."registry-mirrors": []/etc/docker/daemon.json환경설정 파일.이 거울을 ,https://my-docker-repo.my.company.com,당신의./etc/docker/daemon.json다음을 포함해야 합니다.

{
  "registry-mirrors": ["https://my-docker-repo-mirror.my.company.com"]
}

그런 다음 도커 데몬을 다시 시작합니다.를 하면.docker pull postgres:12는 도커 이미지를 를 가져와야 .는 모든 은든를이는다씬다과다씬pglsn은hrsh다s든를는이과my-docker-repo.my.company.com

이것은 실제로 가능하지만, 정품 도커 CE나 EE 버전은 사용하지 않는 것으로 나타났습니다.

Red Hat의 도커 포크를 '--add-registry' 플래그와 함께 사용하거나 하드 코딩된 기본 레지스트리 네임스페이스/인덱스를 사용하도록 registry/config.go 수정된 소스에서 직접 도커를 빌드할 수 있습니다.

이것에 대한 짧은 대답은 당신이 하지 않거나 최소한 당신은 정말로 하지 말아야 한다는 것입니다.

예, 기본 네임스페이스, 특히 RedHat의 네임스페이스를 변경할 수 있는 컨테이너 실행 시간이 있습니다.그러나 Red Hat은 이제 이러한 기능성을 유감스럽게 생각하여 고객들이 이 기능을 사용하는 것을 단념하게 되었습니다.도커 역시 이를 지지하기를 거부했습니다.

이것이 매우 문제가 되는 이유는 이미지의 모호한 네임스페이스가 발생하기 때문입니다.서로 다른 두 시스템에서 동일한 명령을 실행하면 사용하도록 구성된 레지스트리에 따라 서로 다른 이미지를 끌어 올 수 있습니다.컴퓨터 간에 구성 파일, 헬름 템플릿 및 기타 컨테이너 실행 방법이 공유되므로 실제로 보안 취약성이 발생합니다.

공격자는 사용자가 기본 구성을 변경하여 허브의 이미지 대신 이미지를 실수로 실행할 수 있도록 도커 허브가 아닌 다른 레지스트리의 잘 알려진 이미지 이름에 쪼그려 앉을 수 있습니다.Jenkins와 같은 도구의 포크를 만들고 이미지를 다른 레지스트리에 푸시하는 것은 사소한 일이지만 Jenkins에 로드된 모든 자격 증명을 공격자 서버로 보내는 코드가 있습니다.심지어 올해 PyPI, NPM 및 RubyGems와 같은 다른 패키지 관리자의 보안 취약성 보고서가 발생하기도 했습니다.

대신 컨테이너 d와 같은 컨테이너 실행 시간의 방향은 모든 이미지 이름을 완벽하게 지정하여 도커 허브 자동 확장을 제거하는 것입니다(도커와 같은 컨테이너 위의 툴링은 여전히 기본 확장을 적용하므로 이것이 곧 사라질지 의심됩니다.).

Docker를 사용하면 Hub를 쿼리하기 전에 먼저 쿼리할 Docker Hub에 대한 레지스트리 미러를 정의할 수 있지만, 이는 모든 것이 동일한 네임스페이스 내에 있고 미러는 이미지의 다른 네임스페이스가 아니라 업스트림 이미지의 복사본일 뿐이라고 가정합니다.설정 방법에 대한 TL;DR은 다음과 같습니다./etc/docker/daemon.json그리고 나서.systemctl reload docker:

{
  "registry-mirrors": ["https://<my-docker-mirror-host>"]
}

대부분의 경우 이것은 문제가 되지 않습니다(이 문제는 도커 엔진에 허브가 아닌 레지스트리를 미러링할있는 옵션이 없다는 것입니다).이미지 이름은 구성 파일이나 스크립트에 정의되어 있으므로 해당 파일에 한 번 입력하는 것도 충분히 쉽습니다.또한 구성 파일 및 Helm 템플릿과 같은 도구를 사용하면 레지스트리를 변수로 변환하여 조직이 구성 가능한 레지스트리 이름에서 배포할 이미지를 명시적으로 가져올 수 있습니다.

페도라 디스트로를 사용하는 경우 파일을 변경할 수 있습니다.

/etc/containers/registries.conf

docker.io 도메인 추가 중

도커 공식 입장은 이슈 #11815에서 설명합니다.

이슈 11815: pull 명령에 사용되는 기본 레지스트리 지정 허용

해상도:

앞에서 지적한 것처럼(#11815), 이는 네임스페이스를 조각화하고 커뮤니티에 심각한 손상을 입혀서 도커 파일을 더 이상 휴대할 수 없게 만듭니다.

[Maintener]는 이러한 이유로 이 작업을 종료합니다.

Red Hat에는 이를 허용하는 특정한 구현이 있었습니다(답변서 참조). 그러나 Docker upstream projet에서는 를 거부했습니다.의지했습니다.--add-registry된수수n,/etc/containers/registries.confRHEL/CentOS 7''

편집:

실제로 도커는 레지스트리 미러("Run a Registry as pull-through cache"라고도 함)를 지원합니다.https://docs.docker.com/registry/recipes/mirror/ #프로바이더 구성

두 를 얻을 수 있음)로 인해 지원되지 않을 것으로 보입니다.ubuntu:latest이미지 이름 앞에 호스트를 추가하기만 하면 됩니다.논의에 참여하려면 이 github 이슈를 참조하십시오.

(참고로, 이는 의견 개진을 위한 것이 아니며, 언급된 github 이슈에서 따를 수 있는 토론의 아주 짧은 요약일 뿐입니다.)

/etc/docker/daemon.json에서 다음 옵션을 추가하려고 했습니다. (CentOS7을 사용했습니다.)

"add-registry": ["192.168.100.100:5001"],
"block-registry": ["docker.io"],

그 후, 도커 데몬을 다시 시작했습니다.그리고 docker.io 없이도 작동합니다.이 분이 도움이 되었으면 좋겠습니다.

이전에 다음을 사용하여 이를 달성할 수 있었습니다.DOCKER_OPTS/etc/default/dockerUbuntu 14:04에서 작동하는 config 파일과 Ubuntu 15:04에서 몇 가지 문제가 있었습니다.이것이 고쳐졌는지 확실하지 않습니다.

파일에 합니다./etc/default/docker도커 데몬을 실행하는 호스트에서.개인 레지스트리의 변경 지점이 로컬 네트워크에 설치됩니다.참고: 이 변경을 수행한 후 도커 서비스를 다시 시작해야 합니다.

DOCKER_OPTS="--insecure-registry <priv registry hostname/ip>:<port>"

오늘(곧 2020년)도 유효한 가이가 제시한 원래 답변을 합산합니다.

를 은 과 하는 과 은 를 하는 maven 연습은 은 은 .

를 할 때maven Maven Central Repository는 프록시 역할을 .이 공예품들은 밋밋하고 생립(병)이며, 같은 이름의 항아리를 밀어낼 가능성은 거의 없습니다.

한편, 도커 이미지는 완전히 작동하고 실행 가능하며 환경이며, 도커 허브에서 이미지를 꺼내어 수정한 후 동일한 이름으로 로컬 레지스트리 관리 시스템에서 이 이미지를 푸시하는 것이 매우 합리적입니다. 기업 환경에서 이미지 이름이 말하는 그대로이기 때문입니다.이 경우, 두 이미지의 유일한 차이점은 정확히 그것의 경로일 것입니다!!

따라서 이미지의 접두사는 이미지의 원점을 나타내며, 기본적으로 이미지에 접두사가 없는 경우 도커 허브에서 꺼냅니다.

시도해 본 적은 없지만 라인을 추가하여 DNS 확인 프로세스를 가로챘을 수 있습니다./etc/hosts위해서hub.docker.com또는 그와 유사한 것(docker.io효과가 있을까요?

언급URL : https://stackoverflow.com/questions/33054369/how-to-change-the-default-docker-registry-from-docker-io-to-my-private-registry

반응형