一、什么是Docker?
Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。可以轻松的为任何应用创建一个轻量级的、可移值的、自给自足的容器,然后发布到任何流行的Linux机器上,也可以实现虚拟化。Docker容器完全使用沙盒机制,相互之间不会存在任何接口,几乎没有性能开销,可以很容易的在机器和数据中心运行,最重要的是,他们不依赖于任何语言、框架或者包装系统。
Docker的logo十分有特点,一条鲸鱼载着很多集装箱,集装箱中满是要交付的货物。鲸鱼就是操作系统,而集装箱就是Docker,集装箱中的就是要交付的货物,也就是应用程序。各种"货物"之间的尺寸、大小、形状是各不相同的,都要放到鲸鱼身上,那么就要考虑各种货物怎么安放,还得考虑货物之间能否重叠起来。
于是就有了集装箱的概念,将每件货物都放到集装箱中,各个应用程序相当于不同的集装箱,每个应用程序有着不同的应用环境,比如:python开发的应用需要服务器部署一套python的开发环境,nodejs开发的应用需要服务器部署nodejs的环境,不同环境之间有可能还会彼此冲突,而Docker就可以帮助我们隔离不同的环境。
这时,有人就会想,这不是虚拟机干的事情吗?是的,虚拟机可以很好的帮我们隔离各个环境,我们可以在windows上运行macOS、ubuntu等虚拟机,也可以在macos上安装Windows的虚拟机。但是虚拟机虚拟化的是硬件(虚拟机和宿主机共享的是硬件,如网卡、声卡等,系统需要自己装),传统虚拟机需要独立安装操作系统,故可以安装并运行不同的操作系统,而对于Docker容器来说,是不需要独立的操作系统,每个容器都是共享同一个操作系统,比虚拟机更加的轻便和快捷。容器内的应用进程直接运行于宿主的内核,也不用进行硬件虚拟。因此Docker容器要比传统虚拟机更为轻便,启动更快。下图比较了两者的区别:
两者对比总结:
二、Docker三要素
Docker作为一个软件集装箱化平台,可以让开发者构建应用程序时,将它与其依赖环境一起打包到一个容器中,将镜像打包后上传到仓库,就可以发布应用到任意平台中。在使用时,只用一条命令就可以将镜像拉取到