深夜福利, 小试linuxkit

前言

今天小编的朋友圈被DockerCon和linuxkit刷屏了,再不出来写点linuxkit的东东恐怕就要跟不上时代了。小编翻阅了N多的有关linuxkit的文章,发现绝大多数都是英文的讲解,小编本着对读者负责的态度决定先将linuxkit的文章翻译成中文,然后再亲手小试一下linuxkit,看看它究竟是个什么东东?


linuxkit简介

简而言之,linuxkit就是用来编译生成一个定制化linux镜像的工具集合。为什么要定制化linux?话说在如今发展的如火如荼的云计算中,传统的linux发行版,比如ubuntu,rhel等等无论从体积还是启动效率都比较落后,先说体积,云端的虚机操作系统中完全可以裁剪很多不必要的组件下去,比如跟显示相关的配置,驱动等等,甚至只需要一个containerd的环境(因为这个基础OS的唯一目的就是启动用户基于容器的上层应用)。从启动效率上讲,经过裁剪过后的精简版OS往往能做到秒级的启动,并且从安全性上来说比容器要安全很多,比如隔离性。还有就是由于精简OS镜像裁剪了很多不必要的组件下去,同时也就缩小了被攻击的范围,相对传统的OS要安全很多。


其实很多厂商都在实现精简版OS,比如CoreOS,RancherOS,Atomic等等,这些精简linux发行版基本都把体积控制在了百兆之内,有的甚至几十兆。相比这些精简OS,linuxkit又有什么特点呢?首先是它的高度灵活性和可定制化。我们可以通过一个yaml文件,里面指定linux内核版本,需要打包进去的组件就可以build生成一个ISO镜像了。通过yaml配置的好处是实现了基础设施即代码,可以通过版本控制软件比如git来管理起来。另外一个特点是通过linuxkit编译出的镜像中的服务都是通过容器方式来运行的。真正做到了Built with containers, for running containers。


废话不说,先看看用来生成OS镜像的yaml配置文件长什么样子:

kernel:image: "mobylinux/kernel:4.9.x"cmdline: "console=ttyS0 console=tty0 page_poison=1"
init:- linuxkit/init:42fe8cb1508b3afed39eb89821906e3cc7a70551- mobylinux/runc:b0fb122e10dbb7e4e45115177a61a3f8d68c19a9- linuxkit/containerd:60e2486a74c665ba4df57e561729aec20758daed- mobylinux/ca-certificates:eabc5a6e59f05aa91529d80e9a595b85b046f935
onboot:- name: sysctlimage: "mobylinux/sysctl:2cf2f9d5b4d314ba1bfc22b2fe931924af666d8c"net: hostpid: hostipc: hostcapabilities:- CAP_SYS_ADMINreadonly: true- name: binfmtimage: "linuxkit/binfmt:8881283ac627be1542811bd25c85e7782aebc692"binds:- /proc/sys/fs/binfmt_misc:/binfmt_miscreadonly: true- name: dhcpcdimage: "linuxkit/dhcpcd:48e249ebef6a521eed886b3bce032db69fbb4afa"binds:- /var:/var- /tmp/etc:/etccapabilities:- CAP_NET_ADMIN- CAP_NET_BIND_SERVICE- CAP_NET_RAWnet: hostcommand: ["/sbin/dhcpcd", "--nobackground", "-f", "/dhcpcd.conf", "-1"]
services:- name: rngdimage: "mobylinux/rngd:3dad6dd43270fa632ac031e99d1947f20b22eec9"capabilities:- CAP_SYS_ADMINoomScoreAdj: -800readonly: true- name: nginximage: "nginx:alpine"capabilities:- CAP_NET_BIND_SERVICE- CAP_CHOWN- CAP_SETUID- CAP_SETGID- CAP_DAC_OVERRIDEnet: host
files:- path: etc/docker/daemon.jsoncontents: '{"debug": true}'
trust:image:- mobylinux/kernel
outputs:- format: kernel+initrd- format: iso-bios- format: iso-efi


  • kernel字段定义了OS镜像对应的内核版本,这个内核也是放在一个Docker镜像中的。

  • init字段中定义了系统启动时的初始化顺序,其中最主要的就是containerd容器运行时环境。

  • onboot字段包含了系统级的服务,这些服务都是通过containerd的方式启动的。

  • services字段包括了镜像启动后需要执行的服务,

  • files字段包含了制作镜像时需要额外打包入镜像中的文件,有点类似于cloud-config中的write_files.

  • outputs定义了镜像的输出格式。


在编译生成OS镜像之前,我们还需要编译moby,非常简单,在项目根目录下运行make就可以了,moby生成的路径在根目录下的bin文件夹中,讲moby复制到/usr/bin/目录中即可。


编写好linuxkit.yaml文件后,就可以直接通过moby命令生成linux镜像了,运行命令:moby build linuxkit.yaml,过几分钟就能看到生成的镜像文件了:


可以看到这个linuxkit镜像文件只有几十兆,把linuxkit.iso文件拷贝到我的本地windows 10上面,使用hyper-v启动一个虚机,并将这个iso镜像加载进来,点击启动,很快(大概不到10秒)就看到系统界面了:


可以使用ctr list命令看看系统启动了哪些服务:

可以看到,这两个服务就是我们在配置文件中的services字段中指定的服务。


后记

linuxkit设计之初就考虑到了在容器集群中使用的场景,借用官方的一句话:可以(但不仅限于)在Docker或者Kubernetes集群中使用,我们也可以使用linuxkit编译生成的OS镜像作为本地数据中心的基础OS镜像,但是由于linuxkit还是一个早期的产品,官方也明确表示不建议在生产环境中使用,等到今年下半年的时候可能会有个正式版发布,让我们拭目以待吧。

原文地址:http://mp.weixin.qq.com/s/-lIzGc5covOi0uRQLWZuFg


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/325931.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HBase的hbase shell 详解

进入hbase命令行 ./hbase shell 显示hbase中的表 list 创建user表,里面包含info,date两个列族 create user,info,data create user,{NAME > info, VERSIONS > 5},{NAME > data , VERSIONS > 5 } 插入数据 puthbase> put ns1:t1, r1, c1, …

类的无参方法

一、方法: 1.组成:访问修饰符(public) 返回值类型(void,String ,int) 方法名(采用驼峰命名法)(){ //方法体 } eg:public String run(){ //方法体 return “快跑”; } 注意&#xff1…

这些保护Spring Boot 应用的方法,你都用了吗?

转载自 这些保护Spring Boot 应用的方法,你都用了吗? Spring Boot大大简化了Spring应用程序的开发。它的自动配置和启动依赖大大减少了开始一个应用所需的代码和配置量,如果你已经习惯了Spring和大量XML配置,Spring Boot无疑是…

.NET Core 2.0及.NET Standard 2.0

.NET Core 2.0的发布时间,.NET Core 2.0预览版及.NET Standard 2.0 Preview大概在5月中旬或下旬发布。 .NET Core 2.0正式版本发布时间大约在Q3 2017发布,具体我估计大概在8月份左右。同时一起发布的也就是.NET Standard 2.0。 MilestoneRelease Date.…

路径、形状工具与选区

一、路径工具: 可以转换为选区或者使用涂颜色填充和描边的轮廓。 二、路径工具的功能: 1.绘制平滑线条 2.绘制矢量形状 3.勾选图像轮廓 4.选区互换 三、路径工具的分类: 1.路径选择工具:选择一个闭合的路径或者是一个独立存在的路…

zookeeper 屁民

视频链接:https://pan.baidu.com/s/1b_liTHLVCesMWqoZYokxyA 密码:wjgu 视频在 00:31:00–01:03:00之间 Zookeeper Server最基础的东西是什么呢?我想应该是Paxos了。所以本文会介绍Paxos以及它在ZK Server中对应的实现。 先说Paxos&#x…

Linux清理磁盘挂载点方法(亲测有效)

问题现象 Linux操作系统云服务器根目录空间占用率过高。例如,以图1为例,根目录空间占用率为96%。 根目录空间占用率过高 查询当前系统存在一个约42G 大小的文件access_log,这个文件应该是apache产生的访问日志文件,从日志大小来…

.NET程序在Linux容器中的演变

本文将首先讨论镜像的构建时间和启动时间,接着会将一个简单的.NET程序运行在基于容器的应用上,然后观察镜像大小的变化,最终缩短镜像的构建和加载时间。此外,代码优化是本文的另一个主题。 现在,.NET开发人员可以无障…

滤镜与通道

一、滤镜:在原有图像的基础上,产生许多离奇而炫目的效果的工具集合。 二、滤镜分为两个部分: 1.内置的滤镜 2.外挂滤镜 三、滤镜组: 1.渲染:可以在图像中创建三维形状,云彩图案和三维光照效果。 2.风格化&a…

Zookeeper 详讲(笔记)1

client发送request给follower,follower将request给leader,leader将proposal(提议)发送给所有的follower,follower进行投票,每一个follower返回一个ack给Leader,leader将commit发送给所有的follower进行更新…

React的列表渲染

//9. 列表渲染class List extends React.Component{state {list:[1,2,3,4,5],list2:[{id:1,text:java},{id:2,text:js},{id:3,text:php},{id:4,text:python},{id:5,text:node}]}render(){const arr this.state.list;const arr2 this.state.list2;const listItem []const li…

Spring-SpringMVC父子容器

转载自 Spring-SpringMVC父子容器 前言 Spring&SpringMVC作为bean管理容器和MVC默认框架,是大多数web应用都会选择的方案。在其使用过程中,尽管基于xml的配置bean管理的方式依然存在,但在很多情况下已经采用的强大的注解功能将其替代。…

微服务的概念——《微服务设计》读书笔记

《领域驱动设计》(Eric Evans):告诉我们用代码呈现真实世界的重要性,并且告诉我们如何更好地建模。 持续交付理论:如何更有效及更高效地发布软件品,并指出保持每次提交均可发布的重要性。 六边形架构理论&a…

图标设计

一、图标的作用: 1.吸引用户的注意力 2.跨语言障碍,更好的实现人机交互。 二、图标的尺寸: 1.128128 2.4848 3.256256 4.3232 5.16*16 三、icon的中文意思就是图标,图形化表示。 四、图标的色彩数量: 1.颜色数&#xf…

React中后台管理系统添加广告分类显示不出来

问题描述 添加广告分类之后,其他的页面能正常显示,看不到广告页面,或者看到广告页面不停的转圈(打开network看到client的拦截信息) 问题分析 可能是浏览器中的拦截器拦截了请求 解决办法 关闭浏览器中的拦截广告插件

自定义机架感知

副本节点的选择(机架感知) 1、默认情况下 第一个副本在client所处的节点上,如果客户端在集群之外,(在win7上运行程序,写文件到集群上),随机选一个。 第二个副本和第一个副本在不同…

想要玩转实现负载均衡,你知道这些吗?

转载自 想要玩转实现负载均衡,你知道这些吗? 一、前言 互联网早期,业务流量比较小并且业务逻辑比较简单,单台服务器便可以满足基本的需求;但随着互联网的发展,业务流量越来越大并且业务逻辑也越来越复杂&…

按钮设计

一、按钮的常识: 1.状态:正常状态、鼠标放上去的状态、按下时的状态 2.按钮的格式:bmp、gif、png、jpg(应用程序中的) gif、png、jpg、swf(网页中的) 二、按钮的表现形式: 1.图形方式 2.文字方式 3.综合方式 4.动画方式 三、按钮的…

netcore实践:跨平台动态加载native组件

缘起netcore框架下实现基于zmq的应用。在.net framework时代,我们进行zmq开发由很多的选择,比较常用的有clrzmq4和NetMQ。 其中clrzmq是基于libzmq的Interop包装, NetMQ是100%C#的zmq实现(基于AsyncIO组件)。以上两种…