4.3 러너의 docker-in-docker
자동화된 구성을 위해 gitlab의 CI/CD 프로세스를 사용할 때 쉽게 접할 수 있는 요구 사항은 컨테이너 내부에 컨테이너 이미지를 패키징하는 것입니다. 혼란스럽게 들리겠지만, 해본 사람이라면 누구나 알 것입니다. 이때 컨테이너에 도커 백그라운드 프로세스가 있어야 하는데, 컨테이너에 도커 프로세스를 구성하는 데 드는 비용이 매우 높다. 시작 초기 프로세스를 수정한 다음 이미지 파일을 변경해야 한다. 이 과정에서 예상치 못한 많은 문제가 발생하게 됩니다. 따라서 업계에서는 현재 가장 일반적으로 사용되는 두 가지 솔루션도 제안했습니다.
위의 두 가지 방법은 실제로 유사하지만 실제 작동에서는 unprivileged=true를 구성해야 합니다. 즉, 컨테이너는 제한된 권한을 사용하여 호스트의 환경을 직접 운영할 수도 있습니다(컨테이너 누출이라고도 함). 인트라넷에서 사용하는 것은 괜찮지만 일부 공용 네트워크나 보안 요구 사항이 매우 높은 회사에서는 기본적으로 이 솔루션을 직접 거부합니다.
gitlab의 CI/CD가 이러한 요구사항을 어떻게 충족하는지 살펴보겠습니다.
이 방법은 호스트에 러너를 설치할 때 사용할 수 있으며, 호스트에 설치된 docker 명령을 직접 사용할 수 있으며, gitlab-runner 사용자가 해당 명령을 실행하게 되므로 로 구성해야 합니다. 특별한 권한. 구체적인 작업 프로세스는 다음과 같습니다.
권한이 있는 경우 docker 정보가 출력됩니다.
Docker 내의 Docker(dind)는 다음을 의미합니다.
위에서 언급한 바와 같이 Docker 컨테이너 이미지, 모든 Docker 도구가 설치되어 있으며 CI/CD 작업을 이미지 환경에서 권한 모드로 실행할 수 있습니다. 동시에 docker:19.03.12와 같이 이 이미지의 특정 버전을 지정해야 합니다. docker:stable과 같은 태그를 사용하여 이미지를 사용하는 경우 특히 새 버전이 있는 경우 이미지 버전이 불확실합니다. 출시된.
dind의 제한 사항:
dind의 TLS를 활성화하면 컨테이너 간의 통신이 더욱 안전하게 될 수 있습니다. 활성화 방법은 다음과 같습니다.
위 명령은 실행기의 도커 유형, 이미지 버전, 권한 있는 컨테이너 권한 및 마운트 볼륨을 지정합니다. 마운트된 볼륨은 물리적 머신에 Docker 인증서 파일을 마운트합니다. 위 명령은 다음 내용으로 config.toml 파일을 생성합니다.
이 방법은 서비스 컨테이너에 구성된 docker 서비스를 직접 사용합니다.
k8s에서 TLS가 활성화된 DIND를 사용하기 위한 단계는 다음과 같습니다.
위에서 볼륨 마운트를 지정했을 뿐만 아니라 컨테이너 이미지 이름과 권한 모드도 지정했습니다.
위는 세 가지 사용 방법과 몇 가지 세부 구성입니다. 추후 계속 업데이트 예정입니다.