什么是docker?
Docker 的思想来源于集装箱,集装箱最大的作用在于能够将货品标准化,并且集装箱与集装箱之间互相隔离,不会有任何影响。那么我们就不再需要专门的船去运输专门的货品,只要货品在集装箱内好好封存着,那就可以使用一艘大船将他们都运走。
对于我们来说,Docker 也担任了类似的角色,我们的应用或者所依赖的第三方服务可以理解为货品,而 Docker 则是将我们的货品规范化管理起来,从而可以轻易的完成产品交付,环境转移等等诸多问题,并且 Docker 对于主机资源的消耗非常小,可以实现对服务器资源的最大利用
Docker 学习网站 http://www.docker.org.cn/ (docker 中文网)
===========================================================
docker解决了哪些问题?
组织有序性
以传统的方式部署你的项目,可能出现由于多个应用程序的依赖各不相同, 导致应用之间的依赖关系变得特别混乱,此时若出现两个应用依赖同一个程序但却依赖着不同的版本,便会出现比较让人头疼的问题。使用 Docker 便可以很方便的帮我们管理各个应用之间的依赖,并且以容器将应用环境独立开来,从而不会互相影响。便携性
另一个问题在于应用可能是依赖于某一种操作系统的,那么此时应用的可移植性便会成为比较麻烦的问题。你没办法直接将 Linux 系统的应用运行在 Windows 系统之上,而 Docker 则为我们解决了该问题,Docker 本身是运行在 Linux 之上的,但它也为 macOS 和 Windows 提供了相对轻便的虚拟机可以让我们将容器轻易的跑在 Mac 或 Windows 平台上,也更好地促进了我们的应用的开发环境与运行环境的一致性安全性
在应用的运行环境,另一个不得不提的问题就是安全,由于以下的一些原因,你无法保障你应用的绝对安全:
· 这个运行的程序可能是由攻击者专门编写的
· 一些没有安全意识的程序员可能写出一些危害服务器安全的代码
· 可能由于某些依赖项或者程序自身的漏洞被攻击者利用从而危害服务器安全
对于以上的这几种情况,如果是传统的部署方案他的危险级别会很高,因为这将直接威胁到你系统的安全,但如果你的应用跑到 Docker 的容器中,那么一切的危害都会被隔离在容器内,因为容器的资源与系统是隔离的,危害将会被降到最低
===========================================================
Docker VS OpenStack
类别 OpenStack Docker
操作系统 在宿主机 OS 运行虚拟机 OS 与宿主机共享 OS
部署难度 组件多, 部署复杂 非常简单
启动速度 分钟级 秒级
执行性能 VM 会占用一些资源 和物理系统几乎一致
镜像体积 虚拟机镜像是 GB 级别 镜像是 MB 级别
管理效率 组件相互依赖, 管理复杂 管理简单
隔离性 彻底隔离 比较弱
===========================================================
应用场景:
面向产品:
产品的交付模式改变
比虚拟机更小的资源浪费
面向开发:
个人开发环境发生改变
面向运维:
获得比虚拟机性能损失更小的解决方案
可以更快的进行自动化扩容(OpenStack 是分钟级扩容,Docker 是秒级)
Docker 适用于微服务架构
面向测试:
同一环境下多版本测试
自动化、微服务、大规模集群(微博红包案例)等等
===========================================================
基本概念:
Docker 有三大重要的概念:仓库、镜像、容器
仓库(Repository):
仓库是几种存放非镜像的地方,类似于 Maven 仓库、Git 仓库等用途,仓库之上还有仓库注册服务器(Registry)的概念,上面存放着多个仓库,每个仓库中又有多个镜像,而每个镜像又可以有多个标签(tag)。目前最大的公开仓库是 Docker Hub,我们可以使用类似 Git 命令的方式去 pull/push 镜像
镜像(Image):
可以理解为一个只读的模板,镜像可以用来创建容器,一个镜像可以创建多个容器,你可以直接从官方仓库(docker hub)或者其他私服仓库拉取(pull)想要的镜像,或通过 Dockerfile 来构建属于你自己的镜像,这一切操作都非常的简单
容器(Container):
容器是由镜像创建的实例,他可以被启动、停止、运行、删除。每个容器之间是互相隔离的、保证安全的平台。可以把容器看做为一个简单的 Linux 环境