# 闲谈docker

原本计划在3月将linux进程的内容总结完,但途中遇到其他事情耽搁了,只能延后,争取在5月底前完成这部分内容。

2014python年会上印象最深的就是docker主题,docker开始进入大众视野,方心未艾。而今5年过去了,由docker衍生出来的技术越来越多,如k8s,rancher等,docker也逐渐成为必备工具。

这次闲谈docker的两个问题:

1.docker和虚拟机的区别

2.我现在怎么用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

# 部署流程

  1. 在项目中写好Dockerfile
  2. 代码提交后,jenkins开始构建,打包docker镜像,并将镜像推到私有仓库中
  3. 私有仓库可以用云厂家的,也可以自建
  4. 用rancher将镜像部署到测试/线上环境

# 使用场景

目前主要是nodejs使用