linuxkit这个工具可以理解为是用多个docker镜像来组成一个最小化、定制化的操作系统,定制化后的系统只有几十M,配合openstack等云端用会很爽。
制作系统需要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
命令执行完没有提示就是正常安装了。
这个文件里指定了要组合成什么样的系统,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”指定镜像名称;可以指定的类型有:
l kernel+initrd:不太清楚何时用这个格式;
l iso-bios:包含传统BIOS的CD镜像;
l iso-efi:包含EFI BIOS的CD镜像,适用于较新硬件;
l gcp-img:压缩过的tar包格式,适用于Google Cloud Platform;
l gcp-storage:与Google Cloud Platform 有关;
l gcp:与Google Cloud Platform 有关;
l qcow、qcow2:适用于Qemu的格式;
l vhd:VHD镜像;
l vmdk:适用于VmWare的VMDK镜像。
将上面linuxkit内容放到/opt/linuxkitdemo/linuxkitone.yml里,然后执行下面的命令,
cd /opt/linuxkitdemo/ && moby build linuxkitone.yml
执行过程比较慢,失败了就多执行几次,成功后会在/opt/linuxkitdemo/这个目录出现如下几个文件,
出现这些文件是因为在linuxkitone.yml里配置了”outputs”类型。
可以使用qemu工具,也可以将iso文件放到vmware或virtualbox里启动。
/root/mobytool/src/github.com/linuxkit/linuxkit/scripts/qemu.sh /opt/linuxkitdemo/linuxkitone.iso
创建完毕后界面,
使用生成的镜像,用vmware创建虚拟机巨慢;用virtualbox创建1分钟就启动了,进入后的界面跟上面类似,
因为在linuxkitone.yml里配置的“services”里包含nginx,所以进入系统后nginx服务就是启动状态。
在系统里输入“halt”退出。
本文出自 “10536390” 博客,请务必保留此出处http://10546390.blog.51cto.com/10536390/1918913
原文地址:http://10546390.blog.51cto.com/10536390/1918913