您的位置:首页 > 运维架构 > Docker

docker又一利器:linuxkit详细讲解

2017-04-24 17:07 519 查看
linuxkit这个工具可以理解为是用多个docker镜像来组成一个最小化、定制化的操作系统,定制化后的系统只有几十M,配合openstack等云端用会很爽。1. 安装moby12. 创建linuxkit文件13. 制作系统34. 使用镜像进入系统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.ymlkernel: 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:eabc5a6e59f05aa91529d80e9a595b85b046f935onboot: # 系统服务 - 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/kerneloutputs: - 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”退出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  openstack docker linuxkit