docker容器是学习中比较困难的地方,也是小白不容易理解的,我就是看这篇来的,真正的理解到容器。
1.1容器
1.1.1什么是容器
容器是一种沙盒技术,主要目的是为了将应用运行在其中,与外界隔离。这样方便将这个沙盒可以被转移到其它的宿主机器上。本质上,它是一个特殊的进程。通过名称空间(Namespace)、控制组(Control groups)、切根(chroot)技术把资源、文件、设备、状态和配置划分到一个独立的空间。因此,可以把它当成一个装应用软件的箱子,里面00的含有软件运行所需要的依赖库和配置,可以将这个箱子搬到任何机器上,从而不影响里面的软件的运行。
1.1.2容器原理
为了实现容器进程对外界的隔离,容器的底层主要运用了命名空间、控制组和UnionFS。
- 命名空间:容器隔离的基础,保证了A容器看不到B容器
- 控制组:容器的资源统计和隔离
- UnionFS:联合文件系统,分层镜像实现的基础
1.2镜像仓库
1.2.1什么是镜像文件
镜像文件是一种特殊的文件格式,用于存储操作系统、软件应用程序或整个数据存储设备的完整副本。这种文件通常用于创建系统备份、分发操作系统或软件安装程序,以及在虚拟机环境中模拟硬盘驱动器。
1.2.2什么是镜像仓库
镜像仓库负责存储、管理和分发镜像,并且提供了登录认证能力,建立了仓库索引。在docker中,镜像仓库是用来存放和共享镜像的地方,类似于代码仓库的作用。
镜像仓库管理多个Repository,Repository通过命名来区分,每个Repository包括一个或者是多个镜像,镜像通过镜像名称和标签来区分。
镜像仓库是要从哪一个镜像仓库拉取镜像,通常通过DNS或IP地址来确定一个镜像仓库;一个仓库中可以存放多个Repository。它可以分为“用户仓库”和“顶层仓库”,用户的仓库名称格式为“用户名/仓库名”。每个仓库可以包含多个Tag(标签),每个标签对应一个镜像。
1.2.3容器镜像的组成
元数据:就是dockerfile构建出来的描述文件,这个描述文件会说这个容器镜像有多少层,每一层有什么内容,它的checksum这些信息都会记下来。
存储:最终的可执行的文件就是在存储数据里面,就是在一个一个的blob里面,真正的占有空间的就是这些blob。
1.2.4镜像仓库的分类
公共仓库:Docker官方提供了一个公共的镜像仓库,称为Docker Hub(https://hub.docker.com)。Docker Hub上存储了大量的公共镜像,用户可以通过搜索镜像名称找到自己需要的镜像,并下载到本地使用。是用Docker Hub时,用户需要创建一个Docker Hub账号,在命令行或Docker客户端中使用自己的账号信息进行登录,并可以上传自己的镜像到Docker Hub上供他人使用。
私有仓库:Docker还支持创建自己的私有镜像仓库,用于存储 和共享自定义的镜像。私有仓库可以满足企业或个人对镜像管理的特殊需求,例如安全性、可控性等。常见的私有仓库有Docker Registry镜像、Harbor、Nexus等。
1.3镜像仓库的工作机制
1.3.1镜像仓库的使用流程
1.通过docker login登录仓库
2.docker pull拉取需要的镜像
3.通过dockerfile或者是commit等方式制作完镜像通过docker push上传到仓库
1.3.2 实际镜像仓库的使用方式
在实际开发中,开发者可以选择从docker hub的共有仓库中拉取镜像,也可以选择自己制作的镜像进行使用。由于开发需要面临不同的环境,所以可以制作出不同的版本镜像供不同开发阶段的环境进行使用。
1.3.3 镜像仓库的拉取机制
启动容器时,docker daemon会试图从本地获取相关的镜像;本地镜像不存在时,将从Registry下载该镜像并保存到本地。