【Docker 江湖】之初识三问

157 阅读7分钟
原文链接: mp.weixin.qq.com

目录

  • 初识

  • 何谓 Docker

    • 核心概念

    • Image (镜像)

    • Container(容器)

    • Repository (仓库)

    • Registry(注册服务器)

    • 关系

  • 为何 Docker

    • Docker 与 JVM

    • Docker 与 Git

    • Docker 与虚拟机

    • Build & Ship & Run

    • Build

    • Ship

    • Run

    • 总结

  • 何用 Docker

    • 安装

    • 测试安装

    • 应用场景

初识

我们又见面了,这次我带着 Docekr 来介绍给你认识。

为了让你更了解它,我们从以下几个方面来介绍。

对待一个新的知识,我们可以使用 WWH (What Why How) 学习法,循序渐进的深入。

WWH 你没听过?它翻译过来可以做,何谓,为何,何用?

记住这个,践行下去,我们开始吧。

何谓 Docker

  • Docker 最初是由 dotCloud 公司内部发起的一个项目,后于 2013 年 3 月开源于 Github。自开源后,该项目受到广泛的关注与讨论。

  • Docker 使用 Google 推出的 Go 语言开发实现,利用 Linux 核心的资源分离机制,对进程进行封装隔离。由于隔离后的进程,独立于宿主,以及其它隔离的进程,因此也称其为容器

  • Docker 在容器基础上,对文件系统、网络、进程等进行了进一步的封装,极大地简化了容器的创建和维护。

核心概念

Docker 的大部分内容都是围绕着它的三个核心概念:Repository,Image,Container(仓库、镜像、容器)。

深入理解这三个概念,有助于更好的掌握 Docker 技术。

Image (镜像)

包含创建容器所需的所有依赖项和信息的包。

映像包括所有依赖项(例如框架),以及容器运行时使用的部署和执行配置。

通常情况下,映像派生自多个基础映像,这些基础映像是堆叠在一起形成容器文件系统的层。 创建后,映像不可变。

Container(容器)

Docker 镜像的实例。

容器表示单个应用程序、进程或服务的执行。

它由 Docker 映像的内容、执行环境和一组标准指令组成。

在缩放服务时,可以从相同的映像创建多个容器实例。

批处理作业可以从同一个映像创建多个容器,向每个实例传递不同的参数。

Repository (仓库)

集中存放 Docker 镜像文件的地方,带有指示映像版本的标记。

Registry(注册服务器)

用来存放仓库的服务器,一个注册服务器上可以有多个仓库。

Docker 官方有提供公开的 Registry 服务 Docker Hub 也就是默认的 Registry

国内也有些云服务商也提供了 Registry Mirror ,称为镜像加速服务。相比直接从 Docker hub 下载,其速度提高了很多。

除了以上公开的服务,还可以搭建私有的 Docker Registry 服务,方便开发私有项目时对 Docker 的使用。

关系

正向关系

  • 一个注册服务器 -> 多个仓库

  • 一个仓库 -> 多个镜像

  • 一个镜像 -> 多个容器实例

反向关系

  • 容器实例可保存为镜像

  • 镜像实例可提交到仓库

为何 Docker

Docker 与 JVM

在学习编程语言 Java 时,有见到一句著名的话(理念):

Write once, Run anywhere (everywhere).

一次编写,随处(到处)运行

该理念对 JVM 的设计起着关键的作用。(JVM - Java virtual machine)

后来因 JVM 在不同的操作系统上,存在多个实现,程序在每个 JVMOS 的组合中产生的差别,常需要在各个平台上测试。

因此又出现了一句玩笑话:

Write Once, Debug Everywhere.

一次编写,到处调试

Docker 的官网中也曾有一句话:

Build, Ship and Run any App, Anywhere.

构建,分发,运行任何软件,在任何地方这种理念的优势和 Java 语言很相似。

  • Java 实现了一次编写,到出运行,Docker 实现了一次封装,到处运行。

  • JVM 的实现屏蔽的 OS 层面的差异,提供了一个不依赖于底层 OS 和硬件的接口。

  • DockerDaemon 不仅屏蔽掉了不同 OS 及版本,更是解决了不同机器环境的差异。

Docker 与 Git

  • Git 方便了用户对代码内容的版本控制,支持多个用户可以同时编写,修改、最终合并到一起,可以在任何地方,解决代码中的问题并提交。

  • Docker 也融入了 Git 的设计理念,可以对容器的版本进行管理,方便用户获取、分发、更新、复用等操作。

  • Docker 容器是从存储在 Image 中的 Layer 生成的,还可提交更改所带来的差异,从 registry 上拉下来进行构建。

Docker 与虚拟机

特性 容器 虚拟机
启动速度 秒级 分钟级
内存使用 很小 较多
硬盘使用 一般为MB 一般为GB
性能 接近原生 弱于原生
系统支持量(一定配置下) 单机支持上千个容器 一般几十个
隔离性 安全隔离 完全隔离
迁移性 优秀 一般
  • Docker 容器的启动、暂停、恢复、停止等操作要比传统的虚拟机快的多。

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

  • Docker 容器中应用的性能,基本与原生机器使用应用的性能很接近,要比传统虚拟机性能好很多。

  • Docker 可以通过配置文件、一句命令,就可以自动化部署创建。比传统虚拟机构建起来效率高很多。

  • Docker 相比于虚拟机技术更轻、更便捷,用户可以方便的创建和使用容器,把自己的应用放入容器内。

Build & Ship & Run

下面来详细说一下这几步:

Build

替代了你对开发环境的编程语言编译、运行环境、依赖等问题的担心完全都 Build 到了镜像中。

Docker 镜像是通过名为Dockerfile的东西创建的。可以将其视为如何设置应用程序的方法。

只需要定义一次该文件,然后再构建它。一旦构建了 Docker镜像,您所要做的就是将其移动到另一台机器并运行它。

不再需要重新安装所有依赖项的复杂步骤,因为包含了运行应用程序所需的所有内容。

Docker 提供了服务和命令,可以让你轻松地在服务器或机器之间移动 Docker镜像

Ship

把打包好的镜像,运输到仓库、服务器、分享给另一个开发等。

Run

当目标机器上安装了 Docekr,你所需要做的就是,执行你在开发中所运行的相同的命令,几分钟后它就会按照预期开始工作。

他们可能是打包好的 Web 应用、编译环境、数据库、操作系统皆可。

总结

  • 标准:快速构建、测试、部署应用程序,使操作标准化,项目可无缝迁移。

  • 快速:随心的选择自己所需要的编程语言、数据库、框架、消息服务、运维工具等应用,快速搭建统一的开发,运行环境。

  • 轻量:只需要一条命令,和非常简单的配置,就可以快速部署一个数据库服务、Web 应用等开发中常见的环境。

一句话来概括下,为何Dcoker :

“Docker 实现了标准、快速、轻量级的虚拟化技术,一次封装,到处运行。”

何用 Docker

安装

CentOS/Debin/Fedora/Ubuntu 简便的安装方式

curl -fsSL https://get.docker.com -o get-docker.shsudo sh get-docker.sh

Mac

下载:

https://hub.docker.com/editions/community/docker-ce-desktop-mac

Windows

下载:

https://hub.docker.com/editions/community/docker-ce-desktop-windows

测试安装

安装完毕后,打开终端/cmd,输入测试:

docker --version

应用场景

  • 微服务:利用 Docker 容器的标准化代码部署来构建和扩展分布式应用程序。

  • 持续集成和交付:通过实现环境标准化并消除语言堆栈和版本之间的冲突,加快应用程序的交付速度。

  • 数据处理:将大数据处理作为一项服务提供。将各种数据包和分析包打包成可移植的容器,使非技术用户也可以执行。

  • 机器学习:使用容器可快速扩展机器学习模型以进行培训和推断,并且可在任何平台上将其运行至接近您的数据源。

  • 容器即服务:构建和发布带有由 IT 管理并确保安全的内容和基础设施的分布式应用程序。


未完待续

听说好看的人才能点