第一章 Docker入门

一、背景

为了完成那些不愉快或者平庸的任务,你也会喜欢只做必需之事。这可能是因为你同样喜欢使用一个简单易用的工具,来解决那些复杂或费时的工作。

假设你想尝试一款新的Linux 软件,但是担心运行起来的是恶意代码。为了保护你的机器,在 Docker 中运行该软件是很好的第一步。因为Docker 可以帮助大多数普遍软件用户利用好强大的安全工具。

如果你是一名系统管理员,将Docker作为软件管理工具集的基础,将节省你的时间,让你专注于高价值的事情,因为 Docker可以最大限度地减少你花在琐碎工作上的时间。
如果你编写软件,通过Docker 发布,你的用户会更容易安装并运行它。在 Docker 封装的开发环境中编写软件,将节省配置或共享环境的时间,因为从软件的角度来看,每个环境都是一样的。

假设你拥有或管理大型系统或数据中心。使用Docker 来创建build,测试和部署管道会变得很简单,因为通过这样一个管道可以应用到其他任何软件。

2013年3月推出的 Docker,可以和操作系统协作来打包、分发和运行软件。你可以把Docker作为软件分发供应商,用来节省你的时间,让你专注于高价值的事情。你可以使用Docker构建网络应用,如 Web服务器、数据库和邮件服务器,也可以构建终端应用程序,比如文本编辑器、编译器、网络分析工具和脚本;在某些情况下,它甚至可用来运行GUI程序,如网页浏览器和生产力类的软件。

Linux Docker是一款Linux软件,但可以很好地运行在大多数操作系统上。

Docker不是一种编程语言,并且也不是构建软件的框架。Docker 是一个工具,可以帮助解决如安装、拆卸、升级、分发、信任和管理软件等常见问题。它是开源的Linux软件,这意味着任何人都可以为之做出贡献,Docker因此已在诸多方面受益匪浅。公司赞助开源项目的开发也很常见。在这种意义上,Docker公司(Inc.)是主赞助商。你可以在下面网址找到更多关于Docker 公司的信息: https://docker.com/company/。

二、Docker概述

Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

三、Docker基本含义

Docker包括一个命令行程序、一个后台守护进程,以及一组远程服务。它解决了常见的软件问题,并简化了安装、运行、发布和删除软件。这一切能够实现是通过使用一项UNIX技术,称为容器。

1.什么是容器?

从历史上看,UNIX风格的操作系统都使用jail 这个术语来形容一个修改过的运行时环境,以防止该程序访问受保护的资源。自2005年以来,Sun的 Solaris 10和Solaris 容器发布后,容器已经成为这样一个运行环境的首选术语。而我们的目标,已经从防止对受保护资源的访问,扩展到隔离所有的资源,除非明确允许。

使用容器已经是很长一段时间的最佳做法。但手动创建容器,仍然具有挑战性,而且很容易出错。错误配置的容器却让他人产生安全的错觉。这个问题直到Docker的出现终于得到解决。任何使用Docker运行的软件其实是在一个容器内运行。Docker使用现有的容器引擎,根据最佳实践提供一致的Docker构建方案。这给大家带来了触手可及且更强的安全性。

有了Docker,用户以更低的成本获得容器。随着Docker和容器引擎改进,你获得最新和最好用的“jail”功能。不用再紧跟着迅速发展且高技术性的构建强大应用jail 的世界了,相反你只要让Docker帮你处理这些事情就好。这将节省大量的时间和金钱,并带来心灵的平静。

2.Docker在开发和运维中的优势

对于开发和运维人员来说,最梦寐以求的效果可能就是一次创建和配置,之后可以在任意地方、任意时间让应用正常运行,而Docker恰恰可以实现这一中级目标。具体来说,在开发和运维过程中,Docker具有以下几个方面的优势:

1.更快的交付和部署:
	使用Docker,开发人员可以使用镜像来快速构建一套标准的开发环境;开发完之后,测试和运维人员可以直接使用完全相同的环境来部署代码。只要是开发测试过的代码,就可以确保在生产环境无缝运行。Docker可以快速创建和删除容器,实现快速迭代,节约开发、测试及部署的时间。

2.更高效的利用资源:
	运行Docker容器不需要额外的虚拟化管理程序的支持,Docker是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低,与传统的虚拟机方式相比,Docker的性能要提高1 ~ 2个数量级。

3.更轻松的迁移和扩展:
	Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑等等,同时支持主流的操作系统发行版本。这种兼容性能让用户可以在不同的平台之间轻松的迁移应用。

4.更轻松的管理和更新:
	使用Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的容器管理。

4. Docker与虚拟机的比较

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

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

Docker容器对系统资源需求很少,一台主机上可以同时运行数千个Docker容器。

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

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

特性 容器 虚拟机
启动速度 秒级 分钟级
性能 接近原生 较好
内存 MB级 GB级
硬盘适应 MB级 GB级
运行密度 单台主机支持上千个 单台主机支持几个
隔离性 安全隔离 完全隔离
迁移 优秀 一般

四、 Docker与虚拟化

在没有Docker 的时代,商家通常使用硬件虚拟化(也称为虚拟机),以提供隔离。虚拟机提供虚拟的硬件,可安装一个操作系统和其他程序。它们需要很长的时间(通常以分钟计)来创建,也需要显著的资源开销,因为它们除了要执行你需要的软件,还得运行整个操作系统的副本。

不同于虚拟机,Docker容器不使用硬件虚拟化。运行在Docker容器中的程序接口和主机的 Linux内核直接打交道。因为容器中运行的程序和计算机的操作系统之间没有额外的中间层,没有资源被冗余软件的运行或虚拟硬件的模拟而浪费掉。这是一个很重要的区别。Docker不是一个虚拟化技术。相反,它可以帮助使用已经内置到操作系统中的容器技术。

Docker以及其他容器技术,都属于操作系统虚拟化范畴,操作系统细腻化最大的特点就是不需要额外的supervisor支持。Docker虚拟化方式之所以有众多优势,跟操作系统虚拟化技术自身的设计和实现分不开。

传统方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层。Docker容器时在操作系统层面实现虚拟化,直接复用本地主机的操作系统,因此更加轻量级。

五、 Docker概念

Docker中有三个核心概念:镜像、容器和仓库。因此,准确把握这三大概念对于掌握Docker技术尤为重要。

1.镜像(Image)
Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。

2.容器(Container)
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

3.仓库(Repository)
用来保存镜像的仓库。当我们构建好自己的镜像之后,需要存放在仓库中,当我们需要启动一个镜像时,可以在仓库中下载下来。

六、Docker安装系统

Docker引擎是使用Docker容器的核心组件,可以在主流的操作系统和云平台上使用,包括Linux操作系统、MacOSS和Windows系统上。用户可以访问Docker官网(https://www.docker.com/get-started)去获取Docker安装包。

七、Docker总结

#1.操作系统的趋势
1、系统越来越多,也越来越复杂
2、系统之间的兼容性得不到保证

#2.容器带来的优势
1、解决了一个相对隔离的环境(容器与容器,容器与主机之间互不影响)
2、解决了系统不兼容的问题(重点)
3、容器解决了稳定部署的问题

#3.容器软件:docker
1、基于golang语言开发
2、Linux 基金会
	1)增加知名度
	2)全世界的开发者共同维护软件的生态系统

#4.docker与虚拟机的区别
  - 虚拟机之间的系统级别的隔离
  - docker容器之间的进程级别的隔离

#5.docker仓库:
https://hub.docker.com/

posted @ 2022-09-21 15:57  高压锅炖主播  阅读(47)  评论(0编辑  收藏  举报