目录
1、传统方式、虚拟化、容器部署方式的区别
2、为什么会有docker
3、什么是docker
4、docker的优势
5、Docker组成部分
6、docker镜像的原理介绍
7、 容器应用场景
8、Docker资源汇总
了解docker之前,我们要先了解部署方式有哪些,各有什么优缺点!
企业软件的部署方式介绍:
传统部署方式在企业的最初期,直接将软件部署在企业服务器上
优点:部署简单,不需要复杂的技术参与
缺点:无法定义资源的使用量,很难合理分配计算机资源,程序之间容易产生影响。
虚拟化部署方式介绍:
虚拟化是计算机系统的仿真技术,可以在一台物理机上模仿出多台跟物理机一样的单独计算机系统,可将软件部署在虚拟机中。
优点:可以合理的利用计算机的资源,降低了成本,每个虚拟机拥有独立的运行环境,可保障程序之间不会相互影响。
缺点:每个虚拟机不仅需要虚拟出一套完整的系统副本,还需要虚拟所有硬件的副本
缺点:占用资源多:虚拟机需要安装整个操作系统,自然会消耗大量内存和硬盘空间。如我们只需要运行1MB的软件,有时候也不得不安装几个G的环境才能运行。
缺点:运行步骤冗余:虚拟机安装的是完整的系统,每次运行程序都需要按部就班,打开系统、登入用户等等之类麻烦的步骤,很不方便。
缺点:运行速度慢:为了运行特定环境中的软件,虚拟机必须先运行系统,而系统占用的资源往往很多(网络,GUI,IO等等),自然也会影响运行速度。
容器化部署方式介绍:
容器化部署和虚拟机部署方式类似,可以在一台物理机上运行多个容器,将软件部署在容器中。
优点:与虚拟化类似,可以合理的利用计算机的资源,降低了成本,每个容器拥有独立的运行环境,可保障程序之间不会相互影响
区别:容器不需要完整的系统副本与所有硬件的副本,我们可以把容器看成虚拟机的精华版,容器位于物理机系统之上,共享了同一个物理机系统内核及硬件资源。
区别:容器减少了内核与硬件资源的虚拟化工序,只保留了容器内程序所需要的必要配置,这就意味着容器比虚拟机更节约系统资源,更加的轻量(启动秒级别的)
此外,容器还可以为开发,测试,运维提供一个可移植,一致的操作环境。
我们知道一款产品从开发到上线,从开发环境到生成环境。作为开发和运维人员之间协作需要考虑很多问题,尤其是当我们的产品多版本迭代之后,不同环境之间的兼容就会成为一个大问题;这时 Docker 的出现就解决了这一难题,Docker 的出现使我们开发的软件可以“带环境安装”,即安装的时候,可以把原始环境一模一样的的复制过来,不用在担心环境不一致导致“开发时可以正常运行,生成环境就会出问题”,“在我的机器上可以正常运行,在别人的机器上就不能运行”的问题了。
Docker 就像是一个轻量级的虚拟机,Docker是一个轻量级的容器,我们可以将环境交给 Docker 来管理,当我们需要移植我们的产品的时候,就可以将环境整个的迁移到另一台主机上,而不向虚拟机一样,迁移一台虚拟机极其资源;
Docker 是一个开源的应用容器引擎,基于 Go 语言开发。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
总之:Docker相较于虚拟机来说具有更加轻量,启动更快,效率更高,可移植性更强等优势,实现了“一次封装,到处运行”,不用在关心环境的不一致问题
运行环境的一致性:Docker 的镜像提供了除了内核之外完整的运行环境,确保了应用运行的一致性;
更快速地启动部署:可以做到秒级,甚至毫秒级的的启动时间。大大节约了开发、测试、部署的时间;
更好的隔离性:每个服务器都是独立运行的、完全隔离的。避免公用的服务器,资源会容易受到其他用户的影响;
弹性伸缩、快速扩展:能够更好的处理集中爆发式的服务器使用压力;
迁移更加方便:“带环境安装”;
持续交付和部署:使用 Docker 可以通过定制镜像来实现持续集成,交付,部署;
镜像(images):用来创建容器的模板(静态文件),一个镜像可以创建多个容器(容器动态)
容器(container): 程序的载体,程序运行在容器中,每个容器相互隔离,互不影响,但可以相互通讯
仓库(Repository):集中存放镜像的场所,仓库分为公开仓库(public)和私有仓库(private)两种(类似于git和SVN)
最大的公开仓库为docker hub:https://hub.docker.com
国内的公开仓库包括:阿里、网易、中科大等
什么是镜像:
镜像是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像。有通过这个镜像文件才能生成Docker容器实例。(类似Java中new出来一个对象)
镜像的分层:
Docker镜像由特殊的文件系统叠加而成,最底层是宿主机的bootfs(引导加载程序、内核)父镜像。
第二层是rootfs(称为:基础镜像)
再往上可以叠加其他的镜像文件,例如:jdk、tomcat(这也不难理解了,tomcat本身就运行在jdk环境下,但是我们从始至终都没有在docker中安装过jdk环境)
这种镜像叠加的方式我们称为“统一文件系统(Union File System)”将不同的层整合成一个文件系统,这样就隐藏 了多层的存在,在用户角度看来,只存在一个文件系统。
Docker镜像的本质是什么:
docker镜像的本质是一个分层的文件系统
centos的iso镜像文件是包含bootfs和rootfs及大量软件 包,而docker的centos镜像复用了操作系统的bootfs,也没有大量软件包,只有rootfs和其他必要镜像层。
由于docker镜像是分层的,例如:tomcat、mysql镜像本 身课程也就几十MB,但是它们需要依赖基础镜像及其他镜 像层,所以对外暴露的tomcat、MySQL大小会很大。
镜像加载原理:
bootfs(boot file system):docker镜像的最底层是bootfs,主要包含bootloader(加载器)和kernel(内核)。bootloader主要是引导加载kernel,linux刚启动时会加载bootfs文件系统。这一层与典型的linux/Unix系统一样,包含bootloader和kernel。 当boot加载完成后,整个内核就在内存中了,此时内存的使用权已由bootfs转交给了内核,此时系统也会卸载bootfs。这里的加载,可以理解为,我们windows电脑开机时候,从黑屏到进入操作系统的过程。
rootfs(root filesystem):在bootfs之上,包含的就是典型linux系统中的/dev、/proc、/bin、/etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu、Centos等等。
和为什么会有docker一样,互联网行业倡导敏捷开发,持续集成部署CI/CD便是最典型的开发模式,容器非常适合持续集成和持续交付(CI / CD)工作流程。
Docker 官方主页
Docker 官方博客
Docker 官方文档
Docker Store(镜像文件库)
Docker Cloud(云平台文档)
Docker Hub
Docker 的源代码仓库
Docker 发布版本历史
Docker 常见问题
Docker 远端应用 API
docker离线安装方式可参考上一篇文章