一、啥叫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