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这个顺序是不能变的,见下例:

[[email protected] 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镜像。

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”退出。

时间: 2024-12-28 02:21:11

docker又一利器:linuxkit详细讲解的相关文章

[iOS]数据库第三方框架FMDB详细讲解

[iOS]数据库第三方框架FMDB详细讲解 初识FMDB iOS中原生的SQLite API在进行数据存储的时候,需要使用C语言中的函数,操作比较麻烦.于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.PlausibleDatabase.sqlitepersistentobjects等. FMDB是一款简洁.易用的封装库.因此,在这里推荐使用第三方框架FMDB,它是对libsqlite3框架的封装,用起来的步骤与SQLite使用类似,并且它对于多线程的并发操作进行了处理,所以

iOS KVC详细讲解

iOS KVC详细讲解 什么是KVC? KVC即NSKeyValueCoding,就是键-值编码的意思.一个非正式的 Protocol,是一种间接访问对象的属性使用字符串来标识属性,而不是通过调用存取方法,直接或通过实例变量访问的机制. 以上就是KVC的理论,面试时,如实回答就可以啦! 使用KVC说明 KVC间接修改对象属性时,会自动判断对象属性的类型,完成相应的转换. KVC按键值路径取值时,如果对象不包含指定的键值,那么就会自动进入对象内部,查找对象属性. KVC可以嵌套按照键值路径取值.

详细讲解Android的网络通信(HttpUrlConnection和HttpClient)

前言,Android的网络通信的方式有两种:使用Socket或者HTTP,今天这一篇我们详细讲解使用HTTP实现的网络通信,HTTP又包括两种方式编程方式: (1)HttpUrlConnection: (2)HttpClient: 好了,我们直接进行讲解,当然之前也会有一部分有关Android网络通信的其他知识,我们也应该了解. 一.获取网络状态的方法 (1)MainActivity.java中的关键代码 1 2 3 4 5 6 7 8 //网络管理类,可以判断是否能上网,以及网络类型     

Android自定义相机超详细讲解

Android自定义相机超详细讲解 转载请标明出处: http://blog.csdn.net/vinicolor/article/details/49642861: 由于网上关于Android自定义相机的文章写得不是太详细,Google官方的文档又说得不太容易理解,所以今天我来详细讲解一下Android自定义相机. 这篇文章主要写给一些刚刚接触Android的那些看官方API困难以及不太了解Android机制的同学们,所以熟练开发者可以绕道了. 最近在使用Camera类的时候发现居然被弃用了,

Spark SQL操作详细讲解

一. Spark SQL和SchemaRDD 关于Spark SQL的前生就不再多说了,我们只关注它的操作.但是,首先要搞明白一个问题,那就是究竟什么是SchemaRDD呢?从Spark的Scala API可以知道org.apache.spark.sql.SchemaRDD和class SchemaRDD extends RDD[Row] with SchemaRDDLike,我们可以看到类SchemaRDD继承自抽象类RDD.官方文档的定义是"An RDD of Row objects tha

二进制编码-详细讲解

负数: 原码就是原来的表示方法 反码是除符号位(最高位)外取反 补码=反码+1 以前学习二进制编码时,老师讲了一堆堆的什么原码啊反码啊补码啊xxxx转换啊,还有负数的表示方式啊 总是记不零清,终于从网上找到了一种比较好的讲解方式,保存再share一下,不过为了系统化讲解,又找来了一些编码的基础知识,如果只想看负数编码记忆法,请跳转到 1.如果你不知道二进制怎么编码,请继续,否则请跳到2 1字节 = 8位,所以它能表示的最大数当然是8位都是1(既然2进制的数只能是0或1,如果是我们常见的10进制,

JSP的静态包含和动态包含详细讲解 (一)

JSP包含有两种方式:静态包含和动态包含.下面我们将通过JSP运行的特点(转换为servlet再执行)来比较二者的区别. 一.静态包含  <%@include file="url"%> 我们先写一个正常的小项目,来看下静态包含是如何运行的. 测试一: top.jsp页面: <%@ page language="java" contentType="text/html; charset=UTF-8"     pageEncodin

(三)Jquery Mobile按钮详细讲解

Jquery Mobile按钮详细讲解 一.JM按钮说明 按钮如下图所示           1.HTML5中的button      效果:      2. JM中的普通button              此中显示和HTML5是系统的.      3.JM中button内联样式 data-inline      说到内联样式和block样式,大家估计都不知道怎么回事,内联inline是说,外面的框会根据内部的文字来改变,block则正好相反,上面展示的按钮占据了整个一行的效果,现在我们需要

PE格式详细讲解2 - 系统篇02

原作者:小甲鱼 (注:最左边是文件头的偏移量.) IMAGE_DOS_HEADER STRUCT { +0h WORD e_magic // Magic DOS signature MZ(4Dh 5Ah) DOS可执行文件标记 +2h WORD e_cblp // Bytes on last page of file +4h WORD e_cp // Pages in file +6h WORD e_crlc // Relocations +8h WORD e_cparhdr // Size o