InfoGrab Docs

Docker-in-Docker에서 레지스트리로 인증

Docker-in-Docker에서 레지스트리로 인증에 대해 설명합니다.

Docker-in-Docker를 사용하면 서비스와 함께 새로운 Docker 데몬이 시작되기 때문에 표준 인증 방법 이 작동하지 않습니다. 옵션 1: docker login 실행 # before_script 에서 docker login 을 실행합니다: default: image: docker:24.0.5-cli services: - docker:24.0.5-dind variables: DOCKER_TLS_CERTDIR: "/certs" build: stage: build before_script: - echo "$DOCKER_REGISTRY_PASS" | docker login $DOCKER_REGISTRY --username $DOCKER_REGISTRY_USER --password-stdin script: - docker build -t my-docker-image . - docker run my-docker-image /script/to/run/tests Docker Hub에 로그인하려면 $DOCKER_REGISTRY 를 비워두거나 제거합니다. 옵션 2: 각 job에 ~/.docker/config.json 마운트 # GitLab Runner 관리자인 경우 인증 구성이 담긴 파일을 ~/.docker/config.json 에 마운트할 수 있습니다. 그러면 러너가 가져오는 모든 job이 이미 인증되어 있습니다. 공식 docker:24.0.5 이미지를 사용하는 경우 홈 디렉터리는 /root 아래에 있습니다. 구성 파일을 마운트하면 ~/.docker/config.json 을 수정하는 모든 docker 명령이 실패합니다. 예를 들어 파일이 읽기 전용으로 마운트되기 때문에 docker login 이 실패합니다. 문제가 발생하므로 읽기 전용에서 변경하지 마세요. 다음은 DOCKER_AUTH_CONFIG 설명서를 따르는 /opt/.docker/config.json 의 예시입니다: { "auths" : { "https://index.docker.io/v1/" : { "auth" : "bXlfdXNlcm5hbWU6bXlfcGFzc3dvcmQ=" } } } Docker # 파일을 포함하도록 볼륨 마운트 를 업데이트합니다. [[runners]] ... executor = "docker" [runners.docker] ... privileged = true volumes = [ "/opt/.docker/config.json:/root/.docker/config.json:ro" ] Kubernetes # 이 파일의 내용으로 ConfigMap 을 만듭니다. 다음과 같은 명령으로 만들 수 있습니다: kubectl create configmap docker-client-config --namespace gitlab-runner --from-file /opt/.docker/config.json 파일을 포함하도록 볼륨 마운트 를 업데이트합니다. [[runners]] ... executor = "kubernetes" [runners.kubernetes] image = "