前言:
docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙盒机制,互相之间不会有任何接口(类似iPhone的app)。几乎没有性能开销。可以很容易的在机器和数据中心中运行,最重要的是,他们不依赖于任何语言、框架或者包装系统。
扩展:沙盒
沙盒也叫沙箱,英文sandbox。在计算机领域指的一种虚拟技术,且多用于计算机安全技术。安全软件可以先让它在沙盒中运行,如果含有恶意行为,则禁止程序的进一步运行,而这不会对系统造成任何的危害。
docker是dotcloud公司开源的一个基于LXC的高级容器引擎。源代码托管在Github上,基于go语言并遵从Apache2.0协议开源。补充:go语言是谷歌开发的。(
扩展:
LXC为Linux container 的简写。 Linux container 容器是一种内核虚拟化技术。可以提供轻量级的虚拟化。以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化(kvm->VLXMware)的其他复杂性。
LXC主要通过来提kernel的namespace实现每个用户实例之间的互相隔离,通过cgroup实现对资源的配额和度量。
)
docker让开发者可以打包他们的应用以及依赖包到一个可移植的container中,然后发布到任何流行的Linux上。
互动:
现在接触的软件是怎么发布的?Windows下的2016-office.exe在xp下兼容不太好。Mk.rpm在redhat系列Linux上运行,但是不能在其他Linux版本上运行。
例如:/mnt/Packages/vsftpd-3.0.2-10.el7.x86_64.rpm #这个包是rhel7,就不能在rhel6上运行。
结论:现在软件包必须和系统相关。但是docker 镜像可以一次编译。到处运行(这个有点像java跨平台:
Android:
Linux->jvm->java程序 app
Linux->docker->把服务做成镜像,就可以直接运行起来。
Windows->docker->把服务做成镜像,就可以直接运行起来。
)。
官方网站:https://www.docker.com/
docker本身的意思是:码头工人
logo:
注意:docker服务相当于鲸鱼,container容器相当于集装箱(
扩展:
集装箱是海上运货的一个创新
)
源代码下载:
https://GitHub.com/docker/docker
正文:
1.docker容器技术和虚拟机对比:
相同点:docker容器技术和虚拟机技术,都是虚拟化技术。
总结:docker相对于vm虚拟机,少了虚拟机操作系统这一层,所以docker效率比虚拟机高
{
比如:你的物理系统启动使用几秒?10秒
那么在docker启动就是2秒
}
2.docker 的 架构
2.1 架构图
工作流程:服务器A上运行docker engine服务,在docker engine上启动很多容器container。从外网docker hub 上把image操作系统镜像下载下来,放到container容器上运行。这样一个容器的实例就运行起来了,
最后,通过docker client 对 docker 容器虚拟化平台进行控制。
image和container的关系:image可以理解为一个系统镜像,container是image在运行时的一个状态。(
如果拿虚拟机做一个比喻的话,image就是关机状态下的磁盘文件,container就是虚拟机运行时的磁盘文件,包括内存数据。
)
dockerhub:dockerhub时docker官方的镜像存储站点,其中提供了很多常用的镜像提供用户下载,如ubuntu,centos等系统镜像,通过dockerhub用户也可以发布自己的docker镜像,为此用户需要注册一个账号,在网站上创建一个docker仓库。(
提示:
作为一个成功的开源人士或者运维人才:一定要注册一个GitHub和dockerhub账号。(包装自己)
)
2.2 docker核心技术:
1.Namespace - 实现 contalner的进程、网络、消息、文件系统和主机名的隔离。
2.cgroup - 实现对资源的配额和度量。
注意:cgroup的配额,可以指定实例使用的cpu个数,内存大小等。就像如下图,VMware虚拟机中的硬件配置参数。
3.docker 特性:
文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里。
资源隔离:系统资源,像cpu和内存等分配到不同的容器中,使用cgroup
网络隔离:每个进程容器运行在自己的网络空间,虚拟接口和IP地址
日志记录:docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或者批量检索。
变更管理:容器文件系统的变更可以提交得到新的镜像中,并可重复使用以创建更多的容器。无需使用模板或着手动配置。
交互式shell:docker 可以分配一个虚拟机终端并关联到任何容器的标准输入上,例如:运行一个一次性交互shell。
优点:
1.一些优势和vm一样,但不是所有都一样
比vm小,比vm快,docker容器的尺寸减少相比整个虚拟机大大简化了分布到云和从云分发时间和开销。docker启动一个容器实例时间很短,一两秒就可以启动一个实例。
2.对于在笔记本电脑,数据中心的虚拟机,以及任何的云上,运行相同的没有变化的应用程序,IT的发布速度更快。
Docker是一个开放的平台,构建,发布和运行分布式应用程序。
docker使应用程序能够快速从组建和避免开发和生产环境之间的摩擦。
3.你可以在部署在公司的局域网或虚拟机上使用它。
4.开发人员并不关心具体那个Linux操作系统
使用docker,开发人员可以根据所有依赖关系构建相应的软件,针对他们所选择的操作系统,然后在部署时一切是完全一样的,因为一切都在dockerimage的容器在其上运行。
开发人员负责并且确保所有的相关性得到满足
5.google,微软,亚马逊,ibm等都支持docker。
6.docker支持unix/Linux操作系统,也支持windows 或者mac
缺点局限性:
1.docker用于应用程序时是最有用的,但并不包含数据。日志,跟踪和数据库等通常应放在docker容器外,一个容器的镜像通常都很小,不适合存大量数据,存储都可以通过外部挂载的方式使用。比如使用:nfs,ipsan,mfs等,-v 映射磁盘分区
一句话:docker 只用于计算,存储交给别人。
oracle不适合使用docker来运行,太大了,存储的数据太多了。