docker核心概念:镜像、容器、仓库

docker是利用Linux的Namespace 、Cgroups 和联合文件系统三大机制来保证实现的,Namespace做主机名、网络、pid等资源的隔离,使用Cgroups对进程或者进程组做资源(cpu、内存等)的限制,联合文件系统用于镜像构建和容器的运行环境
Namespace
  是Linux内核中的一项功能,对内核资源进行隔离,使得容器中的进程都可以在单独的命名空间中运行,并且只可以访问当前容器命名空间的资源。Namespace可以隔离进程id、主机名、用户id、文件名、网络访问和进程间通信等相关资源
  docker主要用到以下五种命名空间。
  pid namespace:隔离进程id
  net namespace:隔离网络接口,在虚拟的net namespace内用户可以拥有自己独立的ip、路由、端口等
  mnt namespace:文件系统挂载点隔离
  ipc namespace:信号量、消息队列和共享内存的隔离
  uts namespace:主机名和域名的隔离
Cgroups
  是一种 Linux 内核功能,可以限制和隔离进程的资源使用情况(CPU、内存、磁盘 I/O、网络等)。在容器的实现中,Cgroups 通常用来限制容器的 CPU 和内存等资源的使用。
联合文件系统
  又叫 UnionFS,是一种通过创建文件层进程操作的文件系统,因此,联合文件系统非常轻快。Docker 使用联合文件系统为容器提供构建层,使得容器可以实现写时复制以及镜像的分层构建和存储。常用的联合文件系统有 AUFS、Overlay 和 Devicemapper 等。
 
镜像:只读的文件和文件夹的组合,包含容器运行所需的配置文件和基础信息,是容器的基础,怎样拥有镜像:
1.自己创建镜像,可以在基础镜像上加自定义内容,比如在基础镜像centos上,安装nginx等,再部署应用程序,就可以制作一个业务镜像了
2.可以在docker hub上拉取别人制作好的镜像,https://hub.docker.com/
 
容器:容器是镜像运行的实体,容器带有运行时需要的可写文件层,容器中的进程属于运行状态(容器运行着真正的应用进程。容器有初建、运行、停止、暂停、删除五种状态)
虽然容器的本质是主机上运行的一个进程,但是容器有自己独立的命名空间隔离和资源限制。也就是说,在容器内部,无法看到主机上的进程、环境变量、网络等信息,这是容器与直接运行在主机上进程的本质区别。
 
仓库:存储和分发docker镜像。分为公共镜像仓库和私有镜像仓库。
docker hub时公开的镜像仓库
 
容器、镜像、仓库的关系
 
docker架构图
 
docker客户端
  1.通过docker命令的方式
  2.rest api的方式
  3.各种语言的sdk
docker服务端
  1.dockerd是一个非常重要的后台管理进程,它负责响应和处理来自docker客户端的请求,将客户端的请求转化为对docker的具体操作。起初服务端的组件全部集成在docker二进制中,如今docker已经成了独立的二进制,此时的容器也不是直接由dockerd来启动,而是集成了containerd、runC等多个组件
  2.containerd通过containerd-shim启动并管理runC,可以说是containerd真正的管理了容器的生命周期,
本文源自:拉勾教育课程:由浅入深吃透 Docker,讲师:郭少 前 360 高级容器技术专家
 
posted @ 2021-04-21 19:14  xifang  阅读(255)  评论(0)    收藏  举报