前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LinuxKit+Moby 初体验

LinuxKit+Moby 初体验

作者头像
pollyduan
发布2019-11-04 13:35:41
1.2K0
发布2019-11-04 13:35:41
举报

官网:https://github.com/linuxkit/linuxkit

在Ubuntu 16.04进行测试。

什么是LinuxKit

LinuxKit是用于构建最小化定制的,不可改变的linux分发的工具集。

安装基础依赖

如果已安装请跳过。

代码语言:javascript
复制
sudo apt-get install -yqq docker.io golang git

安装moby

代码语言:javascript
复制
mkdir ~/gopath
export GOPATH=~/gopath
export PATH=${PATH}:${GOPATH}/bin
go get -u github.com/linuxkit/linuxkit/src/cmd/moby

构建iso镜像

代码语言:javascript
复制
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,如果没有需要安装一下。

代码语言:javascript
复制
sudo apt-get install qemu-system

启动linuxkit镜像

这是一个默认的nginx镜像。

代码语言:javascript
复制
sudo moby run linuxkit

目前有些平台还不支持moby run,那么你也可以如下启动:

代码语言:javascript
复制
sudo ./scripts/qemu.sh linuxkit-initrd.img linuxkit-bzImage linuxkit-cmdline

或者:

代码语言:javascript
复制
./scripts/qemu.sh linuxkit.iso

查看一下操作系统类型

代码语言:javascript
复制
/ # 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"

查看进程树

代码语言:javascript
复制
/ # pstree
init-+-containerd---containerd-shim---nginx---nginx
     |-containers---ctr
     |-sh---pstree
     `-sh

查看启动的容器

代码语言:javascript
复制
/ # runc list
ID          PID         STATUS      BUNDLE                        CREATED                          OWNER
nginx       466         running     /run/containerd/linux/nginx   2017-04-20T03:33:07.638862448Z   root

测试linuxkit

linuxkit是只读的,所以没办法安装curl,用wget测试。

代码语言:javascript
复制
/ # wget -qO- 127.0.0.1
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

linuxkit docker镜像

源码中在examples目录中提供了几个模板,其中docker.yml可以在系统中启动docker,可以一定程度上解决前面linuxkit只读的问题,自行尝试。

代码语言:javascript
复制
mkdir ~/dockeriso/
cp docker.yml ~/dockeriso/
cd ~/dockeriso
moby build docker.yml
moby run docker

注意一点,启动docker系统后,没有doker命令,为毛?因为docker本身就是容器,所以要进入容器才可以使用。

代码语言:javascript
复制
/ # runc exec -t docker sh
/ # docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

槽点:linuxkit和内部容器的prompt行居然一样,啥玩?

退出linuxkit

代码语言:javascript
复制
exit
logout
quit

尼玛,不行,不知道怎么退出,官方文档没找到。暴力拆卸:

代码语言:javascript
复制
pkill -9 -f qemu-system-x86_64

定制linuxkit镜像

复制 linuxkit.yml 改名为mylinuxkit.yml,编辑后像前面一样执行构建和启动。

代码语言:javascript
复制
moby build mylinuxkit
moby run mylinuxkit

配置项

linuxkit实例中的几个主要配置项如下:

代码语言:javascript
复制
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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是LinuxKit
  • 安装基础依赖
  • 安装moby
  • 构建iso镜像
  • 启动linuxkit前的准备
  • 启动linuxkit镜像
    • 查看一下操作系统类型
      • 查看进程树
        • 查看启动的容器
          • 测试linuxkit
          • linuxkit docker镜像
          • 退出linuxkit
          • 定制linuxkit镜像
            • 配置项
            相关产品与服务
            容器镜像服务
            容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档