• docker in docker使用方式


    连接宿主机docker引擎

    方式1:挂载主机上的docker.sock以及docker二进制文件

    docker run -it 
      -v /var/run/docker.sock:/var/run/docker.sock 
      -v $(which docker):/usr/bin/docker 
      centos docker version
    
    • 1
    • 2
    • 3
    • 4

    方式2:挂载主机docker.sock并在容器中安装docker客户端

    docker run -it 
      -v /var/run/docker.sock:/var/run/docker.sock 
      centos bash
    
    curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    yum install -y docker-ce-cli
    docker version
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    方式3:使用官方docker客户端

    docker run -it 
      -v /var/run/docker.sock:/var/run/docker.sock docker 
      docker version
    
    • 1
    • 2
    • 3

    docker remote api方式

    参考:https://success.docker.com/article/how-do-i-enable-the-remote-api-for-dockerd

    配置docker.service启用remote api

    mkdir -p /etc/systemd/system/docker.service.d
    cat > /etc/systemd/system/docker.service.d/override.conf <
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    或者配置daemon.json

    vim /etc/docker/daemon.json
    {
      "hosts": ["tcp://0.0.0.0:2376", "unix:///var/run/docker.sock"]
    }
    
    • 1
    • 2
    • 3
    • 4

    重启服务使配置生效

    systemctl daemon-reload && systemctl restart docker.service
    
    • 1

    查看dockerd进程

    # ps aux | grep dockerd
    root       2471  0.8  1.7 723016 67808 ?        Ssl  09:38   0:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2376
    
    • 1
    • 2

    远程主机docker客户端执行命令验证

    docker -H tcp://192.168.93.9:2375 version
    
    • 1

    curl命令验证

    curl -XGET http://192.168.93.9:2376/version
    
    • 1

    变量方式使用示例

    docker run -it 
      -e DOCKER_HOST=tcp://192.168.93.9:2376 
      docker version
    
    • 1
    • 2
    • 3

    docker中运行docker

    以上方式本质上还是连接到主机节点上的docker引擎执行docker命令,实际容器中执行docker操作与在主机节点直接执行docker命令没有区别。

    docker dind方式有所不同,所有的docker操作真正在容器内部进行,包括创建的容器、拉取的镜像都保留在容器内部。

    docker in docker的原理是挂载cgroup、tmpfs、securityfs、cgroup的SUBSYS、关掉不需要的文件描述符、最后启动dockerd。

    官方提供了2种类型的docker in docker镜像

    • docker:latest 只包含docker客户端
    • docker:dind 包含docker客户端和docker引擎

    参考:https://hub.docker.com/_/docker

    运行docker dind容器

    docker run -it --privileged --name docker-dind -d docker:dind
    
    docker exec -it docker-dind docker version
    
    #使用带有docker客户端的容器连接到dind容器
    docker run -it --link docker-dind:docker docker version
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    docker dind启用TLS

    docker network create dind
    docker run --privileged --name docker-dind -d 
        --network dind --network-alias docker 
        -e DOCKER_TLS_CERTDIR=/certs 
        -v docker-certs-ca:/certs/ca 
        -v docker-certs-client:/certs/client 
        docker:dind
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    查看进程

    [root@harbor ~]# docker exec -it docker-dind sh
    / # ps -ef
    PID   USER     TIME  COMMAND
        1 root      0:00 dockerd --host=unix:///var/run/docker.sock --host=tcp://0.0.0.0:2376 --tlsverify --tlscacert /certs/server/ca.pem --tlscert /certs/server/cert.pem --tlskey /certs/server/key.pem
       52 root      0:01 containerd --config /var/run/docker/containerd/containerd.toml --log-level info
      212 root      0:00 sh
      217 root      0:00 ps -ef
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    使用方式1

    docker run --rm --network dind 
        -e DOCKER_TLS_CERTDIR=/certs 
        -v docker-certs-client:/certs/client:ro 
        docker:latest version
    
    • 1
    • 2
    • 3
    • 4

    使用方式2

    docker run -it --rm --network dind 
        -e DOCKER_TLS_CERTDIR=/certs 
        -v docker-certs-client:/certs/client:ro 
        docker:latest sh
    
    / # docker version
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    使用方式3

    docker run -it --rm --network dind 
        -e DOCKER_HOST=tcp://docker:2376 
        -e DOCKER_TLS_CERTDIR=/certs 
        -v docker-certs-client:/certs/client:ro 
        docker:latest version
    
    • 1
    • 2
    • 3
    • 4
    • 5

    定义daemon参数

    docker run --privileged --name some-docker -d 
        --network some-network --network-alias docker 
        -e DOCKER_TLS_CERTDIR=/certs 
        -v some-docker-certs-ca:/certs/ca 
        -v some-docker-certs-client:/certs/client 
        docker:dind --storage-driver overlay2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    蓝桥杯构造法|两道例题(C++)
    GB文件下载脚本
    【Hack The Box】linux练习-- Sunday
    云服务器的先驱,亚马逊云科技海外云服务器领军者
    常见网络协议总结(五层&自顶向下)
    五分钟k8s实战-使用Ingress
    【零基础学Python】Day11 Python条件控制
    Windows OpenGL 图像褐色
    IMX6上获取时间的补充(io的宏定义)
    算法:包含min函数的栈
  • 原文地址:https://blog.csdn.net/jiong9412/article/details/126327140