当前位置: 首页 > Linux

Docker简介

时间:2023-04-06 18:16:20 Linux

1.什么是Docker?1、为什么会出现Docker?一个产品从开发到上线,从操作系统到运行环境,再到应用配置。作为开发+运维的协同,我们需要关心的东西很多。这也是很多互联网公司不得不面对的问题,尤其是经过各个版本的迭代之后,不同版本环境的兼容性对运维人员来说是一个考验,Docker之所以发展如此迅速,也是因为它给出了一个标准化的解决方案。环境配置好麻烦。如果换了一台机器,又得从头再来,既费工又费时。很多人想,能不能从根本上解决问题,软件能随环境一起安装呢?也就是说,在安装的时候,把原来的环境原封不动的复制过来。使用Docker,开发人员可以在协同编码时消除“在我的机器上工作”的问题。在服务器上配置一个应用程序运行环境之前,需要安装各种软件,Java/Tomcat/MySQL/JDBC驱动包等等,先不说安装配置这些东西有多麻烦,还不能跨平台.如果我们在Windows上安装了这些环境,我们必须在Linux上重新安装它们。而且,即使不跨操作系统,将应用程序移植到另一台具有相同操作系统的服务器上也是非常麻烦的。传统上认为,软件编码开发/测试完成后,输出的是可以编译执行的程序或二进制字节码(以java为例)。为了让这些程序能够顺利执行,开发团队还必须准备好完整的部署文件,以便运维团队部署应用。开发需要明确告知运维部署团队所有的配置文件+所有使用的软件环境。然而,即使如此,部署失败也时有发生。Docker镜像的设计使Docker打破了过去“一个程序就是一个应用”的观念。除了操作系统核心通过镜像外,应用运行所需的系统环境自下而上进行封装,实现应用的无缝跨平台运行。2.Docker概念Docker是一个基于Go语言的云开源项目。Docker的主要目标是“Build,ShipandRunAnyApp,Anywhere”,就是让用户的APP(可以是WEB应用,也可以是数据库应用)等及其运行环境能够做到“一包,一包,一包,一包”。到处跑”。Linux容器技术的出现解决了这样一个问题,Docker就是在它的基础上发展起来的。在Docker容器上运行应用,Docker容器在任何操作系统上都是一致的,实现了跨平台、跨服务器。只需配置一次环境,切换到另一台机器即可一键部署,大大简化了操作。技术。2.可以做什么?1、前面的虚拟化技术虚拟机(virtualmachine)是一种带环境安装的解决方案。它可以在一个操作系统中运行另一个操作系统,比如在Windows系统中运行Linux系统。应用程序并不知道这一点,因为虚拟机看起来和真实系统一模一样,但是对于底层系统来说,虚拟机只是一个普通的文件,不需要的时候可以删除,没有任何作用在其他部分。这种虚拟机完美运行另一个系统,可以保持应用程序、操作系统和硬件之间的逻辑不变。虚拟机的缺点:1.占用资源多2.冗余步骤多3.启动慢2.容器虚拟化技术由于之前虚拟机的这些缺点,Linux又开发了另一种虚拟化技术:LinuxContainers(Linux容器),简称为LXC)。Linux容器不是模拟一个完整的操作系统,而是隔离进程。使用容器,可以将软件运行所需的所有资源打包到一个隔离的容器中。与虚拟机不同,容器不需要捆绑完整的操作系统,而只需要捆绑软件运行所需的库资源和设置。系统因此变得高效和轻量级,并确保部署在任何环境中的软件都能始终如一地运行。比较Docker与传统虚拟化方式的区别:传统的虚拟机技术是虚拟出一套硬件,在其上运行完整的操作系统,然后在该系统上运行所需的应用进程;而容器中的应用进程直接运行在宿主机的内核上,容器没有自己的内核,也没有硬件虚拟化。因此,容器比传统的虚拟机更便携。每个容器都是相互隔离的,每个容器都有自己的文件系统。容器之间的进程不会互相影响,计算资源可以区分。3.一次构建,随处运行1.更快的应用程序交付和部署。传统应用开发完成后,需要提供一堆安装程序和配置说明。Docker化后,只需要交付少量容器镜像文件,即可在正式生产环境中加载运行镜像。应用安装配置已经内置到镜像中,大大节省了部署配置和测试验证的时间。2.更方便的升级和扩展随着微服务架构和Docker的发展,大量的应用将通过微服务进行结构化,应用的开发和构建将变得像乐高积木一样。每个Docker容器都会成为一块块“积木”,应用升级会变得非常容易。当现有容器不足以支撑业务处理时,可以通过镜像的方式快速扩展新的容器,使应用系统的扩展从原来的日级扩展到分钟级甚至秒级。3.系统维护更简单应用容器化后,运行在生产环境的应用可以与开发测试环境的应用高度一致。容器会把与应用相关的环境和状态完全封装起来,不会因为底层基础设施和操作系统的不一致而影响应用而产生新的bug。当程序出现异常时,也可以通过测试环境的同一个容器快速定位并修复。4、更高效的计算资源利用Docker是内核级虚拟化,不需要像传统虚拟化技术那样需要额外的Hypervisor支持,因此可以在一台物理机上运行很多容器实例,可以大大提高物理服务器的CPU和内存利用。四、企业应用1、美团2、新浪3、蘑菇街五、基本构成1、镜像Docker镜像是一个只读模板。镜像可以用来创建Docker容器,一个镜像可以创建多个容器。容器与镜像的关系类似于面向对象编程中的对象与类Docker。2、容器(container)Docker使用一个容器(Container)来独立运行或运行一组应用程序。容器是从图像创建的运行实例。它可以启动、启动、停止、删除。每个容器都是一个隔离且安全的平台。容器可以看作是Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序的简化版。容器的定义和图像的定义几乎一样,也是层层叠叠的统一视角。唯一的区别是容器的顶层是可读可写的。3、存储库(repository)存储库(Repository)是集中存储图像文件的地方。仓库(Repository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中包含多张图片,每张图片都有不同的标签(tag)。仓库分为公共仓库(Public)和私有仓库(Private)。最大的公共存储库是DockerHub(https://hub.docker.com/),它存储了大量的图像供用户下载。国内的公共仓库有阿里云、网易云等。总结需要正确理解存储/镜像/容器的概念:Docker本身就是一个容器运行载体或者管理引擎。我们将应用程序和配置依赖打包,形成一个可交付的运行环境。这个打包后的运行环境就像一个镜像镜像文件。只有通过这个镜像文件才能生成Docker容器。图像文件可以看作是容器的模板。Docker根据镜像文件生成容器实例。同一个镜像文件可以生成多个同时运行的容器实例。镜像文件生成的容器实例本身就是一个文件,称为镜像文件。容器运行服务。当我们需要的时候,我们可以通过docker客户端创建一个对应的运行实例,也就是我们的容器存储,就是一个放一堆镜像的地方。我们可以将图片发布到存储中,需要的时候可以从仓库中拉取。六、底层原理1、Docker是如何工作的?Docker是一个具有Client-Server结构的系统。Docker守护进程运行在主机上,然后通过Socket连接从客户端访问它。守护进程接受来自客户端的命令并管理在主机上的运行。容器。容器就是一个运行环境,也就是我们前面说的容器。2、为什么Docker比VM快(1)Docker比虚拟机抽象层少。因为docker不需要hypervisor来实现硬件资源虚拟化,运行在docker容器上的程序直接使用实际物理机的硬件资源。因此,docker在CPU和内存利用率方面,在效率上会有明显的优势。(2)docker使用宿主机的内核,不需要GuestOS。因此,在创建新容器时,docker不需要像虚拟机那样重新加载操作系统内核。仍然避免了启动和加载操作系统内核的耗时耗资源过程,在创建新虚拟机时,虚拟机软件需要加载GuestOS,而这个新过程需要几分钟。而docker省略了这个过程,因为它直接使用宿主机的操作系统,所以创建一个新的docker容器只需要几秒钟的时间。本文作者:浑昊轩欢迎关注公众号本人保留所有权益,转载请注明出处。有故事有想法的朋友欢迎和我分享,也可以发到邮箱:lwqforit@163.com