什么是docker

程序员界的一个玄学的问题,当你写好一个应用程序,发给另一个程序员安装的时候,明明在你本地上跑的好好的,为何在对方的电脑上就跑不去来了。

容器技术是为程序员带来一个复刻,打包,迁移自己的应用程序,使之能在别的宿主机上顺利的运行跑起来的的一种技术。

docker则是容器技术界的一哥,就像康师傅是泡面界的一哥一样。

在以docker为代表的容器技术和以康师傅为代表的泡面技术出现以前,如果我想要把我的牛肉面的做法分享给我的朋友。那我只能这么做,采购好牛肉和面条,附上一张菜谱。指望他们能在自己家厨房里面复刻跟我做的一模一样的牛肉面。但是这是一个很难的事情,每个人技艺手法都有所不同,张三家只有盘子,李四家只有碗,张三家只有大葱,李四家只有小葱,每个人的依赖库都是有所不同的。
而以康师傅为首的牛肉面出现以后,我会是怎么做呢,首先我就不会给张三李四寄裸的牛肉和面条,而是找一个干净的可封闭的小盒子(容器),叫它container或者沙盒、集装箱都可以,可以装的下我所有的依赖。随后我会把我的应用程序以及它所依赖的所有文件都装在上面,打包成一个docker容器的镜像。这样的一个容器我就可以发给张三、李四,发在云上,可以随意的搬运,这就是为什么container经常被叫做集装箱。

Dockerlogo是一个小鲸鱼,而这只小鲸鱼是如何做到这件事的,首先是我在我家厨房打包的时候我其实是写了一张清单叫dockerfiledockerfile中我会告诉小鲸鱼我需要哪些东西,怎么给我放进去,一层一层的按照我的清单码在我的集装箱里。我会跑一下docker builddocker build就是召唤我的小鲸鱼帮我干上面这件事,帮我采买所有的原材料打包,我就拿到了docker镜像,我拿到了docker镜像(docker image)以后可以直接发给我的朋友们,也可以docker push到一个dockerHub这样一个镜像的代收点,然后让张三李四去拿。最后张三李四拿到之后不需要准备任何的锅碗瓢盆,油盐酱醋,它只需要docker run一下,就是给这盒泡面注入热水,就得到了一个docker container

Docker容器跑起来以后,它依旧是宿主机上的一个进程,不过它有一点特殊,就是docker小鲸鱼给容器进程施了障眼法,使它看不到其他的进程,他以为自己独占了这个操作系统的内核,其实他是和宿主机上的其他进程共享了宿主机操作系统上的内核。但是因为容器被施了障眼法,他只能看到自己的nameSpace里面的东西。所以这就是说容器好像是跑在一个沙盒里面与世隔绝。当你同时泡3碗不同口味的牛肉面,他们在自己的沙盒里面自给自足,发挥稳定,和厨房里面的任何食物都互不串味,它也不依赖我的厨房里的东西。你可以理解为docker是一个轻量级的虚拟机技术,和宿主机通信时需要指定端口映射。

 

 

posted @ 2023-04-12 16:24  宋songsong  阅读(20)  评论(0编辑  收藏  举报