首页 > 代码库 > docker又一利器:linuxkit详细讲解

docker又一利器:linuxkit详细讲解

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

1. 安装moby1

2. 创建linuxkit文件1

3. 制作系统3

4. 使用镜像进入系统3

    4.1 使用qemu创建虚拟机3

    4.2 使用virtualbox创建虚拟机4

 

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:包含传统BIOSCD镜像;

iso-efi:包含EFI BIOSCD镜像,适用于较新硬件;

gcp-img:压缩过的tar包格式,适用于Google Cloud Platform

gcp-storage:与Google Cloud Platform 有关;

gcp:与Google Cloud Platform 有关;

qcow、qcow2:适用于Qemu的格式;

vhd:VHD镜像;

vmdk:适用于VmWareVMDK镜像。

3. 制作系统

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

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

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

技术分享

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

4. 使用镜像进入系统

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

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/1918913

docker又一利器:linuxkit详细讲解