原本计划在3月将linux进程的内容总结完,但途中遇到其他事情耽搁了,只能延后,争取在5月底前完成这部分内容。
2014python年会上印象最深的就是docker主题,docker开始进入大众视野,方心未艾。而今5年过去了,由docker衍生出来的技术越来越多,如k8s,rancher等,docker也逐渐成为必备工具。
这次闲谈下docker和虚拟机的区别以及怎么用docker
docker和虚拟机的区别
如果你用下docker和kvm,你就知道区别是什么了。
docker
docker的本质是一个封装了linux的namespaces,CGroups,实现了资源隔离的工具。
什么意思?举个例子:
以前要用redis,在Ubuntu上可能用apt-get安装;在centos上可能用yum安装;或者将redis源码包下载下来,编译安装。你会发现,不管是用系统的包管理工具,还是编译安装,在不同的系统上要使用不一样的安装方式。
现在有了docker,你只需事先在这些机器上安装好docker,然后运行两条命令即可使用:
docker pull redis
docker run -d -p 6379:6379 redis
这样的好处是:
docker帮你在操作系统的层面上做了一层封装,使得你在部署软件时,不需要去考虑操作系统的差异,实现了一次封装,到处运行。
那一次封装,到处运行又有什么好处?
举个列子:你开发了一个工具,要推广使用。如果是以前,你需要针对不同的操作系统写一份不同的安装部署文档,而且现在你只需封装一个docker镜像,然后将它放到公共仓库中,叫大家去下载即可。
又比如:以前公司要部署软件,你得针对不同的操作系统写不同的脚本或者配置文件,而现在你可以用docker统一管理。
虚拟机
虚拟机是利用CPU虚拟化的特性实现的,它是一个完整的操作系统。
你可能会问了:我把软件部署到一个虚拟机上,打包成一个镜像,也可以一次封装,到处运行鸭?是的,完全可以这样,但虚拟机比docker重,它除了运行你的软件,还要运行系统,如果仅仅是为了运行一个软件就单独去跑一个虚拟机,会浪费很多资源。
我现在怎么用docker
部署流程
- 在项目中写好Dockerfile
- 代码提交后,jenkins开始构建,打包docker镜像,并将镜像推到私有仓库中
- 私有仓库可以用云厂家的,也可以自建
- 用rancher将镜像部署到测试/线上环境
使用场景
目前主要是nodejs使用