zoukankan      html  css  js  c++  java
  • 01_Docker概念简介、组件介绍、使用场景和命名空间

    一、简介

    Docker是一个能够把开发的应用程序自动部署到容器的开源引擎Docker在虚拟化的容器执行环境中增加了一个应用程序部署引擎。该引擎的目标就是提供一个轻量、快速的环境,能够运行开发者的程序,并方便高效地将程序从开发者的笔记本部署到测试环境,然后再部署到生产环境。Docker极其简洁,它所需的全部环境只是一台仅仅安装了兼容版本的Linux内核和二进制文件最小限的宿主机

    大多数Docker容器只需不到一秒钟即可启动,由于去除了管理程序的开销,Docker容器拥有很高的性能,同时同一台宿主机中也可以运行更多的容器,使用户可以尽可能充分地利用系统资源。

    二、Docker组件

    Docker客户端和服务器、Docker镜像、RegistryDocker容器

    1、Docker客户端和服务器

    Docker是一个客户-服务器(C/S)架构的程序。Docker客户端只需向Docker服务器或守护进程发出请求,服务器或守护进程将完成所有工作并返回结果。Docker提供了一个命令行工具docker,可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。

     

    2、Docker镜像

    Docker镜像是一个只读的模板。例如,一个镜像可以包含安装了Apache Web务应用的Ubuntu操作系像可以用来Docker容器。Docker提供了构建新像或升原有镜像的较为便利的方式,或者你也可以下载别人已经创建好的镜像。Docker镜像是Docker的构建组件。

    镜像是构建Docker世界的基石。用户基于镜像来运行自己的容器。镜像也是Docker生命周期中的构建部分。镜像是基于联合文件系统的一种层式的结构。由一系列指令一步一步构建出来。例如:添加一个文件,执行一个命令,打开一个端口。

    也可以把镜像当做容器的源代码。镜像体积很小,非常便携,易于分享、存储和更新。

    3、Registry

    Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库Docker 仓库分为公有和私有。公有的 Docker 仓库名字是 Docker HubDocker Hub 提供了庞大的镜像集合供使用。这些镜像可以是自己创建,或者在别人的镜像基础上创建。Docker 仓库是 Docker 的分发部分。

    Docker Hub 是一个用于分享、管理 Docker 容器的 Docker SaaS 平台。由Docker公司负责维护的公共注册中心,包含超过15,000个可用来下载和构建容器的镜像,并提供认证、工作组结构、工作流工具(比如webhooks)、构建触发器以及私有工具。

     

    4、Docker容器

    Docker 容器和文件夹很类似,一个Docker容器包含了所有的某个应用运行所需要的环境每一个 Docker 容器都是从 Docker 镜像创建的Docker 容器可以运行、开始、停止、移动和删除。每一个 Docker 容器都是独立和安全的应用平台,Docker 容器是 Docker 的运行部分

    三、Docker作用

    1、加速本地开发和构建流程,使其更加高效、更加轻量化。本地开发人员可以创建、运行并分享Dokcer容器。容器可以在开发环境中构建,然后轻松地提交到测试环境中,并最终进入生产环境。

    2、能够让独立服务或应用程序在不同的环境中,得到相同的运行结果。这一点在面向服务的架构和重度依赖微型服务的部署中尤其实用。

    3、Docker创建隔离的环境进行测试。例如,用Jenkins这样的持续集成工具启动一个用于测试的容器。

    4、构建一个多用户的平台即服务基础设施。Docker能够作为云计算的多租户容器,使用Docker能容易为每个租户创建运行应该多个实例,这得益其灵活的快速环境以及有效diff命令。

    5、高性能、超大规模的宿主机部署。

    6、Docker通过创建进程的容器,不必重新启动操作系统,几秒内能关闭,你可以在数据中心创建或销毁资源,不用担心额外消耗。典型的数据中心利用率是30%,通过更积极的资源分配,以低成本方式对一个新的实例实现一个更聚合的资源分配,我们很容易超过这个利用率,大大提高数据中心的利用效率。

    四、命名空间

    命名空间是Linux内核为实现容器虚拟化而引入的特性。每个容器都有自己的命名空间,这保证了容器之间的互不影响。利用该特性,容器实现了在内核、文件系统、网络、PIDUIDIPC、内存、硬盘、CPU等资源的隔离,而不再是应用进程直接共享的状态。

    1、进程命名空间
    Linux
    通过命名空间管理进程号,同一进程在不同的命名空间中的进程号是不同的。进程命名空间是一个父子关系的结构,子空间的进程可看到父进程的ID

    2、网络命名空间
    通过网络命名空间可以实现网络的完全隔离。一个网络命名空间为进程提供了一个完全独立的网络协议栈的视图。包括网络设备接口、IPv4IPv6协议栈、IP路由表、防火墙规则、sockets等。Docker可采用虚拟网络设备(Virtual Network Device)的方式将不同命名空间的网络设备连接在一起。默认情况下,容器的虚拟网卡将与宿主机的docker0网桥连接在一起。

    3IPC命名空间
    进程间交互(Interprocess Communication - IPC)的信息包括信号量、消息队列、共享内存等。同一IPC命名空间的进程可以交互;否则不行。PID命名空间和IPC命名空间可以组合使用。

    4、挂载命名空间
    挂载命名空间可以将一个进程放到一个特定的目录执行,且允许不同命名空间的进程看到的文件结构不同,将各个命名空间中的进程看到的文件目录隔离。

    5UTS命名空间
    UTS(UNIX Time-sharing System)
    命名空间可以另每个容器拥有独立的主机名和域名,从而虚拟出一个拥有独立主机名和独立网络空间的环境。默认情况下,Docker容器的主机名就是容器的ID

    6、用户命名空间
    每个容器拥有不同的用户和组ID,容器可以使用自身内部的特定用户执行程序,而非宿主机系统上存在的用户。每个容器内部都可以有root账号,且跟宿主机不在同一命名空间。

  • 相关阅读:
    浅析JNI
    网易云音乐歌词下载器
    如何用一个SQL“搞挂”一个服务模块
    SpingBoot 1.5.2,MultipartFile保存图片时的不稳定异常(好像和内置tomcat有关)
    double 去除小数点后的0
    项目中时间处理----今天:时分(10:15),昨天/前天:(昨天/前天),除此之外的本周(星期几),再往前年.月.日(2017.06.15)
    SpringMvc 静态内部类 封装请求数据
    jsp页面 ajax提交数组 到struts2的action
    Struts2 s:if test判断时遇到的问题
    Struts2中 iterator隔行变色
  • 原文地址:https://www.cnblogs.com/jarl/p/10051904.html
Copyright © 2011-2022 走看看