- A+
摘要:本文内容摘自网络,我是一名技术的搬运工
官方文档写的特别好,认识docker可以看官方文档
官方文档:https://docs.docker.com/get-started/#docker-concepts
中文文档:https://yeasy.gitbooks.io/docker_practice/content/
目录:
1. Docker简介
1.1 什么是LXC(容器)?
1.2 什么是Docker?
1.3 Docker的三大核心概念?
1.3.1 镜像
1.3.2 容器
1.3.3 仓库
1.4 Docker的工作模式
1.5 Docker的八种应用场景
1.6 docker与openstack对比
1.7 Docker八种开发模式
1.8 Docker九个基本事实
1.9 Docker改变嘞什么?
1. Docker简介
1.1 什么是LXC(容器)?
LXC是Linux Containers的简写。Linux Containers容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C++中的NameSpace。容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。与传统虚拟化技术相比,它的优势在于:
- 与宿主机使用同一个内核,性能损耗小;
- 不需要指令级模拟;
- 不需要即时(Just-in-time)编译;
- 容器可以在CPU核心的本地运行指令,不需要任何专门的解释机制;
- 避免了准虚拟化和系统调用替换中的复杂性;
- 轻量级隔离,在隔离的同时还提供共享机制,以实现容器与宿主机的资源共享。
总结:Linux Containers是一种轻量级的虚拟化的手段。
1.2 什么是Docker?
Docker是开发人员和系统管理员 使用容器开发,部署和运行应用程序的平台。使用Linux容器来部署应用程序称为集装箱化。容器不是新的,但它们用于轻松部署应用程序。
集装箱化越来越受欢迎,因为集装箱是:
- 灵活:即使是最复杂的应用程序也可以装箱。
- 轻量级:容器利用并共享主机内核。
- 可互换:您可以即时部署更新和升级。
- 便携式:您可以在本地构建,部署到云中并在任何地方运行。
- 可扩展性:您可以增加和自动分发容器副本。
- 可堆叠:您可以垂直堆叠服务并即时堆叠服务。
docker的理念:构建,运输,运行
Docker是通过内核虚拟化技术(namespace及cgroups等)来提供容器的资源隔离与安全保障等,由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机VM额外的操作系统开销,提高资源利用率。
镜像和容器的关系
通过运行镜像启动容器。一个镜像是一个可执行的包,其中包括运行应用程序所需的所有内容的代码,库,环境变量,和配置文件。
容器是镜像的运行时实例,当被执行时(即,具有状态的镜像,或用户进程)你可以使用该命令查看正在运行的容器的列表(docker ps),就像在Linux中一样
1.3 Docker的三大核心概念
1.3.1 镜像
分层存储
因为镜像包含操作系统完整的 root 文件系统,其体积往往是庞大的,因此在 Docker 设计时,就充分利用 Union FS 的技术,将其设计为分层存储的架构。所以严格来说,镜像并非是像一个 ISO 那样的打包文件,镜像只是一个虚拟的概念,其实际体现并非由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成。
1.3.2 容器
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。也因为这种隔离的特性,很多人初学 Docker 时常常会混淆容器和虚拟机。
前面讲过镜像使用的是分层存储,容器也是如此。每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层。
容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。
按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。
数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器删除或者重新运行之后,数据却不会丢失。
1.3.3 仓库
仓库名经常以 两段式路径 形式出现,比如 jwilder/nginx-proxy,前者往往意味着 Docker Registry 多用户环境下的用户名,后者则往往是对应的软件名。但这并非绝对,取决于所使用的具体 Docker Registry 的软件或服务。
Docker Registry 公开服务
国内也有一些云服务商提供类似于 Docker Hub 的公开服务。比如 时速云镜像仓库、网易云镜像服务、DaoCloud 镜像市场、阿里云镜像库 等。
私有 Docker Registry
除了官方的 Docker Registry 外,还有第三方软件实现了 Docker Registry API,甚至提供了用户界面以及一些高级功能。比如,VMWare Harbor 和 Sonatype Nexus。
1.4 Docker的工作模式
1.5 Docker八种应用场景
1.6 docker与openstack对比
类别 |
Docker |
OpenStack |
结论 |
部署难度 |
非常简单 |
组件多,部署复杂 |
因为平台是对已有的线上生产环境进行改造,必须选择侵入性较小的容器化技术 |
启动速度 |
秒级 |
分钟级 |
面对流量峰值,速度就是一切 |
执行性能 |
和物理系统几乎一致 |
VM会占用一些资源 |
微博核心业务对服务SLA要求非常苛刻 |
镜像体积 |
镜像是MB级别 |
虚拟机镜像是GB级别 |
当集群大规模部署时,体积小就代表更大的并发调度量 |
管理效率 |
管理简单 |
组件相互依赖,管理复杂 |
生产系统集群可控性是核心竞争力 |
隔离性 |
隔离性高 |
彻底隔离 |
|
可管理性能 |
单进程、不建议启动SSH |
完整的系统管理 |
|
网络连接 |
比较弱 |
借助Neutron可以灵活组建各类网络架构 |
为什么要使用 Docker?
- 对比传统虚拟机总结
参考网址:https://yeasy.gitbooks.io/docker_practice/content/introduction/why.html
1.7 Docker八中开发模式
1. 共享基础容器
2. 共享卷开发容器
3. 开发工具容器
4. 不同环境下测试容器
5. 构建容器
6. 安装容器
7. 盒子中默认服务容器
8. 基础设施/粘合剂容器
1.8 Docker九个基本事实
1. 容器不同于虚拟机
2. 容器不如虚拟机来得成熟
3. 容器可以在几分之一秒内启动
4. 容器已在大规模环境证明了自身的价值
5. IT人员称容器为轻量级
6. 容器引发了安全问题
7. Docker已成为容器的代名词,但它不是唯一的提供者
8. 容器能节省IT人力,加快更新
9. 容器仍面临一些没有解决的问题
1.9 Docker改变了什么?
面向产品:产品交付
面向开发:简化环境配置
面向测试:多版本测试
面向运维:环境一致性,环境回滚。
面向架构:自动化扩容(微服务)