1.什么是docker?
Docker是一个开源的管理容器的引擎,为应用打包、部署平台,而非单纯的虚拟化技术。
docker的logou:
docker可以让开发者打包它们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的linux机器上,也可以实现虚拟化。
容器相互之间不会有任何接口,更重要的是容器性能开销极低。
2.容器和虚拟机的区别:
-
传统虚拟机: 我们在主机操作系统上,可以安装多个虚拟机,而每个虚拟机都包括应用程序、必要的二进制文件和库以及一个完整的客户操作系统,当虚拟机启动后,就可以与主机建立网络连接,确保虚拟机与主机之间是互通的,不同虚拟机之间却是相互隔离的,但是每个虚拟机占用的都是主机的硬件与网络资源。
-
docker: 在主机操作系统上,有一个docker引擎在运行,在此服务上,我们可以开启多个docker容器,每个docker容器中可运行自己所需要的应用序,docker容器之间也是相互隔离的,都是占用主机的硬件与网络资源。
容器包括应用程序及其所有的依赖,但与其它容器共享内核,容器不依赖任何特定的基础设施,docker容器可以运行在任何计算机上,任何基础设施和任何云上。
传统虚拟化与容器技术对比:
虚拟机 | docker容器 | |
---|---|---|
操作系统 | 宿主机上运行虚拟机OS | 共享宿主机OS |
存储 | 镜像较大(GB) | 镜像小(MB) |
性能 | 操作系统额外的cpu、内存消耗 | 几乎无性能损耗 |
移植性 | 笨重、与虚拟化技术耦合度高 | 轻量、灵活迁移 |
隔离性 | 完全隔离 | 安全隔离 |
部署 | 慢、分钟级 | 快速、秒级 |
运行密度 | 一般几十个 | 单机支持上千容器 |
3.docker容器的优势:
对于开发人员:Build once(一次构建)、Run anywhere(可以运行在任何地方)
对于运维人员:Configure once(配置一次)、Run anytihing(运行任何事情)
- 快速、一致的交付你的应用程序;
- 响应式部署和扩展;
- 在同一硬件上运行更多工作负载。
4.容器是如何工作的?
当收到客户端任务时,docker首先检测有没有本地镜像,如果没有,可以从仓库里面下载镜像,下载之后再创建容器。
docker的三个基本概念:
- 镜像(image): docker镜像就相当于是一个root文件系统,比如官方镜像ubuntu 16.04就包含了完整的一套ubuntu 16.04最小系统的root文件系统;
- 容器(container): 镜像和容器的关系就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等;
- 仓库(repository): 仓库可以看成是一个代码控制中心,用来保存镜像。
docker使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建docker容器;
docker容器通过docker镜像来创建。
docker镜像(images) | docker镜像是用于创建docker容器的。不如ubuntu系统 |
docker容器(container) | 容器是独立运行的一个或一组应用,是镜像运行时的实体 |
docker客户端(client) | docker客户端通过命令行或其它工具使用的docker SDK与docker的守护进程通信 |
docker主机(host) | 一个物理或虚拟的机器用于执行docker守护进程和容器 |
docker registry | docke仓库用来保存镜像,可以理解为代码控制中的代码仓库;docker hub提供了庞大的镜像集合供使用。一个docker registry中可以包含多个仓库,每个仓库可以包含多个标签,每个标签对应一个镜像。(一个仓库云包含同一个软件不同版本的镜像,而标签就常用于对应软件的各个版本) |
5.docker应用场景:
- web应用的自动化打包和发布;
- 自动化测试和持续集成、发布;
- 在服务型环境中部署和调整数据库或其它的后台应用;
- 从头编译或者扩展现有的openshift或cloud foundry平台来搭建自己的pass环境。