标签:虚拟机 驱动 工作 res 一键部署 依赖 文件夹 升级 问题
一款产品从开发到上线,从操作系统到运行环境,再到应用配置,作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司不得不面对的问题,特别是各个版本的迭代之后,不同版本环境的兼容对运维人员都是考验。Docker之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案。
环境配置如此麻烦,换一台机器,就要重来一次,费力费时,很多人想到,能不能根本上解决问题,软件可以带环境安装,也就是说安装的时候,把原始环境一模一样的复制过来,开发人员利用Docker可以消除协作编码时“在我的机器上可以正常工作”的问题。
之前在服务器配置一个应用的运行环境, 要安装各种软件,比如:JAVA/TOMCAT/MYSQL/JDBC驱动包等。安装配置麻烦,而且不能跨平台。假如在Windows上安装这些环境,到Linux又要重新装,况且就算不跨操作系统,换另一台同样操作系统的服务器,要移植应用也是非常麻烦的。
传统上认为,软件编码开发/测试结束后,所产出的成果既是程序或是能够编译执行的二进制字节码等(Java为例)。而为了让这些程序可以顺利执行,开发团队也得准备完整的部署文件,让运维团队得以部署应用程序,开发需要清楚的告诉运维团队,用的配置文件+所有软件环境。Docker镜像的设计,使得Docker得以打破过去【程序即应用】的观念。通过镜像(images)将作业系统核心除外,运作应用程序所需要的系统环境,由下而上打包,达到应用程序跨平台的无缝接轨运作,一次构建,处处运行。
Docker是基于Go语言实现的云开源项目。
Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的App(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。
Linux容器技术的出现解决了这样一个问题,而Docker就是在它的基础上发展过来的。将应用运行在Docker容器上面,而Docker容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。
每个虚拟机都包括应用程序、必要的二进制文件和库以及一个完整的客户操作系统(Guest OS),尽管它们被分离,它们共享并利用主机的硬件资源,将近需要十几个 GB 的大小。
容器包括应用程序及其所有的依赖,但与其他容器共享内核。它们以独立的用户空间进程形式运行在主机操作系统上。他们也不依赖于任何特定的基础设施,Docker 容器可以运行在任何计算机上,任何基础设施和任何云上。
综上:Docker守护进程可以直接与主操作系统进行通信,为各个Docker容器分配资源;它还可以将容器与主操作系统隔离,并将各个容器互相隔离。虚拟机启动需要数分钟,而Docker容器可以在数毫秒内启动。由于没有臃肿的从操作系统,Docker可以节省大量的磁盘空间以及其他系统资源。
Docker使用客户端-服务器 (C/S) 架构模式。Docker客户端会与 Docker守护进程进行通信。Docker守护进程会处理复杂繁重的任务,例如建立、运行、发布你的Docker容器。Docker客户端和守护进程可以运行在同一个系统上,当然你也可以使用Docker客户端去连接一个远程的Docker守护进程。Docker客户端和守护进程之间通过 socket或者RESTful API进行通信。
如上图所示,Docker守护进程运行在一台主机上。用户并不直接和守护进程进行交互,而是通过 Docker客户端间接和其通信。
Docker客户端,实际上是docker的二进制程序,是主要的用户与Docker交互方式。它接收用户指令并且与背后的Docker守护进程通信,如此来回往复。
要理解Docker内部构建,需要理解以下三种部件:
Docker 镜像 - Docker images
Docker 仓库 - Docker registeries
Docker 容器 - Docker containers
Docker镜像是Docker容器运行时的只读模板,每一个镜像由一系列的层(layers)组成。Docker使用UnionFS来将这些层联合到单独的镜像中。UnionFS允许独立文件系统中的文件和文件夹(称之为分支)被透明覆盖,形成一个单独连贯的文件系统。正因为有了这些层的存在,Docker是如此的轻量。当你改变了一个Docker镜像,比如升级到某个程序到新的版本,一个新的层会被创建。因此,不用替换整个原先的镜像或者重新建立(在使用虚拟机的时候你可能会这么做),只是一个新的层被添加或升级了。现在你不用重新发布整个镜像,只需要升级,层使得分发 Docker镜像变得简单和快速。
Docker仓库用来保存镜像,可以理解为代码控制中的代码仓库。同样的,Docker仓库也有公有和私有的概念。公有的 Docker仓库名字是Docker Hub(最大的公开仓库)。Docker Hub提供了庞大的镜像集合供使用。这些镜像可以是自己创建,或者在别人的镜像基础上创建。仓库(Repository)和仓库注册服务器(Registry)是有区别的,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签。
Registry:注册服务器,用于管理镜像仓库,起到的是服务器的作用。
Repository:镜像仓库,用于存储具体的docker镜像,起到的是仓库存储作用。
Docker容器和文件夹很类似,一个Docker容器包含了所有的某个应用运行所需要的环境。每一个 Docker容器都是从Docker镜像创建的。Docker容器可以运行、开始、停止、移动和删除。每一个Docker容器都是独立和安全的应用平台,Docker容器是Docker的运行部分,容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。
标签:虚拟机 驱动 工作 res 一键部署 依赖 文件夹 升级 问题
原文地址:https://www.cnblogs.com/zhuzhaoli/p/11140955.html