Docker-in-Docker에서 레지스트리 인증
Docker-in-Docker를 사용할 때는 서비스와 함께 새로운 Docker 데몬이 시작되기 때문에 표준 인증 방법이 작동하지 않습니다.
옵션 1: docker login
실행
before_script
에서 docker login
을 실행하세요.
default:
image: docker:24.0.5
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: 각 작업에 ~/.docker/config.json
마운트
GitLab Runner의 관리자인 경우, 인증 구성 파일을 ~/.docker/config.json
에 마운트할 수 있습니다. 그러면 Runner가 수행하는 모든 작업이 이미 인증됩니다. 공식 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
파일을 포함하도록 volume mounts를 업데이트하세요.
[[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
Volume mounts를 업데이트하여 파일을 포함하세요.
[[runners]]
...
executor = "kubernetes"
[runners.kubernetes]
image = "alpine:3.12"
privileged = true
[[runners.kubernetes.volumes.config_map]]
name = "docker-client-config"
mount_path = "/root/.docker/config.json"
# 만약 GitLab Runner 13.5 이하를 실행 중이라면 이 부분을 제거할 수 있습니다
sub_path = "config.json"
옵션 3: DOCKER_AUTH_CONFIG
사용
이미 DOCKER_AUTH_CONFIG
이 정의되어 있다면, 해당 변수를 사용하고 ~/.docker/config.json
에 저장할 수 있습니다.
이 인증은 다양한 방법으로 정의할 수 있습니다:
- Runner 구성 파일의
pre_build_script
에 정의. -
before_script
에 정의. -
script
에 정의.
다음 예시는 before_script
를 보여줍니다. 이와 같은 명령은 적용할 수 있는 다른 모든 솔루션에도 동일하게 적용됩니다.
default:
image: docker:24.0.5
services:
- docker:24.0.5-dind
variables:
DOCKER_TLS_CERTDIR: "/certs"
build:
stage: build
before_script:
- mkdir -p $HOME/.docker
- echo $DOCKER_AUTH_CONFIG > $HOME/.docker/config.json
script:
- docker build -t my-docker-image .
- docker run my-docker-image /script/to/run/tests