设为首页 加入收藏

TOP

架构杂谈《八》(一)
2019-09-17 15:09:59 】 浏览:30
Tags:架构 杂谈 《八》

架构杂谈《八》

Docker 架构 

一、Docker 引擎的三大组件

  1)Docker 后台服务(Docker Daemon):是长时间运行在后台的守护进程,是Docker的核心服务,可以通过命令dockerd与它进行交互通信。

  2)REST 接口(REST API):程序可以通过REST的接口来访问后台服务或向它发送操作指令。

  3)交互式命令行界面(Docker CLI):我们大多数时间都在使用命令行界面与Docker进行交互(以docker为开头的所有命令的操作)而命令行界面又是通过调用REST的接口来控制和操作Docker后台服务的。

  Docker 是C/S结构的架构,客户端通过与后台服务交互来编译、运行和发布容器。Docker的客户端可以连接到本机的Docker服务上也可以连接到远程的Docker服务上。Docker客户端是使用REST接口来和后台服务通信的,它通过使用UNIX Socket连接或者网络接口实现。

  (1)Docker 后台服务监听REST接口的请求,管理Docker的对象(如:Docker的镜像、容器、网络和磁盘卷)。一个Docker后台服务可以和其他Docker后台服务进行通信。从而对它们进行管理。

  (2)Docker客户端(Docker Client)是我们和Docker后台服务交互的主要工具,在使用docker run 命令时,客户端把命令发送到Docker后台服务,再由后台服务执行该命令。Docker客户端可以连接多个后台服务并与它们通信。

  (3)Docker仓库(Docker Registry)是用来存储Docker镜像的,Docker Hub和Docker Cloud是所有人都能够使用的公共的Docker仓库。Docker默认从Docker Hub下载镜像,当然我们也可以自己搭建私有仓库。当我们使用 docker pull 或 docker run 命令时,就会从我们配置的 Docker 仓库下载镜像,当使用 docker push 命令时,我们的镜像会被推送到Docker仓库中。

  (4)Docker对象(Docker Object)包括镜像、容器、网络、磁盘卷和插件等。我们在使用Docker时,就会创建和使用Docker对象。

      a)镜像(image)是只读的指令模板,用于创建Docker容器(container)通常一个镜像会继承另一个镜像,然后扩展自定义的指令,如,我们可以创建一个继承自Ubuntu的镜像,再安装一个 Apache Tomcat服务和自己的应用程序,同时修改些配置使我们的程序能够运行起来。为了创建自己的镜像,我们可以创建一个Dockerfile文件,通过一些简单的指令来定义如何创建和运行镜像,Dockerfile中的每个指令在镜像中都会创建为一个层(layer),当我们修改Dockerfile文件然后重新编译它时,仅有那些被修改的层(layer)才会被重新编译,这就是Docker镜像是轻量级的、体积非常小、速度非常块的原因。

      b)容器(container)是镜像运行的一个实例,我们可以使用Docker的API或CLI来创建、运行、停止、移动或者删除容器。我们可以为容器绑定一个或多个网络(network)或挂载一个磁盘卷(volume),也可以通过继承它来创建一个新的镜像。通常一个容器与另一个容器或它的宿主机都是相对独立和隔离的。在容器停止运行后,它其中的所有改变的状态如果没有保存则都会消失。

      c)Docker服务(server)允许我们在多个Docker后台服务中伸缩扩展容器,这些容器组成一个拥有多主多从模式的集群。集群中的每个成员都是一个Docker后台服务,它们之间通过Docker接口通信。我们可以通过Docker服务来定义集群的参数,如:集群中容器的副本个数。在默认情况下,集群的负载是面向所有容器节点的。而对于使用者来说,Docker集群就像一个大实例。

  (5)命名空间(Namespace),Docker使用命名空间为容器提供了很好的隔离性,当我们运行容器时,Docker会为容器创建一组命名空间,每个容器都是一个独立的命名空间,容器仅仅限制于在自己的命名空间中访问权限。Docker使用了Linux的如下命名空间:

    a)pid 命名空间(pid namespace):用来隔离进程的ID空间,使得不同的pid命名空间里的进程ID可以重复且相互之间不受影响。

    b)net 命名空间(net namespace):用于管理网络协议栈的多个实例。

    c)ipc 命名空间(ipc namespace):用于管理和访问IPC资源。

    d)mnt 命名空间(mnt namespace):用于管理 文件系统的挂载点。

    e)uts 命名空间(uts namespace):用于隔离内核和版本信息。

  (6)cgroups(control groups),Docker 采用了一种被称为 cgroups 的技术,实现了不同应用之间的隔离性。让每个应用只能访问属于自己的资源。cgroups 可以确保将可用的硬件资源共享给所有容器,并且可以对容器限制硬件资源,如:可以限制每个容器访问的内存大小。

  (7)UnionFS(Union File Systems),是Docker在创建层时采用的文件系统。这种文件系统使Docker变得很轻量级并且执行速度非常快。Docker可以使用多种类型的UnionFS,如:AUFS、vfs、btrfs和DeviceMapper。

  (8)容器格式(container format),Docker 将namespace、contor groups 和 UnionFS 封装成 container format,我们将其称为容器,默认的容器类型是libcontainer。

二、Docker的安装

  (1):Ubuntu Docker 安装:https://www.runoob.com/docker/ubuntu-docker-install.html

  (2):Centos Docker 安装:https://www.runoob.com/docker/centos-docker-install.html

  (3):Windows Docker 安装:https://www.runoob.com/docker/windows-docker-install.html

  (4):MacOS Docker 安装:https://www.runoob.com/docker/macos-docker-install.html

三、Docker 的简单使用

  https://www.runoob.com/docker/docker-hello-world.html

四、容器化项目

  Docker 为应用程序的打包和运行提供了一种便捷的方式,使用Docker容器进行构建、运行、停止、启动、修改、更新等操作都非常简单,容器化技术也可以让应用程序像云环境的部署变得更为高效,再加上容器本身已经包含应用程序运行所需的大部分依赖,所以运行容器的操作系统也能很好的瘦身,从而运行更快,占用资源更少。

  1)传统的应用部署

    传统的应用程序部署为直接将应用程序安装到宿主计算机的文件系统上,然后编写命令脚本来运行它。从应用程序的视角来看,其环境包括宿主机上的操作系统、运行环境、文件系统、网络配置、端口及

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇关于新手数组:样题:陶陶摘苹果 下一篇Springboot 项目源码 Activiti6 ..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目