(一)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 的方法,具体需要修改宿主机的配置.这种方式在单机环境下.对安全要求 ...
随机推荐
- ElasticSearch 文档及操作
公号:码农充电站pro 主页:https://codeshellme.github.io 本节介绍 ES 文档,索引及其基本操作. 1,ES 中的文档 在 ES 中,文档(Document)是可搜索数 ...
- banner自用图床
放些常用的图做图床,也不在别的平台用.
- 鸿蒙开源第三方组件——进度轮ProgressWheel
目录:1.前言2.背景3.组件功能展示4.Sample解析5.Library解析6.作者系列文章合集 前言 基于安卓平台的进度轮组件ProgressWheel(https://github.com/A ...
- 2021-2-25:对于 Java MMAP,如何查看文件映射脏页,如何统计MMAP的内存大小?
我们写一个测试程序: public static void main(String[] args) throws Exception { RandomAccessFile randomAccessFi ...
- Codeblocks支持语法着色
- 后端程序员之路 22、RESTful API
理解RESTful架构 - 阮一峰的网络日志http://www.ruanyifeng.com/blog/2011/09/restful.html RESTful API 设计指南 - 阮一峰的网络日 ...
- Nginx配置翻译
Windows 格式 server { listen 82; server_name localhost; root "D:/testfile/"; location / { in ...
- Wireshark使用记录
TCP/IP协议族里的协议众多 要一一精通比较困难,在一些紧急急需要分析主机.客户端的流量场景时,不懂协议也要上!下面就是用到哪里就记录到哪,有错误欢迎评论指出,多谢. wireshark这玩意相当于 ...
- 通过kubeadm快速部署K8S集群
kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具. 这个工具能通过两条指令完成一个kubernetes集群的部署: # 创建一个 Master 节点 $ kubeadm i ...
- 微信小程序在Android和Ios端的获取时间兼容性问题
an端 var time = new Date() 例如:2020-01-01 01:01:00 ios端 var time = new Date() 例如:2020/01/01 01:01:00 ...