Docker学习之基础概念

初始docker与容器

什么是docker

  1. Docker 是基于 Go 语言实现的开源容器项目。它诞生于 2013 年年初,最初发起者是dotCloud 公司。 Docker自开源后受到业界广泛的关注和参与,目前已有 80 多个相关开源组件项目(包括 Containerd Moby Swarm等),逐渐形成了围绕 Docker 容器的完整的生态体系。
  2. 与大部分新兴技术的诞生一样, Docker 也并非“从石头缝里蹦出来的",而是站在前人的肩膀上。其中最重要的就是 Linux 容器 (Linux Containers, · LXC) 技术。 IBMDeveloper Works网站关于容器技术的描述十分准确:"容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。与虚拟化相比,这样既不需要指令级模拟,也不需要即时编译。容器可以在核心CPU 本地运行指令,而不需要任何专门的解释机制。此外,也避免了准虚拟化 (para-virtualization)和系统调用替换中的复杂
  3. Docker 的构想是要实现 “Build, Ship and Run Any App, Anywhere" ,即通过对应用的封装(Packaging) 、分发 (Distribution) 、部署(Deployment) 、运行(Runtime) 生命周期进行管理,达到应用组件级别的“一次封装,到处运行”。这里的应用组件,既可以是一个 Web用、一个编译环境,也可以是一套数据库平台服务,甚至是一个操作系统或集群。
  4. 简单地讲,读者可以将 Docker 容器理解为一种轻量级的沙盒 (sandbox)。每个容器内运行着一个应用,不同的容器相互隔离,容器之间也可以通过网络互相通信。容器的创建和停止十分快速,几乎跟创建和终止原生应用一致;另外,容器自身对系统资源的额外需求也十分有限,远远低于传统虚拟机。很多时候,甚至直接把容器当作应用本身也没有任何问题。

docker的优势

  1. 在云时代,开发者创建的应用必须要能很方便地在网络上传播,也就是说应用必须脱离底层物理硬件的限制;同时必须是“任何时间任何地点”可获取的。因此,开发者们需要一种新型的创建分布式应用程序的方式,快速分发和部署,而这正是Docker 所能够提供的最大优势。
  2. 对开发和运维 (DevOps) 人员来说,最梦寐以求的效果可能就是一次创建或配置,之后可以在任意地方、任意时间让应用正常运行,而Docker恰恰是可以实现这一终极目标的“瑞士军刀"。
    具体说来,在开发和运维过程中, Docker 具有如下几个方面的优势:
    更快速的交付和部署
    使用 Docker, 开发人员可以使用镜像来快速构建一套标准的开发环境;开发完成之后,测试和运维人员可以直接使用完全相同的环境来部署代码。只要是开发测试过的代码,就可以确保在生产环境无缝运行。 Docker 可以快速创建和删除容器,实现快速迭代,节约开发、测试、部署的大量时间。并且,整个过程全程可见,使团队更容易理解应用的创建和工作过程。
    更高效的资源利用
    运行 Docker 容器不需要额外的虚拟化管理程序 (Virtual Machine Manager·, VMM, 以及 Hypervisor) 的支持, Docker 是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低。与传统虚拟机方式相比, Docker 的性能要提高 1~2 个数量级。
    更轻松的迁移和扩展
    Docker 容器儿乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等,同时支持主流的操作系统发行版本。这种兼容性让用户可以在不同平台之间轻松地迁移应用。
    更简单的更新管理
    使用 Dockerfile, 只需要小小的配置修改,就可以替代以往大量的更新工作。所有修改都以增量的方式被分发和更新,从而实现自动化并且高效的容器管理。

Docker与虚拟机

作为一种轻量级的虚拟化方式, Docker 在运行应用上跟传统的虚拟机方式相比具有如下显著优势:

  • Docker容器很快,启动和停止可以在秒级实现,这相比传统的虚拟机方式(数分钟)要快得多;

  • Docker容器对系统资源需求很少,一台主机上可以同时运行数千个 Docker 容器(在IBM 服务器上已经实现了同时运行 lOK 量级的容器实例);

  • Docker 通过类似 Git 设计理念的操作来方便用户获取、分发和更新应用镜像,存储复用,增量更新;

  • Docker通过Dockerfile 支持灵活的自动化创建和部署机制,以提高工作效率,并标准化流程。

  • Docker容器除了运行其中的应用外,基本不消耗额外的系统资源,在保证应用性能的同时,尽量减小系统开销

    传统虚拟机方式运行N个不同的应用就要启用 N个虚拟机(每个虚拟机需要单独分配独占的内存、磁盘等资源),而 Docker只需要启动N个隔离得“很薄的"容器,并将应用放进容器内即可。应用获得的是接近原生的运行性能。
    在这里插入图片描述

Docker与虚拟化

虚拟化 (virtualization) 技术是一个通用的概念,在不同领域有不同的理解。在计算领域,一般指的是计算虚拟化(computing virtualization) ,或通常说的服务器虚拟化。维基百科上的定义如下:
”在计算机技术中,虚拟化是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以用比原本的组态更好的方式来应用这些资源。”
可见,虚拟化的核心是对资源的抽象,目标往往是为了在同一个主机上同时运行多个系统或应用,从而提高系统资源的利用率,并且带来降低成本、方便管理和容错容灾等好处。
Docker 以及其他容器技术都属于操作系统虚拟化这个范畴,操作系统虚拟化最大的特点就是不需要额外的 supervisor 支持。 Docker 虚拟化方式之所以有众多优势,跟操作系统虚拟化技术自身的设计和实现是分不开的。
在这里插入图片描述
传统方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层。 Docker 容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,因此更加轻量级。

docker核心概念

  • 镜像 (images)
  • 容器 (container)
  • 仓库 (repository)
    镜像:
    docker 镜像类似于虚拟机镜像,可以将它理解为一个只读的模板。
    镜像是创建docker容器的基础
    容器:
    docker容器类似千一个轻量级的沙箱, Docker利用容器来运行和隔离,容器是从镜像创建的应用运行实例。它可以启动、开始、停止、删除,而这些容器都是
    彼此相互隔离、互不可见的。可以把容器看作一个简易版的 Linux 系统环境(包括 root 用户权限、进程空间、用户空间和网络空间等)以及运行在其中的应用程序打包而成的盒子。
    仓库:
    docker仓库类似于代码仓库,是docker 集中存放镜像文件的场所。有时候我们会将 docker 仓库和仓库注册服务器 (registry )混为一谈,并不严格区分。实际上,仓库注册服务器是存放仓库的地方,其上往往存放着多个仓库。每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签 (tag) 来进行区分。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值