- 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简介
![01-认识Docker](https://www.linuxgogo.com/wp-content/uploads/2018/04/311fa56a9c10ae5a141d4afaf2622c1f_2d45af70-ed80-43ca-bc4b-23ecaada2012.png)
![01-认识Docker](https://www.linuxgogo.com/wp-content/uploads/2018/04/311fa56a9c10ae5a141d4afaf2622c1f_653e524c-6518-4f2f-bdc2-fbae52519efe.png)
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改变了什么?
面向产品:产品交付
面向开发:简化环境配置
面向测试:多版本测试
面向运维:环境一致性,环境回滚。
面向架构:自动化扩容(微服务)