(一)Docker-in-Docker on Kubernetes
1. 场景
请参考docker in docker 文章
2. DinD
我们将采用主机Docker守护程序作为外部守护程序,Docker守护程序作为内部守护程序在容器内运行。运行DinD的一个重要方面是处理Docker守护进程存储的配置和管理。
3.Case 1: Pods and DooD
Kubectl create -f dood.yaml
apiVersion: v1
kind: Pod
metadata:
name: dood
spec:
containers:
- name: docker-cmds
image: docker:1.12.6
command: ['docker', 'run', '-p', '80:80', 'httpd:latest']
resources:
requests:
cpu: 10m
memory: 256Mi
volumeMounts:
- mountPath: /var/run
name: docker-sock
volumes:
- name: docker-sock
hostPath:
path: /var/run
Pod将创建一个将在Pod外部运行的容器。通过使用DooD运行容器,您会为生成的容器丢失以下内容:
- Pod Networking - 无法使用Pod IP访问容器。
- Pod生命周期 - 在Pod终止时,此容器将继续运行,尤其是在容器以
-d
flag 启动时。 - Pod清理 - pod终止后不会清理图形存储。
- 调度和资源利用 - Pod请求的Cpu和内存仅用于Pod,而不是从Pod生成的容器。此外,生成的容器不会继承对Pod设置的CPU和内存的限制。
4. Case 1: Pods and DinD
apiVersion: v1
kind: Pod
metadata:
name: dind
spec:
containers:
- name: docker-cmds
image: docker:1.12.6
command: ['docker', 'run', '-p', '80:80', 'httpd:latest']
resources:
requests:
cpu: 10m
memory: 256Mi
env:
- name: DOCKER_HOST
value: tcp://localhost:2375
- name: dind-daemon
image: docker:1.12.6-dind
resources:
requests:
cpu: 20m
memory: 512Mi
securityContext:
privileged: true
volumeMounts:
- name: docker-graph-storage
mountPath: /var/lib/docker
volumes:
- name: docker-graph-storage
emptyDir: {}
5. 解决方案
我们在这里退一步吧。你真的想要Docker-in-Docker吗?或者你只是希望能够从CI系统运行Docker(特别是:构建,运行,有时推送容器和图像),而这个CI系统本身就在容器中?
我敢打赌,大多数人都想要后者。您想要的只是一个解决方案,以便像Jenkins这样的CI系统可以启动容器。
最简单的方法是将Docker套接字暴露给CI容器,方法是将其与-v
标志绑定。
简单地说,当您启动CI容器(Jenkins或其他)时,不要与Docker-in-Docker一起攻击某些东西,而是启动它:
docker run -v /var/run/docker.sock:/var/run/docker.sock ...
现在这个容器可以访问Docker套接字,因此可以启动容器。除了不启动“子”容器,它将启动“兄弟”容器。
尝试使用docker
官方图像(包含Docker二进制文件):
docker run -v /var/run/docker.sock:/var/run/docker.sock \
-ti docker
这看起来像Docker-in-Docker,感觉就像Docker-in-Docker,但它不是Docker-in-Docker:当这个容器创建更多容器时,这些容器将在顶级Docker中创建。您将不会遇到嵌套副作用,并且将在多个调用之间共享构建缓存。
️这篇文章的旧版本建议将docker
二进制文件从主机绑定到容器。这不再可靠,因为Docker Engine不再作为(几乎)静态库分发。
如果您想使用Jenkins CI系统中的Docker,您有多种选择:
- 使用基本映像的打包系统安装Docker CLI(即如果您的映像基于Debian,请使用.deb包),
- 使用Docker API。
参考:https://www.jianshu.com/p/3b6c6c94b745
参考:http://dockone.io/article/2758
参考:https://applatix.com/case-docker-docker-kubernetes-part/
参考:https://container-solutions.com/running-docker-in-jenkins-in-docker/
参考:https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/
参考:https://applatix.com/case-docker-docker-kubernetes-part-2/
参考:https://hub.docker.com/_/docker/
参考:https://github.com/jpetazzo/dind
参考:https://www.codercto.com/a/33822.html
参考:https://hub.docker.com/_/docker/?tab=description
参考:https://blog.csdn.net/xts_huangxin/article/details/51502878
参考:https://www.jianshu.com/p/43ffba076bc9
(一)Docker-in-Docker on Kubernetes的更多相关文章
- 搭建基于Docker社区版的Kubernetes本地集群
Kubernetes的本地集群搭建是一件颇费苦心的活,网上有各种参考资源,由于版本和容器的不断发展,搭建的方式也是各不相同,这里基于Docker CE的18.09.0版本,在Mac OS.Win10下 ...
- Docker,Docker Compose,Docker Swarm,Kubernetes之间的区别
Dcoker Docker 这个东西所扮演的角色,容易理解,它是一个容器引擎,也就是说实际上我们的容器最终是由Docker创建,运行在Docker中,其他相关的容器技术都是以Docker为基础,它是我 ...
- kubernetes 实战6_命令_Share Process Namespace between Containers in a Pod&Translate a Docker Compose File to Kubernetes Resources
Share Process Namespace between Containers in a Pod how to configure process namespace sharing for a ...
- kubernetes部署jenkins(Docker in Docker)及认证
引言 Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建.测试和部署软件. 本文将Jenkins的master与slave置于Pod中,部署在namespace:jenk ...
- Docker CMD ENTRYPOING 和Kubernetes command args对比
Docker CMD ENTRYPOING 和Kubernetes command args对比 exec 模式 使用 exec 模式时,容器中的任务进程就是容器内的 1 号进程 shell 模式 使 ...
- 漫话docker的衰落与kubernetes的兴起
本文首发在OPPO互联网公众号,欢迎点击转载 https://mp.weixin.qq.com/s/wBC4CgAzXeTNURa1YdYmIQ. 伴随着kubernetes 1.20中对于docke ...
- 30分钟学会Docker里面开启k8s(Kubernetes)登录仪表盘(图文讲解)
前言 我们之前搭建了第一个docker项目: windows环境30分钟从0开始快速搭建第一个docker项目(带数据库交互):https://www.cnblogs.com/xiongze520/p ...
- openstack,docker,mesos,Kubernetes(k8s)
作者:张乾链接:https://www.zhihu.com/question/62985699/answer/204233732来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- 基于docker和cri-dockerd部署kubernetes v1.25.3
基于docker和cri-dockerd部署kubernetes v1.25.3 1.环境准备 1-1.主机清单 主机名 IP地址 系统版本 k8s-master01 k8s-master01.wan ...
- [经验交流] docker in docker 的变通实现方法
最近在做CI持续集成环境的容器化,其中一个工作是:在容器中构建容器镜像. 对于这个需求,网上有一些 Docker in Docker 的方法,具体需要修改宿主机的配置.这种方式在单机环境下.对安全要求 ...
随机推荐
- FTP返回值代表含义
FTP:屏幕信息举例 1.用户要用FTP和远地主机(网络信息中心NIC上的主机)建立连接. 2.本地FTP发出的连接成功信息. 3.从远地服务器返回的信息,220表示"服务就绪". ...
- Linux文本三剑客总结
Linux文本处理三剑客 grep 文本过滤(模式:pattern)工具 grep, egrep, fgrep(不支持正则表达式搜索) grep grep: Global search REgula ...
- 剑指 Offer 58 - II. 左旋转字符串 + 简单题
剑指 Offer 58 - II. 左旋转字符串 Offer_58_2 题目描述 java代码 package com.walegarrett.offer; /** * @Author WaleGar ...
- javaScript操作cookie出现同名key
引文: 网上查找js操作cookie文章发现百度千篇一律全是同样的代码,使用过程中发现一个bug,设置cookie导致出现多个同名key的cookie,官网cookie文档内未提及,下文将标出问题点, ...
- 【pytest官方文档】解读fixtures - 7. Teardown处理,yield和addfinalizer
当我们运行测试函数时,我们希望确保测试函数在运行结束后,可以自己清理掉对环境的影响. 这样的话,它们就不会干扰任何其他的测试函数,更不会日积月累的留下越来越多的测试数据. 用过unittest的朋友相 ...
- java下载文件指定目录下的文件
方法一: @RequestMapping('download')def download(HttpServletRequest request, HttpServletResponse respons ...
- 爬虫必知必会(7)_scrapy框架高级
一.请求传参 实现深度爬取:爬取多个层级对应的页面数据 使用场景:爬取的数据没有在同一张页面中 在手动请求的时候传递item:yield scrapy.Request(url,callback,met ...
- 基于CefSharp开发浏览器(九)浏览器历史记录弹窗面板
一.前言 前两篇文章写的是关于浏览器收藏夹的内容,因为收藏夹的内容不会太多,故采用json格式的文本文件作为收藏夹的存储方式. 关于浏览器历史记录,我个人每天大概会打开百来次网页甚至更多,时间越长历史 ...
- java基础详解-集合
一.集合组成 java集合主要由Map和Collection组成,Collection主要类图如下(图片来源于网络,懒得画图): 从上图中能很明显的看出来Collection下主要是Set.List和 ...
- dk.exe自动填报程序的反编译
dk.exe自动填报程序的反编译 dk.exe用于学校每日健康报的自动填写.