Linuxkit 使用指南

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值