Docker原理学习

Docker基本原理学习

Docker是在Linux环境下,go语言编写的,为实现轻量级的操作系统虚拟化,让应用程序部署在软件容器下的工作可以自动化进行的解决方案。Docker利用Linux核心中的资源分离机制,例如cgroups,以及Linux核心名字空间(name space),来创建独立的软件容器(containers)。

一、容器和虚拟机

容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统虚拟机则是在硬件层面实现。
在这里插入图片描述
容器是应用层的抽象,它将代码和依赖关系打包在一起。多个容器可以在同一台机器上运行,并与其他容器共享操作系统内核,每个容器在用户空间中作为独立进程运行。容器占用的空间比VM少(容器映像的大小通常为几十MB),可以处理更多的应用程序,并且需要更少的VM和操作系统。
虚拟机(VM)是物理硬件的抽象,将一台服务器转变为多台服务器。虚拟机管理程序允许多台虚拟机在一台计算机上运行。每个VM都包含操作系统的完整副本,应用程序,必要的二进制文件和库占用数十GB。虚拟机也可能很慢启动。

二、为什么使用Docker

  1. 快速交付和部署:允许开发者在装有应用和服务本地容器做开发。可以直接集成到可持续开发流程中。(Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见)
  2. 高效部署和扩容:可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等,实现平台层面的直接迁移。(Docker的兼容性和轻量特性可以很轻松的实现负载的动态管理。可以快速扩容或方便的下线应用和服务,这种速度趋近实时。)
  3. 高资源利用率:Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可
  4. 简单管理:使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。

三、Docker特点

灵活:即使是最复杂的应用也可以集装箱化。
轻量级:容器利用并共享主机内核。
可互换:即时部署更新和升级。
便携式:在本地构建,部署到云,并在任何地方运行。
可扩展:增加并自动分发容器副本。
可堆叠:垂直和即时堆叠服务。

四、Docker架构

Docker使用C/S架构,Client 通过接口与Server进程通信实现容器的构建,运行和发布。client和server可以运行在同一台集群,也可以通过跨主机实现远程通信。
1、Server是一个常驻进程
2、REST API 实现了client和server间的交互协议
3、CLI 实现容器和镜像的管理,为用户提供统一的操作界面
在这里插入图片描述
1、execdriver:存储了容器定义的配置信息。
2、libcontainer拿到配置信息后将会调用namespace,cgroups等技术完成容器的创建及管理。
3、networkdriver:完成容器网络环境的配置。
4、graphdriver:管理容器镜像

(1)命名空间(Namespace)

命名空间是 Linux 内核一个强大的特性。

每个容器都有自己单独的命名空间,运行在其中的应用都像是在独立的操作系统中运行一样。命名空间保证了容器之间彼此互不影响。包括pid命名空间(进程),net命名空间(网络),ipc命名空间(进程交互),mnt命名空间(文件目录),uts命名空间(独立节点而非进程,独立的hostname,domainname)

(2)控制组(cgroups)

控制组(cgroups) 是 Linux 内核的一个特性。

主要用来对共享资源进行隔离、限制、审计等。只有能控制分配到容器的资源,才能避免当多个容器同时运行时的对系统资源的竞争。控制组可以提供对容器的内存、CPU、磁盘 IO 等资源的限制和审计管理。命名空间主要是实现了系统资源的隔离,而cgroups则是负责资源的分配。

(3)联合文件系统

采用了分层构建的机制,最底层为bootfs,在此之上为rootfs。

bootfs主要用于系统引导的文件系统,一旦引导完成就会将bootfs这一层卸载掉,它的存活时间非常短。
rootfs表现为Docker容器的根文件系统,传统模式中,系统启动之时,内核挂载rootfs时会首先将其挂载为“只读”模式,完整性自检完成后将其重新挂载为读写模式;docker中,rootfs由内核挂载为“只读”模式,而后通过“联合挂载 ”技术额外挂载一个“可写”层;
启动一个容器的时候,Docker会在镜像上附加一层可写层,顶层以下都只是可读,这时候用户删除底层文件,并不是真正删除而只是标记为不可见,但是实际上文件在底层还是存在的。如果用户需要修改底层文件,Docker将底层文件复制到顶层让你进行修改,同时底层文件也是存在的,只是当你读修改后的文件的时候指向的位置是顶层而不是原来的底层文件了。

五、Docker属性

1、 镜像

只读模板(一个镜像可以包含一个完整的操作系统环境)。

镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。镜像是一个可执行包,包含运行应用程序所需的所有内容和代码,运行时,库,环境变量和配置文件。Docker 运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker 会从镜像仓库下载该镜像

2、 仓库

集中存放镜像文件的场所。(仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。)

分为公开仓库和私有仓库。最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括时速云 、网易云等。用户也可以在本地网络内创建一个私有仓库。当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。
https://hub.docker.com
https://c.163.com

3、 容器

Docker通过容器运行,容器是从镜像创建的运行实例。

每个容器相互隔离,是简易的操作系统平台。与镜像的区别是最上面一层可读可写。正是文件系统隔离技术使得Docker成为了一个非常有潜力的虚拟化技术。

4、三者关系:

1、 基于镜像创建容器(run),也可以基于容器制作镜像(commit)
2、 从远端仓库拉取镜像(pull),将本地镜像推送到远端(push)
在这里插入图片描述

六、参考链接

https://blog.csdn.net/L835311324/article/details/84490222
https://docs.docker.com/get-started/#containers-and-virtual-machines
https://docs.docker.com/engine/reference/commandline/docker/
https://www.cnblogs.com/SzeCheng/p/6822905.html
https://blog.csdn.net/qq_34127958/article/details/69788899
Docker-入门到实践

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值