docker介绍

本文最后更新于:2023年12月5日 晚上

docker 的主要目标:一次封装,到处运行

容器和虚拟机技术比较:

  • 容器内的应用直接运行在宿主机的内核之上,容器并没有自己的内核,也不需要虚拟硬件,相当轻量化
  • 容器间是互相隔离,每个容器内都有一个属于自己的独立文件系统、进程空间、网络空间、用户空间等,所以在同一个宿主机上的多个容器之间彼此不会相互影响

docker 的组成

docker 官网:http://www.docker.com
帮助文档:https://docs.docker.com/
docker 镜像:https://hub.docker.com/
docker 中文网站:http://www.docker.org.cn/

镜像和容器:

镜像可以理解为是一个模板,创建实例使用的模板,本质就是一些程序文件的合集
容器是从镜像生成对外提供服务的一个或一组服务,本质就是将镜像中的程序启动后生成的进程

namespace

命名空间,linux 底层概念,在内核层实现,容器使用 namespce 技术实现容器间相互隔离

  • mnt namespace:隔离根,即 chroot 技术。提供磁盘挂载点和文件系统的隔离能力
  • ipc namespace:隔离进程间通信。提供进程间通信的隔离能力,包括信号量,消息队列和共享内存
  • uts namespace:隔离系统信息。提供内核、主机名和域名隔离能力
  • pid namespace:隔离进程号。提供进程隔离能力
  • net namespace:隔离网络。提供网络隔离能力,包括网络设备,网络栈,端口等
  • user namespce:隔离用户。提供用户隔离能力,包括用户和组

Cgroups

Cgroups:Control Groups

Cgroups 最主要的作用,就是限制一个进程组能够使用的资源上限,包括 CPU、内存、磁盘、网络带宽等等。此外,还能够对进程进行优先级设置,资源的计量以及资源的控制(比如 将进程挂起和恢复等操作)

利用 Cgroups,宿主机可以对容器进行资源分配限制,比如 CPU、内存等

容器核心技术

容器规范

容器除了 docker,还有 rkt、Pouch 等,所有容器都要遵守标准的容器规范,这个规范由一个叫 OCI 的组织定,目前 OCI 一共发布了两个规范,分别是 runtime specimage fortmat spec,只要遵守这两个规范,就可以保证容器的可移植性和相互可操作性。

容器 runtime

runtime 是真正运行容器的地方,因此为了运行不同的容器,runtime 需要和操作系统内核紧密合作、相互支持,以便为容器提供相应的运行环境

runtime 类型:lxc、libcontainer、runc、rkt

docker 早期的 runtime 类型是 lxc,现在是 runc

容器管理工具

管理工具连接 runtime 与用户,对用户提供图形或命令方式操作,然后管理工具将用户操作传递给 runtime 执行

  • lxc 的 管理工具是 lxc
  • rkt 的 管理工具是 rkt cli
  • runc 的管理工具是 docker engine,docker engine 包含 daemon 和 cli 两部分额,大家经常提到的 docker 就是 docker engine

容器定义工具

容器定义工具允许用户定义容器的属性和内容,以方便容器能够被保存、共享和重建

docker image:是 docker 容器的模板,runtime 依据 docker image 创建容器

dockerfile:包含 N 个命令的文本文件,通过 dockerfile 创建出 docker image

镜像仓库 Registry

  • docker hub:docker 官方的公共仓库,已经保存了大量的常用镜像,可以方便大家直接使用
  • 阿里云、网易等第三方镜像的公共仓库
  • image registry:docker 官方提供的私有仓库部署工具,无 web 管理界面,目前使用较少
  • harbor:vmware 提供的自带 web 界面自带认证功能的镜像私有仓库,目前有很多公司使用

容器编排工具

  • docker compose:docker 官方实现单机的容器的编排工具
  • docker swarm:docker 官方开发的容器编排引擎
  • Mesos+Marathon:Mesos 是 Apache 下的开源分布式资源管理框架,它被称为是分布式系统的内核。Mesos 最初是由加州大学伯克利分校的 AMPLab 开发的,后在 Twitter 得到广泛使用。通用的集群组员调度平台,mesos(资源分配)与 marathon(容器编排平台)一起提供容器编排引擎功能
  • Kubernetes:google 主导开发的容器编排引擎,内部项目为 Borg,且其同时支持 docker 和 CoreOS,当前已成为容器编排工具事实上的标准

docker介绍
http://blog.lujinkai.cn/运维/Docker/1.Docker介绍/
作者
像方便面一样的男子
发布于
2021年1月8日
更新于
2023年12月5日
许可协议