阜阳讯拓网站建设,手机好在百度做网站吗,大连建站价格,临安做网站目录 docker解决的问题1. 开发、测试和运维人员之间的矛盾2. 更轻量的虚拟化#xff0c;节省了虚拟机的性能损耗 虚拟机与容器的区别1. 虚拟机2. 容器 Docker 系统架构 docker解决的问题
1. 开发、测试和运维人员之间的矛盾
“程序在我这跑得好好的#xff0c;在你那怎么就… 目录 docker解决的问题1. 开发、测试和运维人员之间的矛盾2. 更轻量的虚拟化节省了虚拟机的性能损耗 虚拟机与容器的区别1. 虚拟机2. 容器 Docker 系统架构 docker解决的问题
1. 开发、测试和运维人员之间的矛盾
“程序在我这跑得好好的在你那怎么就不行呢”这是一个典型的应用场景Docker image中包含了程序需要的所有的运行时依赖比如java的程序肯定要在image中包含jdk比如Python的程序肯定要在image中包含对应版本的Python解释器。程序在我这跑得好好的去你那就不行了显然是环境问题。Docker把整个运行时环境打包放到image中所以搞定了环境依赖问题。
我们知道一个程序要跑起来需要这么几部分代码 运行环境 配置 依赖的服务。代码当然就是同一份代码环境如果都一样通常不会有问题。Docker image中包含了运行环境配置这对部署相当友好。如果你没有做过这种系统那你肯定装过软件装一些复杂的软件的时候有没有因为版本依赖或者编译参数等让你抓狂用了Docker再也没有这种问题了
docker pull xxx;
docker run xxx; 所以总结起来就是Docker解决了运行环境和配置问题方便部署也就方便做持续集成。
2. 更轻量的虚拟化节省了虚拟机的性能损耗
“系统好卡肯定是又有哪个哥们的程序在作孽了”。现在的服务器都牛的很动不动128G内存24个CPULinux本身就是个多租户的操作系统可以多人共用但是如果某个程序狂吃内存和CPU占用了太多系统资源这就会影响其他程序的运行。一个公司的几个同事共用一台机器出现这种问题可以通过内部协调沟通解决。但是云主机提供商呢不同的用户之间不认识共用一台强大的计算机结果某个程序耗尽了资源其他用户肯定不乐意了。
所以虚拟机出现了做了资源隔离不同用户之间彼此老死不相往来不会相互影响世界一下子清静了。但是虚拟机有缺点创建速度慢迁移起来麻烦因为中间多了虚拟硬件和虚拟操作系统的创建有了性能损耗。一台高性能服务器创建十几个虚拟机太浪费了……
相对虚拟机的重量级虚拟化方案Linux内核级的一些隔离方案让人们看到了希望cgroups、namespace、tc、quota、chroot、lxc终于Docker出现了Docker利用这些成熟的技术。详见深挖 Docker 之 Linux namespace 和 cgroups让虚拟化变得轻量了起来创建一个container瞬间完成速度可以达到秒级甚至是毫秒级性能损耗非常小虽说隔离性没有虚拟机那么彻底安全性上稍差一些但也基本可以用不用太担心。
虚拟机与容器的区别
Docker 容器的本质就是通过容器虚拟技术虚拟出的一台主机就像虚拟机一样。可以将应用及其运行环境部署在这台虚拟出的主机上运行。但容器与虚拟机又有着本质的不同。
1. 虚拟机
传统的虚拟技术是在物理机的操作系统之上安装一个虚拟机管理程序例如 VMware、VirtualBox 等。在其管理下可以创建很多个虚拟机。每个虚拟机需要安装自己独立的操作系统而应用就是安装在虚拟机操作系统之上的程序应用程序通过调用各种命令或库函数来使用其需要的各种系统资源。
对于完全相同的两个应用其若需要运行在两个虚拟机中则就需要两套完全相同的虚拟机操作系统与 Binaries/Libraries存在大量的资源占用冗余。形成资源浪费。
Hypervisor是一种运行在物理服务器和操作系统之间的中间软件层可允许多个操作系统和应用共享一套基础物理硬件因此也可以看作是虚拟环境中的“元”操作系统他可以协调访问服务器上的所有的物理设备和虚拟机也叫虚拟机监视器。Hypervisor是所有虚拟化技术的核心。当服务器启动并执行Hypervisor时他会给每一台虚拟机分配适量的内存、CPU、网络和磁盘并加载所有虚拟机的客户操作系统。常见的产品有Vmware、KVM、Xen等。
2. 容器
Docker 容器运行在 Docker 引擎之上所有 Docker 容器共享同一个 Docker 引擎但它们的运行又是相互隔离、互不干扰的。由于 Docker 容器不需要进行虚拟硬件及操作系统而是共享的宿主机的硬件与操作系统所以 Docker 容器对系统资源的占用很少其仅包含运行时必须的一些资源。所有 Docker 容器对于系统资源的使用都是由 Docker 引擎统一进行管理所以对系统资源的利用率很高。无论是应用执行速度、内存损耗或者文件存储速度都要比传统虚拟机技术更高效。 Docker 系统架构
Docker中具有几个非常重要的概念下面通过理解这些概念来了解Docker的系统架构。 Docker client : Docker 命令行工具是用户使用Docker的主要方式Docker client与Docker daemon通信并将结果返回给用户Docker client也可以通过socket或者RESTful api访问远程的Docker daemon。 Docker Daemon : Docker 守护进程其监听着 Docker API 请求并管理 Docker对象例如镜像、容器、网络和卷。守护进程还可以与其他守护进程通信以管理 Docker 服务。 Docker image 镜像是只读的镜像中包含有需要运行的文件。镜像用来创建container一个镜像可以运行多个container镜像可以通过Dockerfile创建也可以从Docker Hub/Registry上下载。 Docker container 容器是Docker的运行组件启动一个镜像就是一个容器容器是一个隔离环境多个容器之间不会相互影响保证容器中的程序运行在一个相对安全的环境中。 Docker Registry: Docker 的镜像中心中存放着很多由官方、其他机构或个人创建的 Docker 仓库Docker用户可以直接从这些仓库中 pull 需要的镜像也可以将自己制作的镜像 push 到 Docker 镜像中心相应的仓库中。最常用的镜像中心是Docker官方的Docker Hubhttps://hub.docker.com。