一、啥叫docker in docker
? ? ? ? 就是允許的鏡像里頭有一個docker,但這個docekr鏡像只有docker的cli和/var/lib/docker.sock的套接字,沒有允許build.然后里頭又運行了一個docker,這個docker有build的能力,此時構建時就是里頭的docker使用外部的docker-/var/lib/docker.sock的套接字進行build鏡像。
二、場景
? ? ? ? 1、使用docker 執行器 runner的gitlab-ci
? ? ? ? 2、使用k8s執行器 runner的gitlab-ci
? ? ? ? 3、你的gitlab-ci中需要使用容器進行build構建鏡像時。
? ? ? ? 4、需要使用容器的彈性擴容時。
三、Gitlab-ci如下:替換其中加粗的部分直接用。
stages: # List of stages for jobs, and their order of execution
- build-image
build-image-job:
stage: build-image
image: docker:19.03.13
tags:
- docker-dind
variables:
#CI_REGISTRY_PROJETY: harbor.com:543/spring_boot-ci
#DOCKER_IMAGE_NAME: ci-java-web
#DOCKER_IMAGE_TAG: v1
DOCKER_REGISTRY: <YOUR--REGISTRY>
DOCKER_REGISTRY_PASS: <YOUR--PASSWD>
DOCKER_REGISTRY_USER: <YOUR--USER>
DOCKER_TLS_CERTDIR: "/certs"
services:
- name: docker:19.03.13-dind --
alias: docker --必須寫,不然報錯
before_script:
- echo "$DOCKER_REGISTRY_PASS" | docker login $DOCKER_REGISTRY --username $DOCKER_REGISTRY_USER --password-stdin
script:
- docker pull?<YOUR--REGISTRY>-image:tag
- docker image ls
- docker tag <LOCAL-YOUR--REGISTRY>-image:tag?<REMOTE-YOUR--REGISTRY>-image:tag
- docker push?<REMOTE-YOUR--REGISTRY>-image:tag
?