一、 Docker简介
Docker是一个开源项目,诞生于2013年初,最初是dotCloud公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。
Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。Docker 的基础是 Linux 容器(LXC)等技术。
背景:云计算兴起后,服务器硬件扩展非常便利,软件服务部署成为了瓶颈,docker趁势而兴。
二、 为什么使用Docker?
①、 容器的启动可以在秒级实现,比传统的虚拟机方式要快得多
②、 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器
③、 docker的出现,让开发/测试/线上的环境部署,成为便利一条龙。
1、 更快速的交付和部署
对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
2、 更高效的虚拟化
Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
3、 更轻松的迁移和扩展
Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
4、更简单的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
5、 对比传统虚拟机
特性 | 容器 | 虚拟机 |
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为MB | 一般为GB |
性能 | 接近原生 | 弱于Docker |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
三、 Docker基本概念
1、 Docker架构
host:主机载体,也就是Docker安装的地方
继承类比方式:
Class2 extents Class1 相当于 Object o = new Class2
此时,o对象的结构中,有Class1的成员结构
image2 extents image1 相当于 Container c = new image2
此时,c容器中,有image1的文件
2、Docker镜像
①、 Docker 镜像就是一个只读的模板。
(例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。)
②、 镜像可以用来创建 Docker 容器。
③、 Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
3、 Docker容器
①、 Docker 利用容器来运行应用。
②、 容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
③、 可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
4、 Docker仓库
①、 仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
②、 仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
③、 最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。
④、 当然,用户也可以在本地网络内创建一个私有仓库。
⑤、 当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了
5、 容器、镜像的运行关系