首页 > 编程知识 正文

docker教程,docker菜鸟教程

时间:2023-05-05 18:14:26 阅读:12469 作者:48

一.什么是Docker配置文件1.1虚拟化? 在计算机中,虚拟化是一种资源管理技术,它对计算机的各种物理资源(包括服务器、网络、内存和存储)进行抽象、转换和表示,打破了物理结构之间不可分割的障碍这些资源的新虚拟部分不受现有资源的安装方式、区域或物理配置的限制。 虚拟化资源通常是指处理能力和数据存储。

在实际生产环境中,虚拟化技术主要用于解决高性能物理硬件产能过剩和旧硬件产能不足的重用问题,使底层物理硬件透明化,从而充分利用物理硬件并充分利用资源

有多种虚拟化技术,包括软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化(vip )、桌面虚拟化、服务虚拟化和虚拟机。

1.2dockerdocker是使用谷歌公司推出的Go语言开发实现的,根据Linux内核的cgroup、namespace以及AUFS类的Union FS等技术封装隔离流程,是一种操作系统隔离过程独立于宿主和其他隔离过程,因此也称为容器。 第一个实现基于LXC,从0.7或更高版本中删除了LXC,现在使用自行开发的libcontainer,从1.11开始使用runC和containerd。

Docker基于容器极大地简化了容器的创建和维护,包括文件系统、网络互连和进程隔离。 Docker技术比虚拟机技术更轻更快。

1.3为什么选择Docker? 作为一种新的虚拟化方法,Docker与传统的虚拟化方法相比具有很多优点。

)1)更高效地利用系统资源。

由于容器不需要额外的成本,如硬件虚拟化和整个操作系统的运行,因此Docker的系统资源利用率较高。 无论是APP应用程序的执行速度、内存丢失还是文件存储速度,都比传统的虚拟机技术更高效。 因此,具有相同配置的主机通常可以执行比虚拟机技术更多的APP应用程序。

)2)更快的启动时间

传统的虚拟机技术往往需要几分钟时间才能启动APP应用程序服务,而Docker容器APP应用程序直接在主内核上运行,不需要启动完整的操作系统,因此可以实现以秒为单位甚至毫秒为单位的启动时间。 大大节省了开发、测试和部署的时间。

)3)一致的运行环境

开发过程中一个常见的问题是环境一致性问题。 有些错误在开发过程中未发现,因为开发环境、测试环境和生产环境不匹配。 Docker镜像提供了完整的运行时环境(非内核),并确保了APP应用程序执行环境的一致性。 这样,就不会发生“这个代码在我的机器上没问题啊”之类的问题了。

)4)持续交货和引进

开发运输业者最希望的是一次创建或配置,使其在任何地方都能正常工作。

使用Docker,您可以通过自定义APP应用程序镜像来实现持续集成、持续交付和部署。 开发人员可以通过Dockerfile构建镜像,并与连续集成系统进行集成测试。 另一方面,承运人可以直接在生产环境中快速部署镜像,也可以与连续交付/部署系统配合使用进行自动部署。

此外,使用Dockerfile使镜像构建透明化,不仅可以帮助开发团队了解APP应用程序的运行环境,还可以帮助运输团队了解运行APP应用程序所需的条件,并将镜像部署到更好的生产环境中。

)5)更简单的迁移

Docker确保了执行环境的一致性,因此更容易迁移APP应用程序。 Docker可以在许多平台上运行,包括物理机、虚拟机、公共云、私有云和笔记本电脑,并提供一致的结果。 因此,用户可以轻松地将在一个平台上运行的APP应用程序迁移到另一个平台,而不用担心运行环境的变化会导致APP应用程序无法正常运行。

)6)维护和扩展更加简单

Docker使用的分层存储和镜像技术有助于重复使用、便于维护和更新APP应用程序,以及基于基本镜像进一步扩展镜像也变得非常简单。 Docker团队还与每个开源项目团队一起维护了大量高质量的官方镜像,可以直接在生产环境中使用,也可以在基础上进一步定制,大大降低了APP应用程序服务的镜像创建成本。

1.4容器与虚拟机的比较下图比较了Docker与传统虚拟化方法的差异,其中容器在操作系统级别进行虚拟化,直接复用本地主机的操作系统,传统方法在硬件级别实现

与传统虚拟机相比,传统虚拟化Docker具有启动速度快、占地面积小的优点。

1.5 Docker组件1.5.1 Docker服务器和客户机Docker是客户机-服务器(C/S )体系结构程序。 Docker客户端只需向Docker服务器或守护程序发出请求,服务器或守护程序就会完成所有工作并返回结果。 Docker提供命令行工具Docker和一系列rest风格的API。 您可以在同一主机上运行Docker守护程序和客户端,也可以从本地Docker客户端连接到在另一台主机上运行的远程Docker守护程序

护进程。

docker client是一个泛称,它可以是命令行docker,也可以是遵循了docker api规则的客户端,简单地说可以理解为一个用于交互/发送指令的接口。

1.5.2 Docker镜像

镜像是构建Docker的基石。用户基于镜像来运行自己的容器。镜像也是Docker生命周期中的“构建”部分。镜像是基于联合文件系统的一种层式结构,由一系列指令一步一步构建出来。例如:

添加一个文件;
执行一个命令;
打开一个窗口

也可以将镜像当作容器的“源代码”。镜像体积很小,非常“便携”,易于分享、存储和更新。

镜像是一个只读的容器模板,含有启动docker容器所需的文件系统结构及内容 Docker以镜像和在镜像基础上构建的容器为基础,以容器开发、测试、发布的单元将应用相关的所有组件和环境进行封装,避免了应用在不同平台间迁移所带来的依赖问题,确保了应用在生产环境的各阶段达到高度一致的实际效果。

镜像可以被创建、启动、关闭、重启以及销毁。

分层机制

Docker的镜像机制是有层次感的,一个镜像可以放到另一个镜像的顶部。位于下端的为父镜像,以此类推;最底部的镜像可称为基础镜像。

镜像采用分层构建,每个镜像由一系列的镜像层组成, 当需要修改容器内的某个文件时,只对处于最上方的读写层进行变动,不覆盖下面已有文件系统的内容。当提交这个修改过的容器文件系统为一个新的镜像时,保存的内容仅为最上层读写文件系统中被更新过的文件。

bootfs
主要包含bootloader和kernel, bootloader主要是引导加载kernel, 当容器启动成功后,kernel被加载到内存中后而引导文件系统则会被卸载unmount+ rootfs  是容器在启动时内部进程可见的文件系统,通常包含一个操作系统运行所需的文件系统

传统linux在内核启动时首先会挂载一个只读的rootfs,检测器完整性之后再切换为读写模式

docker在挂载rootfs时也将其设为只读模式,挂载完毕后利用联合挂载技术在已有的只读rootfs上再挂载一个读写层。

只有运行中文件系统发生变化,才会把变化的内容写到读写层,并隐藏只读层中的老版本文件

rootfs包含的就是典型Linux系统中的 /dev,/proc,/曾经的往事, /etc等标准目录和文件。

写时复制

可以在多个容器之间共享镜像,每个容器启动时不需要单独复制一份镜像文件

将所有镜像层以只读方式挂载到一个挂载点,在上面覆盖一个可读写的容器层。

写时复制配合分层机制减少了镜像对磁盘空间的占用和容器启动时间

内容寻址

根据内容来索引镜像和镜像层

是对镜像层的内容计算检验和,生成一个风中的唇彩值作为镜像层的唯一标识

对于来自不同构建的镜像层,只要拥有相同的风中的唇彩,也能被不同镜像共享

联合挂载

可以在一个挂载点挂载多个文件系统,将挂载点的原目录与被挂在内容进行整合,最终可见的文件系统将包含整合后各层的文件和目录

读写层处于容器文件系统的最顶层,其下可能联合挂载多个只读层。

1.5.3 容器

Docker可以帮助你构建和部署容器,你只需要把自己的应用程序或者服务打包放进容器即可。容器是基于镜像启动起来的,容器中可以运行一个或多个进程。我们可以认为,镜像是Docker生命周期中的构建或者打包阶段,而容器则是启动或者执行阶段。容器基于镜像启动,一旦容器启动完成后,我们就可以登录到容器中安装自己需要的软件或者服务。

所以Docker容器就是:

一个镜像格式;
一些列标准操作;
一个执行环境

Docker借鉴了标准集装箱的概念。标准集装箱将货物运往世界各地,Docker将这个模型运用到自己的设计中,唯一不同的是:集装箱运输货物,而Docker运输软件。

和集装箱一样,Docker在执行上述操作时,并不关心容器中到底装了什么,它不管是web服务器,还是数据库,或者是应用程序服务器什么的。所有的容器都按照相同的方式将内容“装载”进去。 Docker也不关心你要把容器运到何方:我们可以在自己的笔记本中构建容器,上传到Registry,然后下载到一个物理的或者虚拟的服务器来测试,在把容器部署到具体的主机中。像标准集装箱一样,Docker容器方便替换,可以叠加,易于分发,并且尽量通用。 1.5.4 Registry(仓库)

Docker用Registry来保存用户构建的镜像。Registry分为公共和私有两种。Docker公司运营公共的Registry叫做Docker Hub。用户可以在Docker Hub注册账号,分享并保存自己的镜像(说明:在Docker Hub下载镜像巨慢,可以自己构建私有的Registry)。

用户也可以在Docker Hub上保存自己的私有镜像。https://hub.docker.com/

参考资料:
https://www.jianshu.com/p/3bfa8d09bc8b https://www.cnblogs.com/saryli/p/10061097.html https://blog.csdn.net/cx55887/article/details/84667622

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。