官网:https://github.com/linuxkit/linuxkit
在Ubuntu 16.04进行测试。
什么是LinuxKit
LinuxKit是用于构建最小化定制的,不可改变的linux分发的工具集。
安装基础依赖
如果已安装请跳过。
sudo apt-get install -yqq docker.io golang git
安装moby
mkdir ~/gopath
export GOPATH=~/gopath
export PATH=${PATH}:${GOPATH}/bin
go get -u github.com/linuxkit/linuxkit/src/cmd/moby
构建iso镜像
git clone https://github.com/linuxkit/linuxkit.git
mkdir ~/linuxkitiso/
cp linuxkit/linuxkit.yml ~/linuxkitiso
cd ~/linuxkitiso
sudo moby build linuxkit.yml
根据网络情况等待,提示输出了iso文件没有报错就可以了。
启动linuxkit前的准备
运行linuxkit依赖qemu-system,如果没有需要安装一下。
sudo apt-get install qemu-system
启动linuxkit镜像
这是一个默认的nginx镜像。
sudo moby run linuxkit
目前有些平台还不支持moby run,那么你也可以如下启动:
sudo ./scripts/qemu.sh linuxkit-initrd.img linuxkit-bzImage linuxkit-cmdline
或者:
./scripts/qemu.sh linuxkit.iso
查看一下操作系统类型
/ # cat /etc/*release
3.5.2
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.5.2
PRETTY_NAME="Alpine Linux v3.5"
HOME_URL="http://alpinelinux.org"
BUG_REPORT_URL="http://bugs.alpinelinux.org"
查看进程树
查看启动的容器
测试linuxkit
linuxkit是只读的,所以没办法安装curl,用wget测试。
/ # wget -qO- 127.0.0.1
linuxkit docker镜像
源码中在examples目录中提供了几个模板,其中docker.yml可以在系统中启动docker,可以一定程度上解决前面linuxkit只读的问题,自行尝试。
mkdir ~/dockeriso/
cp docker.yml ~/dockeriso/
cd ~/dockeriso
moby build docker.yml
moby run docker
注意一点,启动docker系统后,没有doker命令,为毛?因为docker本身就是容器,所以要进入容器才可以使用。
/ # runc exec -t docker sh
/ # docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
槽点:linuxkit和内部容器的prompt行居然一样,啥玩?
退出linuxkit
exit
logout
quit
不行,不知道怎么退出,官方文档没找到。暴力拆卸:
pkill -9 -f qemu-system-x86_64
定制linuxkit镜像
复制 linuxkit.yml 改名为mylinuxkit.yml,编辑后像前面一样执行构建和启动。
moby build mylinuxkit
moby run mylinuxkit
配置项
linuxkit实例中的几个主要配置项如下:
kernel
指定docker镜像的内核,它包含一个内核和一个文件系统的tar包。示例的内核构建在`/kernel`目录中。
init
是一个docker容器的init进程的基础。它将在容器中解压,包含"init"、"containerd"、"runc"及其他几个工具。示例中构建在`pkg/init/`目录中。
onboot
是系统级的容器,按照配置顺序依次运行,执行完后立即结束。如:ntpd,dhcpd
services
是系统级的服务,他们通常在系统启动后适中运行。如:nginx
files
附加到系统中的文件集合。
outputs
输出的镜像文件。
更多配置细节参见:https://github.com/linuxkit/linuxkit/blob/master/docs/yaml.md