麦芽网登陆,绝对不单淳,飞利浦小家电维修
什么是docker?
docker的英文本意是码头工人,也就是搬运工,这种搬运工搬运的是集装箱(container),集装箱里面装的可不是商品货物,而是任意类型的app,docker把app(叫payload)装在container内,通过linux container技术的包装将app变成一种标准化的、可移植的、自管理的组件,这种组件可以在你的latop上开发、调试、运行,最终非常方便和一致地运行在production环境下。
docker的核心底层技术是lxc(linux container),docker在其上面加了薄薄的一层,添加了许多有用的功能。这篇stackoverflow上的问题和答案很好地诠释了docker和lxc的区别,能够让你更好的了解什么是docker, 简单翻译下就是以下几点:
docker提供了一种可移植的配置标准化机制,允许你一致性地在不同的机器上运行同一个container;而lxc本身可能因为不同机器的不同配置而无法方便地移植运行;
docker以app为中心,为应用的部署做了很多优化,而lxc的帮助脚本主要是聚焦于如何机器启动地更快和耗更少的内存;
docker为app提供了一种自动化构建机制(dockerfile),包括打包,基础设施依赖管理和安装等等;
docker提供了一种类似git的container版本化的机制,允许你对你创建过的容器进行版本管理,依靠这种机制,你还可以下载别人创建的container,甚至像git那样进行合并;
docker container是可重用的,依赖于版本化机制,你很容易重用别人的container(叫image),作为基础版本进行扩展;
docker container是可共享的,有点类似github一样,docker有自己的index,你可以创建自己的docker用户并上传和下载docker image;
docker提供了很多的工具链,形成了一个生态系统;这些工具的目标是自动化、个性化和集成化,包括对paas平台的支持等;
那么docker有什么用呢?对于运维来说,docker提供了一种可移植的标准化部署过程,使得规模化、自动化、异构化的部署成为可能甚至是轻松简单的事情;而对于开发者来说,docker提供了一种开发环境的管理方法,包括映像、构建、共享等功能。
docker vs. vm
从下图可以看出,vm是一个运行在宿主机之上的完整的操作系统,vm运行自身操作系统会占用较多的cpu、内存、硬盘资源。docker不同于vm,只包含应用程序以及依赖库,基于libcontainer运行在宿主机上,并处于一个隔离的环境中,这使得docker更加轻量高效,启动容器只需几秒钟之内完成。由于docker轻量、资源占用少,使得docker可以轻易的应用到构建标准化的应用中。但docker目前还不够完善,比如隔离效果不如vm,共享宿主机操作系统的一些基础库等;网络配置功能相对简单,主要以桥接方式为主;查看日志也不够方便灵活。
另外,ibm发表了一篇关于虚拟机和linux container性能对比的论文,论文中实际测试了虚拟机和linux container在cpu、内存、存储io以及网络的负载情况,结果显示docker容器本身几乎没有什么开销,但是使用aufs会一定的性能损耗,不如使用docker volume,docker的nat在较高网络数据传输中会引入较大的工作负载,带来额外的开销。不过container的性能与native相差不多,各方面的性能都一般等于或者优于虚拟机。container和虚拟机在io密集的应用中都需要调整优化以更好的支持io操作,两者在io密集型的应用中都应该谨慎使用。
docker组件
docker是cs架构,主要由下面三部分组成:
docker daemon: 运行在宿主机上,docker守护进程,用户通过docker client(docker命令)与docker daemon交互
docker client: docker 命令行工具,是用户使用docker的主要方式,docker client与docker daemon通信并将结果返回给用户,docker client也可以通过socket或者restful api访问远程的docker daemon
docker hub/registry: 共享和管理docker镜像,用户可以上传或者下载上面的镜像,官方地址为https://registry.hub.docker.com/,也可以搭建自己私有的docker registry。
了解了docker的组成,再来了解一下docker的两个主要概念:
docker image:镜像是只读的,镜像中包含有需要运行的文件。镜像用来创建container,一个镜像可以运行多个container;镜像可以通过dockerfile创建,也可以从docker hub/registry上下载。
docker container:容器是docker的运行组件,启动一个镜像就是一个容器,容器是一个隔离环境,多个容器之间不会相互影响,保证容器中的程序运行在一个相对安全的环境中。
docker网络
docker的网络功能相对简单,没有过多复杂的配置,docker默认使用birdge桥接方式与容器通信,启动docker后,宿主机上会产生docker0这样一个虚拟网络接口, docker0不是一个普通的网络接口, 它是一个虚拟的以太网桥,可以为绑定到docker0上面的网络接口自动转发数据包,这样可以使容器与宿主机之间相互通信。每次docker创建一个容器,会产生一对虚拟接口,在宿主机上执行ifconfig,会发现多了一个类似veth****这样的网络接口,它会绑定到docker0上,由于所有容器都绑定到docker0上,容器之间也就可以通信。
在宿主机上执行ifconfig,会看到docker0这个网络接口, 启动一个container,再次执行ifconfig, 会有一个类似veth****的interface,每个container的缺省路由是宿主机上docker0的ip,在container中执行netstat -r可以看到如下图所示内容:
容器中的默认网关跟docker0的地址是一样的:
当容器退出之后,veth*虚拟接口也会被销毁。
除bridge方式,docker还支持host、container、none三种网络通信方式,使用其它通信方式,只要在docker启动时,指定--net参数即可,比如:
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
win10如何启用管理员账户 win10禁用/启用管理员账户的方法
win10怎么查看驱动是否异常 Win10检测驱动程序是否正常的方法
Windows10系统任务栏无效图标怎么删除 通过注册表一键快速删除
Win10系统自动重启怎么办 Win10系统自动重启的关闭方法
怎么减少win10笔记本功耗 详谈笔记本硬件功耗大的原因和解决办法
网友评论