当前位置: 首页 > news >正文

Linuxkit 使用指南

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

linuxkit这个工具可以理解为是用多个docker镜像来组成一个最小化、定制化的操作系统,定制化后的系统只有几十M,配合openstack等云端用会很爽。

1. 安装moby

制作系统需要moby这个工具,系统已经安装好GO的前提下,执行下面的命令。

echo ‘export GOPATH=/root/mobytool‘ >> /etc/profile && 
mkdir -p /root/mobytool && 
cd /root/mobytool && 
go get -u github.com/linuxkit/linuxkit/src/cmd/moby && 
echo ‘export PATH=/root/mobytoll/bin:$PATH‘ 
>> /etc/profile

命令执行完没有提示就是正常安装了。

2. 创建linuxkit文件

这个文件指定了要组合成的系统,kernel、init、onboot、services、files顺序是不能变的,如下:

[root@dockerhub linuxkitdemo]# cat linuxkitone.yml

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: sysctl
    image: "mobylinux/sysctl:2cf2f9d5b4d314ba1bfc22b2fe931924af666d8c"
    net: host
    pid: host
    ipc: host
    capabilities:
     - CAP_SYS_ADMIN
    readonly: true
 
  - name: binfmt
    image: "linuxkit/binfmt:8881283ac627be1542811bd25c85e7782aebc692"
    binds:
     - /proc/sys/fs/binfmt_misc:/binfmt_misc
    readonly: true

  - name: dhcpcd
    image: "linuxkit/dhcpcd:48e249ebef6a521eed886b3bce032db69fbb4afa"
    binds:
     - /var:/var
     - /tmp/etc:/etc
    capabilities:
     - CAP_NET_ADMIN
     - CAP_NET_BIND_SERVICE
     - CAP_NET_RAW
    net: host
    command: ["/sbin/dhcpcd", "--nobackground", "-f", "/dhcpcd.conf", "-1"]

services:  # 如果希望有些应用是随着系统启动并一直运行的,可以在这配置;需要注意的是这些服务(也就是docker容器)的启动是没顺序的,如果有依赖关系需要另外处理。

  - name: rngd
    image: "mobylinux/rngd:3dad6dd43270fa632ac031e99d1947f20b22eec9"
    capabilities:
     - CAP_SYS_ADMIN
    oomScoreAdj: -800
    readonly: true
  - name: nginx  # 服务名称,自定义
    image: "nginx:alpine"  # docker镜像,自由选择
    capabilities:  # 赋予这个服务具有的能力
     - CAP_NET_BIND_SERVICE
     - CAP_CHOWN
     - CAP_SETUID
     - CAP_SETGID
     - CAP_DAC_OVERRIDE
    net: host  # 指定网络命名空间,host是共享主机的网络命名空间。

files:
  - path: etc/docker/daemon.json
    contents: ‘{"debug": true}‘

trust:  # 添加信任的镜像或组织
  image:
    - mobylinux/kernel

outputs:  
  - format: kernel+initrd
  - format: iso-bios
  - format: iso-efi

# 指定输出文件类型,名字默认与.yml文件名字一样,“moby build”创建镜像时也可以用“--name”指定镜像名称;可以指定的类型有:

  • kernel+initrd:不太清楚何时用这个格式;
  • iso-bios:包含传统BIOS的CD镜像;
  • iso-efi:包含EFI BIOS的CD镜像,适用于较新硬件;
  • gcp-img:压缩过的tar包格式,适用于Google Cloud Platform;
  • gcp-storage:与Google Cloud Platform 有关;
  • gcp:与Google Cloud Platform 有关;
  • qcow、qcow2:适用于Qemu的格式;
  • vhd:VHD镜像;
  • vmdk:适用于VmWare的VMDK镜像。

3. 制作系统

将上面linuxkit内容放到/opt/linuxkitdemo/linuxkitone.yml里,然后执行下面的命令,

cd /opt/linuxkitdemo/ &&  moby build linuxkitone.yml

执行过程比较慢,失败了就多执行几次,成功后会在/opt/linuxkitdemo/这个目录出现如下几个文件,

技术分享

出现这些文件是因为在linuxkitone.yml里配置了”outputs”类型。

4. 使用镜像进入系统

可以使用qemu工具,也可以将iso文件放到vmware或virtualbox里启动。

4.1 使用qemu创建虚拟机

/root/mobytool/src/github.com/linuxkit/linuxkit/scripts/qemu.sh /opt/linuxkitdemo/linuxkitone.iso

创建完毕后界面,

技术分享 

4.2 使用virtualbox创建虚拟机

使用生成的镜像,用vmware创建虚拟机巨慢;用virtualbox创建1分钟就启动了,进入后的界面跟上面类似,

技术分享 

因为在linuxkitone.yml里配置的“services”里包含nginx,所以进入系统后nginx服务就是启动状态。

在系统里输入“halt”退出。

 

本文出自 “10536390” 博客,请务必保留此出处http://10546390.blog.51cto.com/10536390/1918909

转载于:https://my.oschina.net/u/2306127/blog/1600524

相关文章:

  • RHEL 6.1 KVM虚拟机桥接物理机网络
  • Java IO 系统
  • 我的相亲日记_8(原创连载)
  • mysql api---从一个小例子开始mysql编程入门(4)
  • 2010 .NET面试题整理之基础篇[转]
  • [翻译]通信模式(Communication Patterns)
  • Java实现二分插入排序
  • Linux内核中实现生产者与消费者(避免无效唤醒)【转】
  • 春Phone计划 51cto技术沙龙成都站分享
  • 数据校验之Spring和Hibernate validate(二)
  • 解决棘手问题的法宝
  • ionic V3.10 开发踩坑集锦(三)
  • sizeToFit 就是整好容纳子Views。。控件大小取决子View
  • html5--视频播放器实例
  • Nginx 0.8.x + PHP 5.2.13 胜过Apache十倍的Web服务器(第6版)及问题
  • 【前端学习】-粗谈选择器
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • IDEA 插件开发入门教程
  • Java 23种设计模式 之单例模式 7种实现方式
  • java2019面试题北京
  • JavaScript 一些 DOM 的知识点
  • MySQL-事务管理(基础)
  • Python语法速览与机器学习开发环境搭建
  • SpiderData 2019年2月23日 DApp数据排行榜
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 分类模型——Logistics Regression
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 树莓派 - 使用须知
  • 延迟脚本的方式
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • k8s使用glusterfs实现动态持久化存储
  • ​一些不规范的GTID使用场景
  • #define 用法
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (二)WCF的Binding模型
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (十六)串口UART
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET Core 中插件式开发实现
  • .NET 依赖注入和配置系统
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .NET关于 跳过SSL中遇到的问题
  • .NET和.COM和.CN域名区别
  • @angular/cli项目构建--http(2)
  • @DataRedisTest测试redis从未如此丝滑
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • [ 蓝桥杯Web真题 ]-布局切换
  • [acwing周赛复盘] 第 94 场周赛20230311
  • [Angularjs]asp.net mvc+angularjs+web api单页应用