Docker合集(一)什么是Docker?
原创不易,转载请注明来源。有疑问欢迎大佬提出。
随便说点什么
Docker一直有在粗劣的使用:Dockerfile、docker-compose、kubectl、使用docker便捷的部署别人的应用、使用Docker部署自己的小工具……
目前的水平,只会一些简单的使用,简单的工具,也许连入门的都达不到。新入职的公司也已经全面拥抱容器化。在云计算、大数据非常热门的今天,熟练掌握容器技术,绝对是必不可少的。So…从头系统化的学习Docker吧。
该系列的文章会一直更新下去。学习参考的文章、书籍会一一标注出来。文章提到的工具、app也会一一附上下载链接。
一起学习吧,有说错的地方,欢迎各位大佬评论提出,一起学习进步。我们都站在巨人的肩膀上。
Docker的背景
先自报家门嘛,看过魔戒的都知道,关键人物出来时自我介绍都会说一句。我的名字是什么,是xxx之子。
Docker 是基于 Go 语言实现的开源容器项目,诞生于2013年初。官网是docker.com,相关文档、安装包。都可以在官网上找到。支持目前几乎所有的主流操作系统包括 Linux 各大发行版(Centos、Ubuntu)、Windows、MacOS。
Docker基于 Linux 容器技术(Linux Containers, LXC)。
Docker 的设计思想是:Build, Ship and Run Any App, Anywhere(一次封装、到处运行)。听起来怎么那么像Java(一次编译,处处运行)????
这咱不管,总之是一个好的设计思想就可以了。
为什么要使用Docker,Docker的优点是什么
Docker 在正确的地点、 正确的时间顺应了正确的趋势一一如何正确地构建应用 。
在云计算时代,开发者创建的应用必须要很方便的在网络上传播。怎样才能达到方便二字?无需编译、脱离环境依赖、脱离物理硬件的限制……
-
这里举个例子:
假如我们要使用 LAMP (Linux+Apache+MySQL+PHP )组合来搭建一个网站 。 按照传统的做法,首先需要安装PHP环境、Apache、MySQL以及它们各自运 行所依赖的环境;之后分别对它们进行配置(包括创建合适的用户、配置参数等)。经过大 量的操作后,还需要进行功能测试,看是否工作正常;如果不正常,则进行调试追踪,意味着我们需要花更多的时间代价和面临位置的风险。
特别是如果我们需要加一台设备、或在另一台服务器上部署这个程序。那么同样的环境我们需要再搭一遍。这真心的非常非常幸苦。
Docker在开发和运维中的优势
对于开发人员来说,最好的效果是一次编译打包后,可以在任何地方、任何时间、任何机器上让程序正确的运行,Docker就是这样子的一个强大的工具。
-
快速部署
使用 Docker ,开发人员可以将你的程序、环境打包成一个镜像;开发完成之后,测试和运维人员可以在任何安装了Docker的机器上,直接使用你的镜像一键部署你的应用。不用额外的测试、调试。
-
更高效的资源利用
Docker 是内核级的虚拟化,系统级别的虚拟化。可以实现更高的性能,与传统虚拟机相比性能能提高很多倍,具体对比,在下文提到
-
更轻松的迁移扩展
Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云 、个人电脑 、服务器等,同时支持主流的操作系统发行版本。这种兼容性让用户可以在不同平台之间轻松地迁移应用 。
Docker与虚拟机比较
-
Docker速度很快
启动和停止一个应用,可以在秒级实现,而虚拟机则需要分钟级别。
-
Docker容器对系统资源的需求更小
基本一台主机上运行上千个容器都不成问题。而虚拟机运行几十个可能就到瓶颈了。
-
Docker和Git有着类似的先进的设计理念
用户可以制作镜像发布供别人使用,自己也可以在Docker Hub中获取到丰富的镜像。
-
Docker通过Dockerfile来自动化创建、配置应用。使用方便
Docker 容器除了运行其中的应用外, 基本不消耗额外的系统资源, 在保证应用性能的同 时,尽量减小系统开销 。 传统虚拟机方式运行 N 个不同的应用就要启用 N 个虚拟机(每个虚拟机需要单独分配独占的内存、磁盘等资源),而 Docker 只需要启动 N 个隔离得“很薄的”容器, 并将应用放进容器内即可 。 应用获得的是接近原生的运行性能。
特性 | 容器 | 虚拟机 |
---|---|---|
启动速度 | 秒级 | 分钟级 |
性能 | 接近原生 | 较弱 |
内存代价 | 很小 | 较多 |
磁盘使用 | 一般为MB | 一般为GB |
运行密度 | 单机支持上千个容器 | 几十个 |
隔离性 | 完全隔离 | 完全隔离 |
迁移性 | 优秀 | 一般 |
总结
和传统的虚拟机方式相比,容器虚拟化方式在很多场景下都存在极为明显的优势。 在程序部署、管理等方面应用很广。用起来 真香!