docker 001 简介
docker 001
docker简介
容器与管理程序虚拟化不同,管理程序虚拟化是将一台或多台独立的虚拟机运行在硬件上,而容器则是直接在操作系统内核上的用户空间。因此,容器虚拟化也被称为“操作系统级虚拟化”,容器技术可以让多个独立的用户控件运行在同一台宿主机上。
因此,容器只能运行与宿主机相同或相似的操作系统,例如:ubuntu 服务器上可以运行 centos,但无法运行windows。
docker 是一个能把应用程序自动部署到容器的开源引擎。
docker 在虚拟化的容器执行环境中增加了一个应用程序部署引擎,引擎的目标是提供一个清凉、快速的环境,能够运行开发者的程序,并方便高效的将程序从开发者的笔记本部署到测试环境,然后再部署到生产环境。
docker 的目标是提供以下内容:
-
提供一个简单、轻量的建模方式
快速修改程序代码,快速启动,高性能,系统资源利用率高
-
职责的逻辑分离
开发人员只需管理容器中的程序,运维人员只需关心容器管理。保证开发与部署环境的一致
-
快速高效的开发生命周期
缩短从开发、测试部署、上线的周期,是程序具有可移植性,易构建,易协作
-
鼓励使用面向服务的架构
鼓励面向服务的构架和微服务架构,推荐一个容器只运行一个程序或进程,这就形成了分布式应用程序模型。
docker 组件
- docker 客户端和服务器(也称为 docker 引擎)
- docker 镜像
- registry
- docker 容器
1. docker 客户端和服务器
docker 为 C/S 架构,客户端向服务器或守护进程发送请求,服务器或者守护进程完成工作并返回结果。两者部署于同一台机器,也可以部署在不同机器。
docker 架构:
2.docker 镜像
镜像是基于联合文件系统的一种层式结构,由一系列执行构建出来,它是 docker 世界的基石,是 docker 生命周期中“的 构建” 部分。用户基于镜像运行自己的容器。
镜像体积小,便携,易于分享、存储和更新。
3.registry
docker 使用 registry 保存用户构建的镜像。registry 有公私之分。docker 公司运营的公共 registry 是 docker hub。用户自己架设自己私有的的 registry。
用户可以在docker hub 上 保存自己的私有镜像,也构建和分享镜像。
4.容器
容器是基于镜像启动起来的,容器中可以运行一个或多个进程。我们可以认为,在 docker 的生命周期中,镜像是构建和打包的阶段,容器是启动和执行的阶段。
总结起来,docker 容器是:
- 一个镜像格式
- 一系列标准的操作
- 一个执行环境
容器就像是集装箱,容器中的软件镜像就像是集装箱中的货物,而且我们可以对容器中的软件镜像进行创建、启动、关闭、重启和销毁操作。
docker 不关心容器有种有什么,也不关心容器会被放到哪里。
docker 的应用场景
- 加速本地开发和构建流程
- 让程序在不同环境可以获得相同的运行结果
- 创建隔离环境来进行测试
- 构建一个多用户的平台即服务(PaaS)的基础设施
- 为开发、测试提供一个轻量级的独立沙盒环境或将独立的沙盒用于技术教学。
- 提供软件即服务(SaaS)应用程序
- 高性能、超大规模的宿主机部署
docker 的技术组件
- 一个原生的 Linux 容器格式,docker 中称为 libcontainer
- linux 内核的命名空间:namespace
- 文件系统隔离: 每个容器都有的自己的 root 文件系统
- 进程隔离: 每个容器都运行在自己的进程环境中
- 网络隔离: 容器间的虚拟网络接口和 IP 地址是分开的
- 资源隔离和分组:使用 cgroups 将 CPU 和内存之类的资源独立分配给每个 docker 容器
- 写时复制:文件系统是通过写时复制创建的(文件系统是分层的、快速的、且占用磁盘空间更小)
- 日志:容器产生的 STDIN、STDOUT、STDERR 这些 IO 流都会被收集记入日志,用来进行日志分析和故障拍错
- 交互式 shell:用户可以创建一个伪tty 终端,连接到STDIN,为容器提供交互式 shell。