一、啥叫docker in docker       
        1.就是允许的镜像里头有一个docker,但这个docekr镜像只有docker的cli和/var/lib/docker.sock的套接字,没有允许build.然后里头又运行了一个docker,这个docker有build的能力,此时构建时就是里头的docker使用外部的docker-/var/lib/docker.sock的套接字进行build镜像。
        2.重点理解 runer和执行器,runer是gitlab的ci-agent对接gitlab,而执行器是接受runer下发的ci的任务来干活的。

二、场景

        1、使用docker 执行器 runner的gitlab-ci

        2、使用k8s执行器 runner的gitlab-ci

        3、你的gitlab-ci中需要使用容器进行build构建镜像时。

        4、需要使用容器的弹性扩容时。

 三、安装gitlab-runer for docker
        1.创建持久卷

docker volume create gitlab-runner-config 



        2.安装gitlab-runer

docker run -d --name gitlab-runner --restart always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v gitlab-runner-config:/etc/gitlab-runner \
    gitlab/gitlab-runner:latest

四、创建docker的执行器

        1.在容器内部执行,注册执行器。
 

docker exec -it gitlab-runner /bin/bash

        2.注册执行器

sudo gitlab-runner register -n \
  --url http://10.10.2.183:8929 \ #你的gitlab的地址
  --registration-token <Your TOKEN> \ #查看我的另一篇文章 
  --executor docker \
  --description "My Docker Runner" \
  --docker-image "docker:20.10.16" \
  --docker-privileged \
  --docker-volumes "/certs/client"

        #url和地址在我这篇文章:gitlab CI/CD 安装 gitlab runner_A ?Charis的博客-CSDN博客

        3.注册完毕后在你的gitlab-ci/cd目录下有一个runer的list可以直接看到这个执行器。

                1.注册完毕:

                2.gitlab验证:
                
四、Gitlab-ci如下:替换其中加粗的部分直接用。
        
        ##有了一个符合docker-dind这个工作状态的执行器才能够执行docker中构建docker镜像。
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






 

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐