文章目录
一、Docker 是什么
Docker 就是一种虚拟化容器技术。通过 Docker 这种虚拟化容器技术,我们可以对物理机的资源进行更加合理有效的利用,可以将一台物理机器虚拟化出很多个拥有完整操作系统,并且相互独立的“虚拟计算机”。
1.1 那么,什么是虚拟化呢?
在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。
在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件。
最常用的虚拟化技术有:全虚拟化和操作系统(OS)虚拟化
比如,VMware workstation 就是全虚拟化的实现。
比如,我们要讲的 Docker,就是基于操作系统虚拟化技术的一种实现。
基于操作系统创建出一些相互独立的、功能虚拟化技术有多种实现方式,有基于硬件进行虚拟化的技术,而 Docker 只是针对操作系统进行虚拟化,对于硬件资源的使用率更低。
1.2 Docker虚拟化优势
- 启动速度快,Docker 容器启动操作系统在秒级就可以完成,而 VMware 却是达到分钟级。
- 系统资源消耗低,一台 Linux 服务器可以运行成千上百个 Docker 容器,而VMware 大概只能同时运行 10 个左右。
- 更轻松的迁移和扩展,由于 Docker 容器比 VMware 占用更少的硬盘空间,在需要搭建几套软件环境的情况下,对安装好的 Docker 容器进行迁移会更快捷,更方便。而且 Docker 容器几乎可以在任意的平台上运行,包括虚拟机、物理机、公有云,私有云,个人电脑等,这种兼容性,可以让用户将一个应用程序从一个平台直接迁移到另一个平台
1.3 Docker能做什么
(1)上手快
用户只需要几分钟,就可以把自己的程序“Docker 化”。Docker 依赖于“写时复制”(copy-on-write)模型,使修改应用程序也非常迅速,可以说达到“随心所致,代码即改”的境界。随后,就可以创建容器来运行应用程序了。大多数 Docker 容器只需要不到 1 秒中即可启动。由于去除了管理程序的开销,Docker 容器拥有很高的性能,同时同一台宿主机中也可以运行更多的容器,使用户尽可能的充分利用系统资源。
(2)项目职责的逻辑分类
使用 Docker,开发人员只需要关心容器中运行的应用程序,而运维人员只需要关心如何管理容器。Docker 设计的目的就是要加强开发人员写代码的开发环境与应用程序要部署的生产环境一致性。从而降低那种“开发时一切正常,肯定是运维的问题(测试环境都是正常的,上线后出了问题就归结为肯定是运维的问题)”
(3)快速高效的开发生命周期
Docker 的目标之一就是缩短代码从开发、测试到部署、上线运行的周期,让
你的应用程序具备可移植性,易于构建,并易于协作。(通俗一点说,Docker 就像一个盒子,里面可以装很多物件,如果需要这些物件的可以直接将该大盒子拿走,而不需要从该盒子中一件件的取。)
(4)鼓励使用面向服务的架构(自动化部署)
Docker 还鼓励面向服务的体系结构和微服务架构。Docker 推荐单个容器只运行一个应用程序或进程,这样就形成了一个分布式的应用程序模型,在这种模型下,应用程序或者服务都可以表示为一系列内部互联的容器,从而使分布式部署应用程序,扩展或调试应用程序都变得非常简单,同时也提高了程序的内省性。(当然,可以在一个容器中运行多个应用程序)
当然,Docker 的强大远远不至于此,而作为软件开发人员的我们,更关注的是如何利用它来搭建一套统一的软件开发环境。
二、Docker 核心概念
docker 包含四个基本概念:
- 镜像(Image)
- 容器(Container)
- 仓库注册中心(Registry)
- 仓库(Repository)
理解了这四个概念,就理解了 docker 的整个生命周期了!
2.1 镜像
- Docker 镜像(Image)就是一个只读的模板。
- Docker 镜像可以用来创建 Docker 容器。
- Docker 镜像和 Docker 容器的关系,类似于 java 中 class 类与对象之间的关系。
- Docker 提供了一个很简单的机制来创建镜像或者更新已有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
2.2 容器
- Docker 镜像(Image)就是一个只读的模板。
- Docker 镜像可以用来创建 Docker 容器。
- Docker 镜像和 Docker 容器的关系,类似于 java 中 class 类与对象之间的关系。
- Docker 提供了一个很简单的机制来创建镜像或者更新已有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用
2.3 仓库注册中心和仓库
Registry 是集中存放镜像文件的场所。Repository 是对于其中的镜像进行分类管理。一个 Registry 中会有多个 Repository。一个 Repository 中会有多个不同 tag 的 Image。比如名称为 centos 的 Repository 仓库下,有 tag 为 6 或者 7 的 Image 镜像。
Registry 分为公有(public)和私有(private)两种形式:
- 最大的公有 Registry 是 Docker Hub,存放了数量庞大的镜像供用户下载使用。
- 国内的公开 Registry 包括 USTC、网易云、DaoCloud、AliCloud 等,可以供 大陆用户更稳当快捷的访问。
- 用户可以在本地创建一个私有 Registry
用户创建了自己的镜像之后就可以使用 push 命令将它上传的公有 Registry 或者私有 Registry 中,这样下次在另一台机器上使用这个镜像的时候,只需要从Registry 上 pull 下来运行就可以了。Docker本地私有镜像仓库Harbor搭建及配置