Docker篇(学习前言)

时间:2024-11-01 12:21:50

目录

一、产生背景

二、重点大纲

三、前言铺垫

1. 说法一

1.1. 简介

1.2. 总结

2. 说法二

2.1. 简介

2.2. 特点

2.3. 总结

3. 说法三

简介

三、容器技术与虚拟化技术对比

1. 说法一

2. 说法二

四、为什么使用Docker?

1. 说法一

前言

1.1. 应用部署的环境问题

1.2. Docker解决依赖兼容问题

1.3. Docker解决操作系统环境差异

1.4. 知识小结

2. 说法二

2.1. 上手快

2.2. 项目职责的逻辑分类

2.3. 快速高效的开发生命周期

2.4. 鼓励使用面向服务的架构(自动化部署)

3. 说法三

四、Docker 架构

1. 说法一

1.1. 简介

1.2. Docker是一个客户端服务器(C/S)架构程序

1.3. Docker Daemon 守护进程

1.4. Docker Image镜像

1.5. Docker Container 容器

1.6. Registry

2. 说法二

2.1. Docker 核心概念

镜像&容器

Registry&Repository

2.2. DockerHub

2.3. Docker架构

七、Docker组件

1. 镜像与容器

2. 仓库

八、知识


一、产生背景

Docker 是云时代的产物,它的诞生是一种必然, 想了解 Docker, 那么必须对云服务的一些运营模式有所了解。

云服务的运营模式:

  • IaaS(基础设施即服务):经营的是基础设施,比如阿里云服务器(只安装操 作系统)
  • PaaS(平台即服务):经营的是平台,比如 MySQL 开发平台(安装在 linux里面现成的平台)、redis 开发平台。
  • SaaS(软件即服务):经营的是软件,比如公司的 OA 系统(部署到远程服务器中的 OA 软件)

Docker 就是伴随着 PaaS 产生的。

二、重点大纲

1、简介

对 docker 做一个简单的介绍,在工作中如何去使用 docker,干什么事情,这个必须要清楚?

2、安装和启动

然后就docker进行安装和启动他。这个必须也要掌握。

3、常用命令

我们在使用 Docker 的时候,全部都是命令行,所以本文章以下的 Docker 命令必须全部都要掌握而且很重要,

但是也不用害怕和担心,不会太多。

4、应用部署

应用部署的话,就是在当前 Docker 容器内,去安装常用软件。

比如:mysql,tomcat 等。

5、备份和迁移

6、Dockerfile

做一个简化操作。你可以这样理解,刚才不是有人说签名docker是又一些常用命令。

如果每次都输入相同或者重复的命令是非常麻烦的事情,用dcokfile可以解决这个问题。

dockerfile就是命令的一个批处理文件。

一执行它可以把很多命令都一起执行了。

7、docker私有仓库

存放安装的镜像文件。

8、注意事项

使用 Docker 一定需要连接网络才能操作

三、前言铺垫

1. 说法一

1.1. 简介

在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务

器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以

比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式,地域或物

理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。

(比如:vmware也是一个虚拟资源,大家都在使用vmware,大家都是在上面建立一个虚拟机,其实这就

是一种虚拟化技术,或者半虚拟化技术,大家是不是使用vmware安装一个centos的系统或者安装一个

windows的系统。那么你在上面操作其实和你在实体机上操作是

不是比较类似,对吧,他们之间这种技术就是虚拟化技术。这种虚拟化技术它有一个小小的弊端,我们在

我们的vmware上面创建了一个centos的虚拟机,它在使用的时候是以我当前的操作系统紧密相连的,简

单点说,你的操作系统内存只有4G,你在创建虚拟机的时候你

会分配8个G吗?说不能,说明虚拟机是依赖我们的当前的物理系统,它只不过是在之上构建了虚拟的系

统,我们就可以使用它,这种其实就是一种半虚拟化技术。)

这种虚拟机技术,完全依赖底层的宿主机,每个虚拟机本身都是独立的,隔离的,每一个都有自己单独的

内存,资源没有办法达到共享,资源达不到最大化的利用和使用。而docker和它不一样,它是共享的,大

白话就是我的上面有docker容器可以共享我的资源,这个时候就会在宿主机上或者一台主机上,我可以部

署很多个docker容器,他们是共享的 docker这种容器技术,给我们的开发和运维去做一个统一的环境,是

非常非常好的,也是非常高效和快捷的。大家知道在真实的开发中,开发人员和与运维人员经常因为环境

的问题出现故障和扯皮,这个是非常常见的纠纷,比如你在电脑上的环境都是你自己安装部署的,ok你开

发完了运行没有任何问题,但是测试人员在测试的时候出问题了。为什么呢?因为它和你的环境不一样,

比如你使用的是jdk1.8他使用的是1.7,常常因为各种版本的问题造成不必要的麻烦,而使用docker这个容

器,首先他的第一件事情就是它能帮助我们统一运行环境。这样的话,这样的话能提高我们的开发效率,

因为大家都使用的是同一个环境。所以说呀,docker以后在未来的开发环境中,用的越来越多,但是呢,

docker在真正的学习过程中,它是有点偏运维方面。这也就是为什么现在招聘里面有一个职位叫:运维开

发工程师

在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重

组重用,透明化底层物理硬件,

从而最大化的利用物理硬件 对资源充分利用。虚拟化技术种类很多,例如:软件虚拟化、硬件虚拟化、内

存虚拟化、网络虚拟化(vip)、桌面虚拟化、服务虚拟化、虚拟机等等。

1.2. 总结

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然

后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何的

接口。

2. 说法二

2.1. 简介

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 的容器就像操作一个快速轻量级的虚拟机一样简单。

2.2. 特点

(1)上手快。 用户只需要几分钟,就可以把自己的程序“Docker化”。Docker依赖于“写时复制”(copy-

on-write)模型,使修改应用程序也非常迅速,可以说达到“随心所致,代码即改”的境界。随后,就可以

创建容器来运行应用程序了。大多数Docker容器只需要不到1秒中即可启动。由于去除了管理程序的开销,

Docker容器拥有很高的性能,同时同一台宿主机中也可以运行更多的容器,使用户尽可能的充分利用系统资源。

(2)职责的逻辑分类 使用Docker,开发人员只需要关心容器中运行的应用程序,而运维人员只需要关心如何管

理容器。Docker设计的目的就是要加强开发人员写代码的开发环境与应用程序要部署的生产环境一致性。从而降

低那种“开发时一切正常,肯定是运维的问题(测试环境都是正常的,上线后出了问题就归结为肯定是运维的问

题)”

(3)快速高效的开发生命周期 Docker的目标之一就是缩短代码从开发、测试到部署、上线运行的周期,让你的

应用程序具备可移植性,易于构建,并易于协作。(通俗一点说,Docker就像一个盒子,里面可以装很多物件,

如果需要这些物件的可以直接将该大盒子拿走,而不需要从该盒子中一件件的取。)

(4)鼓励使用面向服务的架构 Docker还鼓励面向服务的体系结构和微服务架构。Docker推荐单个容器只运行

一个应用程序或进程,这样就形成了一个分布式的应用程序模型,在这种模型下,应用程序或者服务都可以表示为

一系列内部互联的容器,从而使分布式部署应用程序,扩展或调试应用程序都变得非常简单,同时也提高了程序

的内省性。(当然,可以在一个容器中运行多个应用程序)

2.3. 总结

docker是开源的,docker是一个开放源代码软件,是一个开放平台,用于开发应用、交付(shipping)应用、运

行应用;Docker允许用户将基础设施中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速

度。

3. 说法三

简介

Docker 就是一种虚拟化容器技术,通过 Docker 这种虚拟化容器技术,我们可以对物理机的资源进行更加合理有

效 的利用,可以将一台物理机器虚拟化出很多个拥有完整操作系统,并且相互独立 的“虚拟计算机”。

在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机 的各种实体资源,如服务器、网

络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态

更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组 态所限制。一般

所指的虚拟化资源包括计算能力和资料存储。 在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件

产能过剩和老 的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件。

虚拟化技术种类很多,例如:软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟 化、桌面虚拟化、服务虚拟化、

虚拟机等等。

最常用的虚拟化技术有:全虚拟化和操作系统(OS)虚拟化。

比如,VMware workstation 就是全虚拟化的实现。

比如, Docker,就是基于操作系统虚拟化技术的一种实现。

基于操作系统创建出一些相互独立的、功能虚拟化技术有多种实现方式,有基于 硬件进行虚拟化的技术,

而 Docker 只是针对操作系统进行虚拟化,对于硬件资 源的使用率更低。

相对于 VMware 这种虚拟化技术,Docker 拥有着显著的优势:

1、启动速度快

Docker 容器启动操作系统在秒级就可以完成,而 VMware 却是达到分钟级。

2、系统资源消耗低

一台 Linux 服务器可以运行成千上百个 Docker 容器,而 VMware 大概只能同时运行 10 个左右。

3.、更轻松的迁移和扩展

由于 Docker 容器比 VMware 占用更少的硬盘空间, 在需要搭建几套软件环境的情况下,对安装好的 Docker 容

器进行迁移会更 快捷,更方便。而且 Docker 容器几乎可以在任意的平台上运行,包括虚拟 机、物理机、公有

云,私有云,个人电脑等,这种兼容性,可以让用户将一 个应用程序从一个平台直接迁移到另一个平台。

三、容器技术与虚拟化技术对比

当面试官问以下问题时:

1、容器技术与虚拟化技术对比

2、Docker和虚拟机的区别

1. 说法一

与传统的虚拟机相比,Docker优势体现为启动速度快、占用体积小。

1:基础设施Infrastructure,它可以是你的个人电脑,数据中心的服务器或者云主机

2:Host os当前的操作系统,比如windows和linux系统等。

3:hypervisor:是一种虚拟化技术。可以在主操作系统之上运行多个不同的操作系统。比如vmware和virturebox等。

4:Guest os 就是虚拟子系统也就是我们的centos。

5:Bins、Libs安装应用需要依赖的组件和环境。比如gcc,gcc++或者yum等。

6:App 安装我们对应的应用,比如:mysql,tomcat.jdk等。

应用安装之后,就可以在各个操作系统分别运行应用了,这样各个应用就是相互隔离的。

Docker容器解说:

1:基础设施Infrastructure。

2:Host os当前的操作系统,比如windows和linux系统等。

3:Docker Engine:负责和底层的系统进行交互和共享底层系统的资源。

取代了Hypevisor.它是运行在操作系统之上的后台进程,负责管理Docker容器。

4:各种依赖,对于Docker,应用的所有依赖都打包在Docker镜像中,Docker容器是基于Docker镜像创建的。

5:应用,应用的源代码与他的依赖都打包在Docker镜像中,

不同的应用需要不同的Docker镜像,不同的应用运行在不同的Docker容器中,它们是相互隔离的。

Docker守护进程可以直接与主操作系统进行通信,为各个Docker容器分配资源,它还可以将容器与主操作系统隔

离,并将各个容器互相隔离,虚拟机启动需要数分钟,而Docker容器可以在毫秒内启动,由于没有臃肿的的从操

作系统,Docker可以节省大量的磁盘控制以及其他系统资源。

说了这么多Docker的优势,大家也没有必要完全否定虚拟机技术因为两者有不同的使用场景,虚拟机更擅长于彻

底的隔离整个运行环境,例如,云服务器提供商通常采用虚拟机技术隔离不同的用户。而Docker通常用于隔离不

同的应用,例如:前端、后端以及数据库。

对比表格:

虚拟机

容器

占用磁盘空间

非常大,GB级

小,MB甚至KB级

启动速度

慢,分钟级

快,秒级

运行形态

运行于Hypervisor上

直接运行在宿主机内核上

并发性

一台宿主机上十几个,最多几十个

上百个,甚至数百上千个

性能

逊于宿主机

接近宿主机本地进程

资源利用率

2. 说法二

Docker 可以让一个应用在任何操作系统中非常方便的运行。而以前我们接触的虚拟机,也能在一个操作系统中,

运行另外一个操作系统,保护系统中的任何应用。

两者的差异如下

虚拟机(virtual machine)是在操作系统中模拟硬件设备,然后运行另一个操作系统,比如在 Windows 系统里

面运行 Ubuntu 系统,这样就可以运行任意的Ubuntu应用了。

Docker仅仅是封装函数库,并没有模拟完整的操作系统,如图:

对比来看:

总的来说,Docker和虚拟机的差异如下

  • docker是一个系统进程;虚拟机是在操作系统中的操作系统
  • docker体积小、启动速度快、性能好;虚拟机体积大、启动速度慢、性能一般

四、为什么使用Docker?

当面试官问以下问题时:

  1. 容器带来的好处有哪些?

1. 说法一

前言

微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。

  • 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。
  • 在数百上千台服务中重复部署,环境不一定一致,会遇到各种问题

1.1. 应用部署的环境问题

大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题:

  • 依赖关系复杂,容易出现兼容性问题
  • 开发、测试、生产环境有差异

例如:

一个项目中,部署时需要依赖于node.js、Redis、RabbitMQ、MySQL等,这些服务部署时所需要的函数库、依赖项各不相同,甚至会有

冲突。给部署带来了极大的困难。

1.2. Docker解决依赖兼容问题

Docker 确巧妙的解决了这些应用部署的环境问题,那么 Docker 是如何实现的呢?

Docker为了解决依赖的兼容问题的,采用了两个手段:

  • 将应用的Libs(函数库)、Deps(依赖)、配置与应用一起打包
  • 将每个应用放到一个隔离容器去运行,避免互相干扰

这样打包好的应用包中,既包含应用本身,也保护应用所需要的Libs、Deps,无需再操作系统上安装这些,自然

就不存在不同应用之间的兼容问题了。

虽然解决了不同应用的兼容问题,但是开发、测试等环境会存在差异,操作系统版本也会有差异,那么怎么解决

这些问题呢?

1.3. Docker解决操作系统环境差异

要解决不同操作系统环境差异问题,必须先了解操作系统结构。以一个Ubuntu操作系统为例,结构如下:

结构包括:

  • 计算机硬件:例如CPU、内存、磁盘等
  • 系统内核:所有Linux发行版的内核都是Linux,例如CentOS、Ubuntu、Fedora等。内核可以与计算机硬件交互,对外提供内核指令,用于操作计算机硬件。
  • 系统应用:操作系统本身提供的应用、函数库。这些函数库是对内核指令的封装,使用更加方便。

应用于计算机交互的流程如下:

  • 应用调用操作系统应用(函数库),实现各种功能
  • 系统函数库是对内核指令集的封装,会调用内核指令
  • 内核指令操作计算机硬件

Ubuntu 和 CentOSpringBoot 都是基于 Linux 内核,无非是系统应用不同,提供的函数库有差异:

此时,如果将一个Ubuntu版本的MySQL应用安装到CentOS系统,MySQL在调用Ubuntu函数库时,会发现找不

到或者不匹配,就会报错了:

Docker如何解决不同系统环境的问题?

  • Docker将用户程序与所需要调用的系统(比如Ubuntu)函数库一起打包
  • Docker运行到不同操作系统时,直接基于打包的函数库,借助于操作系统的Linux内核来运行

如图:

1.4. 知识小结

1、Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题?

Docker允许开发中将应用、依赖、函数库、配置一起打包,形成可移植镜像

Docker应用运行在容器中,使用沙箱机制,相互隔离

2、Docker如何解决开发、测试、生产环境有差异的问题?

Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此可以在任意Linux操作系统上运行

3、Docker是一个快速交付应用、运行应用的技术,具备下列优势

可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统

运行时利用沙箱机制形成隔离容器,各个应用互不干扰

启动、移除都可以通过一行命令完成,方便快捷

2. 说法二

2.1. 上手快

用户只需要几分钟,就可以把自己的程序“Docker 化”。

Docker 依赖于“写时复 制”(copy-on-write)模型,使修改应用程序也非常迅速,可以说达到“随心所致,

代码即改”的境界。

随后,就可以创建容器来运行应用程序了。

大多数 Docker 容器只需要不到 1 秒 中即可启动。

由于去除了管理程序的开销,Docker 容器拥有很高的性能,同时同 一台宿主机中也可以运行更多的容器,使用户

尽可能的充分利用系统资源。

2.2. 项目职责的逻辑分类

使用 Docker,开发人员只需要关心容器中运行的应用程序,而运维人员只需要关心如何管理容器。

Docker 设计的目的就是要加强开发人员写代码的开发环境与 应用程序要部署的生产环境一致性。

从而降低那种“开发时一切正常,肯定是运 维的问题

(测试环境都是正常的,上线后出了问题就归结为肯定是运维的问题)”

2.3. 快速高效的开发生命周期

Docker 的目标之一就是缩短代码从开发、测试到部署、上线运行的周期,让 你的应用程序具备可移植性,易于构

建,并易于协作。

通俗一点说,Docker 就 像一个盒子,里面可以装很多物件,如果需要这些物件的可以直接将该大盒子拿 走,而

不需要从该盒子中一件件的取。

2.4. 鼓励使用面向服务的架构(自动化部署)

Docker 还鼓励面向服务的体系结构和微服务架构。

Docker 推荐单个容器只运行 一个应用程序或进程,这样就形成了一个分布式的应用程序模型,在这种模型下,

应用程序或者服务都可以表示为一系列内部互联的容器,从而使分布式部署应用 程序,扩展或调试应用程序都变

得非常简单,同时也提高了程序的内省性。

当 然,可以在一个容器中运行多个应用程序。

当然,Docker 的强大远远不至于此,而作为软件开发人员的我们,更关注的是如 何利用它来搭建一套统一的软件

开发环境。 接下来,我们将会一步一步的揭开 Docker 的神秘面纱!

3. 说法三

1、秒级的交付和部署

2、保证环境一致性

3、高效的资源利用

4、弹性的伸缩

5、动态调度迁移成本低

四、Docker 架构

当面试官问以下问题时:

  1. Docker组件:CS架构程序

1. 说法一

1.1. 简介

一个完整的Docker基本架构由如下几个部分构成:

1.2. Docker是一个客户端服务器(C/S)架构程序

它是docker的用户界面,可以接受用户命令和配置标识,并与docker daemon通信,

其实就是在screat或者 xhsell中输入的docker命令。

1.3. Docker Daemon 守护进程

它是一个运行在宿主机(Docker Host)的后台进程,可以通过docker客户端与之通信。

1.4. Docker Image镜像

在docker中,每一个应用都会做成一个镜像文件。

这个镜像文件最后会把它安装到容器中,然后运行在docker的进程中,同一种镜像可以复刻多份容器去运行。

类似于java语言中的:类。

比如我又一个镜像假如是MYSQL镜像。我基于这个镜像可以创建N多个容器,而这些容器可以在我们的宿主机上

去运行。

问题:镜像从何而来?

从Registries而来。也是仓库的意思,也就是说所有的镜像都会从仓库里或者,这个远程仓库的地址是什么呢?

https://hub.docker.com/search?q=&type=image

或者你自己建立一个本地仓库来完成镜像的存储。

为什么不使用dockerhub提供的额镜像而使用国内的提供的docker仓库或者自己搭建,是因为国外卸载镜像的

时候有带宽限制。

速度会非常的慢。这也是为什么说一定要链接网络的原因。

1.5. Docker Container 容器

容器是镜像可以运行的实例,镜像和容器的关系有点类似于java语言中的:对象

1.6. Registry

它是一个集中存储与分发镜像的服务。

一个 Docker Registry 可以包含多个 docker 仓库,每个仓库可以包含多个镜像标签,每个标签对应一个docker

镜像。

Docker Registry 可分为公有 docker register 和私有 docker registry,

最常用的 docker registry 就是 docker hub.也就是默认的 docker registry。

2. 说法二

2.1. Docker 核心概念

docker 包含四个基本概念:

  • 镜像(Image)
  • 容器(Container)
  • 仓库注册中心(Registry)
  • 仓库(Repository)

理解了这四个概念,就理解了 docker 的整个生命周期了!

镜像&容器

镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。

容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器进程做隔离,对外不

可见。

一切应用最终都是代码组成,都是硬盘中的一个个的字节形成的文件。只有运行时,才会加载到内存,形成进程

而镜像,就是把一个应用在硬盘上的文件、及其运行环境、部分系统函数库文件一起打包形成的文件包。这个文

件包是只读的。

容器呢,就是将这些文件中编写的程序、函数加载到内存中允许,形成进程,只不过要隔离起来。因此一个镜像

可以启动多次,形成多个容器进程。

例如你下载了一个QQ,如果我们将QQ在磁盘上的运行文件及其运行的操作系统依赖打包,形成QQ镜像。然后你

可以启动多次,双开、甚至三开QQ,跟多个妹子聊天。

Registry&Repository

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 下来运行就可以了。

2.2. DockerHub

开源应用程序非常多,打包这些应用往往是重复的劳动。为了避免这些重复劳动,人们就会将自己打包的应用镜

像,例如:Redis、MySQL镜像放到网络上,共享使用,就像GitHub的代码共享一样。

  • DockerHub:DockerHub是一个官方的Docker镜像的托管平台。这样的平台称为Docker Registry。
  • 国内也有类似于DockerHub 的公开服务,比如 网易云镜像服务阿里云镜像库等。

我们一方面可以将自己的镜像共享到DockerHub,另一方面也可以从DockerHub拉取镜像:

2.3. Docker架构

我们要使用 Docker 来操作镜像、容器,就必须要安装 Docker。

Docker 是一个 CS 架构的程序,由两部分组成:

  • 服务端 ( server ):Docker 守护进程,负责处理 Docker 指令,管理镜像、容器等
  • 客户端 ( client ) :通过命令或 RestAPI 向 Docker 服务端发送指令。可以在本地或远程向服务端发送指令。

如图:

七、Docker组件

1. 镜像与容器

知道Docker的镜像组件;知道Docker的容器组件

镜像(image)镜像是基于联合文件系统的一种层式结构,由一系列指令一步一步构建出来

容器(container)镜像是静态的,镜像的每一层都只是可读的,而容器是动态的里面运行着我们指定的应用,容

器里面的应用可能会新建一个文件,修改一个目录,这些操作所带来的改变并不会作用到镜像里面,因为镜像只

是可读的。

所以通过镜像创建容器就是在镜像上加一个可读写的层。

2. 仓库

Docker 用 Registry 来保存用户构建的镜像。Registry 分为公共和私有两种。

Docker 公司运营公共的 Registry 叫做 Docker Hub。

https://hub.docker.com/

八、知识

镜像

  • 将应用程序及其依赖、环境、配置打包在一起

容器

  • 镜像运行起来就是容器,一个镜像可以运行多个容器

Docker结构

  • 服务端:接收命令或远程请求,操作镜像或容器
  • 客户端:发送命令或者请求到Docker服务端

DockerHub

  • 一个镜像托管的服务器,类似的还有阿里云镜像服务,统称为DockerRegistry