首页 文章 精选 留言 我的

精选列表

搜索[Mermaid预览],共6181篇文章
优秀的个人博客,低调大师

Docker核心技术预览【转+改】

本文简单介绍docker使用到的部分核心技术,但不做深入探究,因为每一个技术都是一个独立的项目,有机会再分别详细介绍。 来源地址:http://www.infoq.com/cn/articles/docker-core-technology-preview Linux Namespace (实例隔离) The purpose of each namespace is to wrap a particular global system resource in an abstraction that makes it appear to the processes within the namespace that they have their own isolated instance of the global resource. 每个用户实例之间相互隔离,互不影响。一般的硬件虚拟化方法给出的方法是VM,而LXC给出的方法是container,更细一点讲就是kernel namespace。其中pid、net、ipc、mnt、uts、user等namespace将container的进程、网络、消息、文件系统、UTS("UNIX Time-sharing System")和用户空间隔离开。 pid namespace 不同用户的进程就是通过pid namespace隔离开的,且不同 namespace 中可以有相同pid。所有的LXC进程在docker中的父进程为docker进程,每个lxc进程具有不同的namespace。同时由于允许嵌套,因此可以很方便的实现 Docker in Docker。 ** net namespace ** 有了 pid namespace, 每个namespace中的pid能够相互隔离,但是网络端口还是共享host的端口。网络隔离是通过net namespace实现的, 每个net namespace有独立的 network devices, IP addresses, IP routing tables,/proc/net目录。这样每个container的网络就能隔离开来。LXC在此基础上有5种网络类型,docker默认采用veth的方式将container中的虚拟网卡同host上的一个docker bridge—docker0连接在一起。 ** ipc namespace ** container中进程交互还是采用linux常见的进程间交互方法(interprocess communication - IPC), 包括常见的信号量、消息队列和共享内存。然而与VM不同,container 的进程间交互实际上还是host上具有相同pid namespace中的进程间交互,因此需要在IPC资源申请时加入namespace信息 - 每个IPC资源有一个唯一的 32bit ID。 ** mnt namespace ** 类似chroot,将一个进程放到一个特定的目录执行。mnt namespace允许不同namespace的进程看到的文件结构不同,这样每个 namespace 中的进程所看到的文件目录就被隔离开了。同chroot不同,每个namespace中的container在/proc/mounts`的信息只包含所在namespace的mount point。 ** uts namespace ** UTS("UNIX Time-sharing System") namespace允许每个container拥有独立的hostname和domain name, 使其在网络上可以被视作一个独立的节点而非Host上的一个进程。 ** user namespace ** 每个container可以有不同的 user 和 group id, 也就是说可以以container内部的用户在container内部执行程序而非Host上的用户。 有了以上6种namespace从进程、网络、IPC、文件系统、UTS和用户角度的隔离,一个container就可以对外展现出一个独立计算机的能力,并且不同container从OS层面实现了隔离。 然而不同namespace之间资源还是相互竞争的,仍然需要类似ulimit来管理每个container所能使用的资源——LXC 采用的是cgroup。 参考 PaaS under the hood, episode 1: kernel namespaces,[中文] http://blog.blackwhite.tw/2013/12/docker.html cgroup (资源配额) cgroups 实现了对资源的配额和度量。cgroups 的使用非常简单,提供类似文件的接口,在/cgroup目录下新建一个文件夹即可新建一个group,在此文件夹中新建task文件,并将pid写入该文件,即可实现对该进程的资源控制。具体的资源配置选项可以在该文件夹中新建子subsystem,{子系统前缀}.{资源项}是典型的配置方法, 如memory.usage_in_bytes就定义了该group 在subsystem memory中的一个内存限制选项。 我们主要关心cgroups可以限制哪些资源,即有哪些subsystem是我们关心。 cpu 在cgroup中,并不能像硬件虚拟化方案一样能够定义CPU能力,但是能够定义CPU轮转的优先级,因此具有较高CPU优先级的进程会更可能得到CPU运算。 通过将参数写入cpu.shares,即可定义改cgroup的CPU优先级 - 这里是一个相对权重,而非绝对值。当然在cpu这个subsystem中还有其他可配置项,手册中有详细说明。 cpuacct 产生cgroup任务的cpu资源报告 cpuset cpusets 定义了有几个CPU可以被这个group使用,或者哪几个CPU可以供这个group使用。在某些场景下,单CPU绑定可以防止多核间缓存切换,从而提高效率 memory 设置每个cgroup的内存限制以及产生内存资源报告 blkio block IO相关的统计和限制,byte/operation统计和限制(IOPS等),读写速度限制等,但是这里主要统计的都是同步IO net_cls 标记每个网络包以供cgroup方便使用 devices 允许或拒绝cgroup任务对设备的访问 freezer 暂停和恢复cgroup任务 参考 PaaS Under the Hood, Episode 2: cgroups https://www.kernel.org/doc/Documentation/cgroups/ http://en.wikipedia.org/wiki/Cgroups LXC(LinuX Container) LXC (LinuX Container) is an operating system-level virtualization method for running multiple isolated Linux systems (containers) on a single control host. This is accomplished through kernel level isolation. 借助于namespace的隔离机制和cgroup限额功能,LXC提供了一套统一的API和工具来建立和管理container,LXC利用了如下 kernel 的特性: Kernel namespaces (ipc, uts, mount, pid, network and user) Apparmor and SELinux profiles (security) Seccomp policies Chroots (using pivot_root) Kernel capabilities Control groups (cgroups) LXC 旨在提供一个共享kernel的 OS 级虚拟化方法,在执行时不用重复加载Kernel,且container的kernel与host共享,因此可以大大加快container的 启动过程,并显著减少内存消耗。 这篇stackoverflow上的问题和答案很好地诠释了Docker和LXC的区别,能够让你更好的了解什么是Docker, 简单翻译下就是以下几点: Portable deployment across machines Docker提供了一种可移植的配置标准化机制,允许你一致性地在不同的机器上运行同一个Container;而LXC本身可能因为不同机器的不同配置而无法方便地移植运行; Application-centric Docker以App为中心,为应用的部署做了很多优化,而LXC的帮助脚本主要是聚焦于如何机器启动地更快和耗更少的内存; Automatic build Docker为App提供了一种自动化构建机制(Dockerfile),包括打包,基础设施依赖管理和安装等等; Versioning Docker提供了一种类似git的Container版本化的机制,允许你对你创建过的容器进行版本管理,依靠这种机制,你还可以下载别人创建的Container,甚至像git那样进行合并; Component reuse Docker Container是可重用的,依赖于版本化机制,你很容易重用别人的Container(叫Image),作为基础版本进行扩展; Sharing Docker Container是可共享的,有点类似github一样,Docker有自己的INDEX,你可以创建自己的Docker用户并上传和下载Docker Image; Tool ecosystem Docker提供了很多的工具链,形成了一个生态系统;这些工具的目标是自动化、个性化和集成化,包括对PAAS平台的支持等。 参考 http://linuxcontainers.org/ http://en.wikipedia.org/wiki/LXC http://marceloneves.org/papers/pdp2013-containers.pdf(性能测试) http://article.sciencepublishinggroup.com/pdf/10.11648.j.ajnc.20130204.11.pdf AUFS Docker对container的使用基本是建立在LXC基础之上的,然而LXC存在的问题是难以移动——难以通过标准化的模板制作、重建、复制和移动 container。在以VM为基础的虚拟化手段中,有image和snapshot可以用于VM的复制、重建以及移动的功能。想要通过container来实现快速的大规模部署和更新, 这些功能不可或缺。Docker正是利用AUFS来实现对container的快速更新——在docker0.7中引入了storage driver, 支持AUFS, VFS, device mapper, 也为BTRFS以及ZFS引入提供了可能。 AUFS (Another Union FS) 是一种 Union FS,简单来说就是支持将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)的文件系统, 更进一步的理解, AUFS支持为每一个成员目录(类似Git Branch)设定readonly、readwrite 和 whiteout-able 权限, 同时 AUFS 里有一个类似分层的概念, 对 readonly 权限的 branch 可以逻辑上进行修改(增量地, 不影响 readonly 部分的)。通常 Union FS 有两个用途, 一方面可以实现不借助 LVM、RAID 将多个disk挂到同一个目录下, 另一个更常用的就是将一个 readonly 的 branch 和一个 writeable 的 branch 联合在一起,Live CD正是基于此方法可以允许在 OS image 不变的基础上允许用户在其上进行一些写操作。Docker 在 AUFS 上构建的 container image 也正是如此,接下来我们从启动 container 中的 linux 为例来介绍 docker 对AUFS特性的运用。 典型的启动Linux运行需要两个FS: bootfs + rootfs: bootfs(boot file system)主要包含 bootloader 和 kernel, bootloader主要是引导加载kernel, 当boot成功后 kernel 被加载到内存中后 bootfs就被umount了。rootfs (root file system) 包含的就是典型 Linux 系统中的/dev,/proc,/bin,/etc等标准目录和文件。 由此可见对于不同的linux发行版, bootfs基本是一致的, rootfs会有差别, 因此不同的发行版可以公用bootfs 如下图: 典型的Linux在启动后,首先将 rootfs 置为 readonly,进行一系列检查,然后将其切换为 "readwrite" 供用户使用。在docker中,起初也是将 rootfs 以readonly方式加载并检查,然而接下来利用 union mount 的将一个 readwrite 文件系统挂载在 readonly 的rootfs之上,并且允许再次将下层的 file system设定为readonly 并且向上叠加,这样一组readonly和一个writeable的结构构成一个container的运行目录,每一个被称作一个Layer。如下图: 得益于AUFS的特性,每一个对readonly层文件/目录的修改都只会存在于上层的writeable层中。这样由于不存在竞争,多个container可以共享readonly的layer。所以docker将readonly的层称作 "image"——对于container而言整个rootfs都是read-write的,但事实上所有的修改都写入最上层的writeable层中,image不保存用户状态,可以用于模板、重建和复制。 上层的image依赖下层的image,因此docker中把下层的image称作父image,没有父image的image称作base image。 因此想要从一个image启动一个container,docker会先加载其父image直到base image,用户的进程运行在writeable的layer中。所有parent image中的数据信息以及 ID、网络和lxc管理的资源限制等具体container的配置,构成一个docker概念上的container。如下图: 由此可见,采用AUFS作为docker的container的文件系统,能够提供如下好处: 节省存储空间:多个container可以共享base image存储 快速部署:如果要部署多个container,base image可以避免多次拷贝 内存更省:因为多个container共享base image, 以及OS的disk缓存机制,多个container中的进程命中缓存内容的几率大大增加 升级更方便:相比于 copy-on-write 类型的FS,base-image也是可以挂载为可writeable的,可以通过更新base image而一次性更新其之上的container 允许在不更改base-image的同时修改其目录中的文件:所有写操作都发生在最上层的writeable层中,这样可以大大增加base image能共享的文件内容。 以上5条 1-3 条可以通过 copy-on-write 的FS实现,4可以利用其他的union mount方式实现, 5只有AUFS实现的很好,这也是为什么Docker一开始就建立在AUFS之上。 由于AUFS并不会进入linux主干 (According to Christoph Hellwig, linux rejects all union-type filesystems but UnionMount.), 同时要求kernel版本3.0以上(docker推荐3.8及以上),因此在RedHat工程师的帮助下在docker0.7版本中实现了driver机制, AUFS只是其中的一个driver, 在RHEL中采用的则是Device Mapper的方式实现的container文件系统。

优秀的个人博客,低调大师

ArkUI-X 预览版正式开源

OpenHarmony项目群技术指导委员会(以下简称“TSC”)-跨平台应用开发框架TSG所孵化项目 —— ArkUI-X,近期已正式开源。 开发者基于一套主代码,就可以将在OpenHarmony上开发的精美、高性能应用同时运行在Android、iOS等其它OS平台上。 ArkUI-X开源项目地址:https://gitee.com/arkui-x 01 ArkUI-X 诞生背景 随着越来越多设备的智能化,新的场景以及新的需求越来越分散,包括各类屏幕的支持(不同分辨率、尺寸等)、各类交互模式的支持(触控、语音,手势等)、各类不同能力的设备、以及设备之间的连续交互等。对于应用开发者而言,如何满足上述需求开发出精致流畅和一致体验的应用,挑战也越来越大。 基于如上技术挑战,OpenHarmony TSC于2022年4月正式成立跨平台应用开发框架TSG,成员包括华为、阿里、美的等多名资深技术专家。跨平台应用开发框架TSG对业界相关的跨平台应用开发框架所涉及的关键技术进行洞察分析,制定关键的演进策略,并开始构建跨平台应用开发框架项目——ArkUI-X。 02 ArkUI-X 主要介绍 ArkUI-X是基于OpenHarmony官方原生框架ArkUI之上扩展的。ArkUI在架构设计之初就是把跨平台作为一个重要特性考虑在内的,从代码的架构上就对各个平台做了解耦,可以方便地移植到不同的平台。同时ArkUI使用的核心引擎、图形引擎和ArkTS运行时等关键模块都是可以跨平台的。目的是让开发者基于一套主代码,就可以将在OpenHarmony上开发的精美、高性能应用同时可以运行在其它不同的OS平台上。ArkUI-X开源项目的“X”可以理解为“Cross”,将ArkUI扩展到不同的平台上,同时也代表了未来无限的可能。 ArkUI-X的应用工程和最新的OpenHarmony保持一致,当前支持构建OpenHarmony,Android以及iOS的应用程序。ArkUI-X的主要功能如下: 支持最新的Stage开发模型:支持基础的AbilityStage和UIAbility等能力,也支持多module的开发及运行。 支持UI基础组件跨平台,并且支持完整的状态管理能力。 Resource的资源格式也是跨平台的,不需要考虑不同平台下的资源处理,资源配置和访问的方式是保持一致的,并且支持多语言等能力。 对于开发时所使用的API,都是OpenHarmony生态的标准API,在跨平台上,支持标准API按照插件的方式按需打包。 ArkUI-X还提供了轻量的跨语言桥接机制,方便开发者快速扩展对应平台上已有的能力。 ArkUI-X还提供了和OpenHarmony一致的测试框架:测试工程的目录结构,同样也和OpenHarmony的工程保持一致。开发测试用例时,首先需要导入测试框架的API,其中包含了测试脚本的基础流程以及UI模拟操作的API。 03 ArkUI-X 实践案例 华为智慧生活应用内复杂单品详情页,之前在不同平台(Android、iOS)是分别进行开发的,维护成本较高。使用ArkUI-X跨平台项目后,复杂单品详情页代码一次编写支持运行到Android、iOS和HarmonyOS(OpenHarmony商用版)三个平台,新增支持一个平台成本反而下降,可复用跨平台代码占比高达75%,并且有较好的性能体验。真正地做到了“代码一次开发,三个平台部署”。 04 ArkUI-X 开源社区 ArkUI-X是由OpenHarmony TSC-跨平台应用开发框架TSG所孵化的开源项目,更多关于基于ArkUI-X的应用开发手册、框架开发手册、ArkUI-X版本包、ArkUI-X 样例代码、社区Roadmap等信息,可在Gitee ArkUI-X代码仓查阅。 ArkUI-X代码仓地址:https://gitee.com/arkui-x ArkUI-X-v1.0.0-Canary1版本说明地址: https://gitee.com/arkui-x/docs/blob/master/zh-cn/release-notes/ArkUI-X-v1.0.0-canary1.md

优秀的个人博客,低调大师

优麒麟18.10新特性预览—生物识别

随着优麒麟18.10正式发布的日子越来越近,小编又给大家带来了一个激动人心的功能。我们知道现在越来越多的电脑都带有指纹解锁的功能,但是我们的各大linux发行版却不支持,我们广大linuxer怎么能容忍呢?这不,优麒麟的开发人员紧跟脚步,在18.10中增加了生物识别的支持,下面就让我们一起来了解一下吧。 首先我们需要通过“生物识别管理工具”来录入我们的信息,从开始菜单中打开“生物识别管理工具”: 这里,我们以指纹为例,选中指纹栏,在左边选择我们的设备后,点击录入指纹: 接下来根据提示,进行指纹采集,这时需要我们反复抬起按下手指,保证指纹的完整性(和手机一样,想必大家都已经很熟练了)。 指纹采集好之后,又该如何使用呢? 在windows上,又或者安卓、ios手机上,大家通常通过指纹识别来解锁屏幕,优麒麟现在在登录/锁屏页面也同样可以了: 除了可以通过指纹解锁屏幕外,还可以通过指纹识别来提权!例如,当我们修改软件源时: 点击下方的“使用生物识别”: 我们就可以通过指纹来获取管理员权限而不需要输入密码,是不是很方便?而且,在使用终端的时候也可以哦,不过需要在生物识别工具里勾选“默认”: 就像这样,是不是很酷炫? 目前指纹识别支持8个厂商的21类设备,后续会加入指静脉识别、虹膜识别、声纹识别,敬请期待哦。 现支持的设备列表: 神马?不知道自己的设备是否在设备列表中?不知道自己的设备型号?没关系!小编早料到了,专门为各位优客朋友们提供了一个工具,用于检测自己的机器上是否有可用的设备。执行指令:sudo biometric-device-discover,看看命令的输出,如果探测到了支持的设备,会有提示哦!静待优麒麟操作系统正式版本发布吧!

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册