关于docker这块从0开始已经写了4个系列了,但是针对k8s还是有点怵,因为k8s确实比较麻烦里面的东西比较复杂,而且针对k8s想走的更远还是需要实践,前端时间将原来的java的一些知识回顾和学习了,这次又要开启k8s之旅了,加油吧老铁们!还是继续从docker开始,不断的反复,不断的学习,才能让知识记忆的更老。艾宾浩斯记忆法就是这样说的。
(一)什么是docker
Docker的英文翻译是【码头工人】的意思,不是咱们初中还是高中学的课文的【伏尔加河上的纤夫】,负责搬运码头货物的,随着科技的发展码头上体力搬运工越来越少,多数是操作码头集装箱的码头工人。对于集装箱是一种容器,直接理解成弥勒佛的布口袋什么都可以放。杯子可以存水,笔筒可以放笔,酒瓶可以盛酒,书包可以装书,相机可以存照片,电脑可以放小电影。
- 不同的应用程序可能会有不同的应用环境,比如.net开发的网站和java开发的网站依赖的软件就不一样,如果把他们依赖的软件都安装在一个服务器上就要调试很久,而且很麻烦,还会造成一些冲突。比如IIS和tomcat访问端口冲突。这个时候你就要隔离.net开发的网站和tomcat开发的网站。常规来讲,我们可以在服务器上创建不同的虚拟机在不同的虚拟机上放置不同的应用,但是虚拟机开销比较高。docker可以实现虚拟机隔离应用环境的功能,并且开销比虚拟机小,小就意味着省钱了。
- 你开发软件的时候用的是Ubuntu,但是运维管理的都是centos,运维在把你的软件从开发环境转移到生产环境的时候就会遇到一些Ubuntu转centos的问题,比如:有个特殊版本的数据库,只有Ubuntu支持,centos不支持,在转移的过程当中运维就得想办法解决这样的问题。这时候要是有docker你就可以把开发环境直接封装转移给运维,运维直接部署你给他的docker就可以了。而且部署速度快。
- 在服务器负载方面,如果你单独开一个虚拟机,那么虚拟机会占用空闲内存的,docker部署的话,这些内存就会利用起来。
(二)docker格言
Java号称【一次编译,到处运行】,因为java虚拟机解决平台的兼容性问题,所以有java虚拟机的地方就能跑java代码;
Docker是:【一次封装,到处运行】,因为docker决绝了应用环境的问题,安装了docker的平台就能跑【docker包】,这样就决绝了【开发环境能跑,一上线就崩】的尴尬。
(三)docker和虚拟机的区别
vm与docker框架,直观上来讲vm多了一层guest OS,同时Hypervisor会对硬件资源进行虚拟化,docker直接使用硬件资源,所以资源利用率相对docker低也是比较容易理解的。
- 隔断这招就是虚拟机(VM)的思路了,虚拟机的这种隔断你可以理解成比较决绝的隔断,墙上自己掏洞开个门开个窗,厨房卫生间我在自己的这个隔断里都单独来一套,基本就是一个完整的家装工程了,你进这个隔断感觉——喔,这就是个完整的房子嘛。 所以虚拟机的好处坏处也你也就明白了:隔离效果好,但是损耗大。
- docker,不仅能做资源隔离,人家还规范化系统化了(repo/image),所有房间(container)统一装修和家具,你交钱签约就能享受一个相对独立的生活环境(environment)了,你自己的东西在你屋子里随便摆,都可以的;对中介来说,你当下不过就是个正在running的instance,的当你gameover了以后,这个房间他还可以以很小的代价租给别人run,是不是效率好高了?
(四)为啥要用容器
随着硬件的性能提升,以及软件种类的丰富,有两种情况变得很常见
- 硬件性能过剩——很多计算机的硬件配置,即使不能完全满足峰值性能的要求,也往往会有大量时间处于硬件资源闲置的状态。例如一般家用电脑,已经是四核、六核的配置了,除了3A游戏、视频制作、3D渲染、高性能计算等特殊应用外,通常有90%以上时间CPU是闲置的。
- 软件冲突——因为业务需要,两个或者多个软件之间冲突,或者需要同一个软件的不同版本。例如早几年做web前端的,要测试网页在不同版本的IE上是否能正常显示,然而Windows只能装一个版本的IE。
- 开发环境能跑,一上线就崩。环境不一致。
(五)Docker Engine
- 常驻后台进程Dockerd
- 一个用来和 Dockerd 交互的 REST API Server
- 命令行CLI接口,通过和 REST API 进行交互(我们经常使用的 docker 命令)
(六)Docker 架构
- container: 容器,是指image的运行时,包含了文件资源(image展开)和系统资源(变成process存在于系统中)。
- image: 镜像,是指将应用打包好之后的存储方式,一个image包含多层layer。
- layer: 在Dockerfile中每一步都会产生一层layer,每一步的结果产出变成文件。
- dockerfile: 一种构建image的文件的DSL。
- docker: 可以通过Dockerfile构建image,也可以将image运行,使其变成container。
- moby: docker项目的新名字,docker公司的一步棋。
- docker-compose: Python写的一个docker编排工具。
- docker swarm: docker公司推出的容器调度平台。
- kubernetes: google主导的容器调度平台。
(七)Docker 安装
这里不在描述windows,mac了。只要说说如何快速简单的在centos系统上安装。
- ①修改dns解析地址
vi /etc/resolv.conf
#nameserver 8.8.8.8
# 或者直接通过这个命令 echo nameserver 8.8.8.8 >> /etc/resolv.conf
systemctl restart network
- ② docker在线安装
sudo curl -sSL https://get.docker.com/ | sh
- ③ docker 加速器
sudo curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://b81aace9.m.daocloud.io
sudo systemctl restart docker
- ⑤ 安装配合工具
sudo yum -y install epel-release
sudo yum -y install python-pip
sudo yum clean all
- ⑤ 安装docker-compose
sudo pip install docker-compose
- ⑥ 安装完毕
docker-compose version
docker version
PS:docker已经安装成功了。之前写的文章太官方了,现在要让更通俗,很易懂的方式让更多人了解和使用docker。
网友评论