首页 > 代码库 > 玩转docker
玩转docker
开篇先论赌
(组词,赌博,....),时刻,每天都在赌!
何为赌?仁者见仁,智者必定又有一番见解,保持沉默,意见保留;
——改变思维模式,Ruiy让赌赢在“思维”!!!;
趋势就像一匹马,如果在马后面追,你永远都追不上,你只有骑在马上面,才能和马一样的快,这就叫马上成功;
存在,就需时刻思考;
君子必做的2件事(有仇必报,不然恶气难出,伤身!,有恩必报,哪怕肝脑涂地,Ruiy 追捧此),你请别效仿,Ruiy武侠剧看多了;
引领时代的都是“骗子”:
那些说别人是骗子的人,生活一成不変,生活质量一天比一天差!而那些当年所谓的“骗子”却成了时代的标志!
(警,)“先知先觉经营者;后知后觉跟随者;不知不觉消费者!借;造船过河不如借船过河。
趋势,无法阻挡;
抉择,要有智慧!
阅人无数不如名师指路,
名师指路不如重叠成功人的脚步!
面对挑战你该怎么办?
请铭记,不要等到明天,明天太遥远,今天就行动.
扯不下去了,词穷了,哈,好吧;就扯到此,止步吧,该谈正事 了,别玩物丧志,别 学阿斗,乐不思蜀,别....!
跟Ruiy一起玩转Docker 轻量虚机:
https://docs.docker.com/installation/centos/ 【docker offical doc】
//by Ruiy
//rui认为,这年头,技术更替TM非常快,技术越玩越简单,越搞越轻巧,越搞越sb,关键 是玩家别被搞成sb了!;
(注,玩大数据谁不开玩spark?,玩虚拟化谁不玩kvm,然不会Docker还能混吗?)
docker VM(概词,你懂的)简单区别;
官网的介绍是这样的:
Docker is an open platform for developers and sysadmins to build, ship, and run distributed applications....
此处Ruiy也想啰嗦了,不要放过一个文字,标点,(概之就是看东西不要放过任何一个字符,因为每个字符都有它存在的必要性,有它存在的意思,不然它还有必要存在吗?)
一句话往往能够......;
docker与VM主要区别在于性能优势(其中VM每虚拟一个VM,均要跑一个guest OS,而docker不用,每个物理机器能跑上千个Docker,而能虚拟几个VM?,docker仅仅隔离进程,与缩主机共享OS,别的不瞎解析了,Ruiy也就这层次,deepin请移步offical station read offical document,Thanks!!!),部分摘自interNet,加了些水,煮现与此;
其 实看完这句话还是不明白究竟是啥的,下面就慢慢解释。不过长话短说的话,把他想象成一个用了一种新颖方式实现的超轻量虚拟机,在大概效果上也是正确的。当 然在实现的原理和应用上还是和VM有巨大差别的,并且专业的叫法是应用容器(Application Container)。
为啥要用容器?
那么应用容器长什么样子呢,一个做好的应用容器长得就好像一个装好了一组特定应用的虚拟机一样。比如我现在想用MySQL那我就找个装好MySQL的容器,运行起来,那么我就可以使用 MySQL了。
那 么我直接装个 MySQL不就好了,何必还需要这个容器这么诡异的概念?话是这么说,可是你要真装MySQL的话可能要再装一堆依赖库,根据你的操作系统平台和版本进行 设置,有时候还要从源代码编译报出一堆莫名其妙的错误,可不是这么好装。而且万一你机器挂了,所有的东西都要重新来,可能还要把配置在重新弄一遍。但是有 了容器,你就相当于有了一个可以运行起来的虚拟机,只要你能运行容器,MySQL的配置就全省了。而且一旦你想换台机器,直接把这个容器端起来,再放到另 一个机器就好了。硬件,操作系统,运行环境什么的都不需要考虑了。
在公司中的一个很大的用途就是可以保证线下的开发环境、测试环境和线上的 生产环境一致。当年在 Baidu 经常碰到这样的事情,开发把东西做好了给测试去测,一般会给一坨代码和一个介绍上线步骤的上线单。结果代码在测试机跑不起来,开发就跑来跑去看问题,一会 儿啊这个配置文件忘了提交了,一会儿啊这个上线命令写错了。找到了一个 bug 提上去,开发一看,啊我怎么又忘了把这个命令写在上线单上了。类似的事情在上线的时候还会发生,变成啊你这个软件的版本和我机器上的不一样……在 Amazon 的时候,由于一个开发直接担任上述三个职位,而且有一套自动化部署的机制所以问题会少一点,但是上线的时候大家还是胆战心惊。
若果利用容器的话,那么开发直接在容器里开发,提测的时候把整个容器给测试,测好了把改动改在容器里再上线就好了。通过容器,整个开发、测试和生产环境可以保持高度的一致。
此外容器也和VM一样具有着一定的隔离性,各个容器之间的数据和内存空间相互隔离,可以保证一定的安全性。
那为啥不用VM?
那么既然容器和 VM 这么类似为啥不直接用 VM 还要整出个容器这么个概念来呢?Docker 容器相对于 VM 有以下几个优点:
- 启动速度快,容器通常在一秒内可以启动,而 VM 通常要更久
- 资源利用率高,一台普通 PC 可以跑上千个容器,你跑上千个 VM 试试
- 性能开销小, VM 通常需要额外的 CPU 和内存来完成 OS 的功能,这一部分占据了额外的资源
为啥相似的功能在性能上会有如此巨大的差距呢,其实这和他们的设计的理念是相关的。 VM 的设计图如下:
VM 的 Hypervisor 需要实现对硬件的虚拟化,并且还要搭载自己的操作系统,自然在启动速度和资源利用率以及性能上有比较大的开销。而 Docker 的设计图是这样的:
Docker 几乎就没有什么虚拟化的东西,并且直接复用了 Host 主机的 OS,在 Docker Engine 层面实现了调度和隔离重量一下子就降低了好几个档次。 Docker 的容器利用了 LXC,管理利用了 namespaces 来做权限的控制和隔离, cgroups 来进行资源的配置,并且还通过 aufs 来进一步提高文件系统的资源利用率。
其中的 aufs 是个很有意思的东西,是 UnionFS 的 一种。他的思想和 git 有些类似,可以把对文件系统的改动当成一次 commit 一层层的叠加。这样的话多个容器之间就可以共享他们的文件系统层次,每个容器下面都是共享的文件系统层次,上面再是各自对文件系统改动的层次,这样的话极 大的节省了对存储的需求,并且也能加速容器的启动。
<二,Docker for Centos intall use epel yum repo>
https://fedoraproject.org/wiki/EPEL [epel introduce]
note that due to the current Docker limitations, Docker is able to run only on the 64 bit architecture
我们在此提醒下大家,简单玩转一下32bits/64bits优异(别的我就不说了,玩过mongoDB的大家都知道,mongoDB对32bit arch架构机器对其fileSize有限制 ,<=2G,而对64bit大小不上限,只要你的 磁盘允许,docker不支持 32bit,到此,至于别的我就不多说什么了,你懂的!)
我也就 扯扯淡,信的听一耳朵,不屑的,请左眼进,右眼出,或请.....洗洗睡,......;
先这么带一耳朵,(大家都知道Docker 基于LXC玩转,具体,见更具体的....)
终极8步初步玩转Docker 新一代轻量级虚拟化技术.
(再忆使用EPEL repo yum安装docker-io)
01,Docker engine 组成,版本信息
daemon server process manaes all containers,client(remot control daemons),docker 版本 [root@ruiy /]#docker version;
02,searching images
使用命令行搜索image
doocker search <string,imageName>,container image are available on the docker hub register,a cloud-based collection of application;
03,下载Docker container images
docker pull
images in the docker hub register the name you specify is constructed as <username>/<repository>
04,output string;
05,