10分钟内借助LinuxKit引导OpenSSH服务器李碧华小说

  我们在本文中将逐步介绍使用Docker的LinuxKit,构建、运行和使用连接至内置OpenSSH的可引导Linux系统映像。就本文中的例子而言,你需要Docker for Mac,但LinuxKit可以创建在许多类型的系统上引导的映像。

  10分钟内借助LinuxKit引导OpenSSH服务器李碧华小说

  Dockercon大会期间,在奥斯汀的一家星巴克首次运行LinuxKit。

  LinuxKit是个激动人心的新项目,它从Docker的内部派生出来。它旨在构建可引导的Linux系统,而这种系统可以在裸机、云端或Docker容器中运行,也可以通过HyperKit(用于Docker for Mac的虚拟机管理程序)来运行。一个很小的init进程启动系统,然后其余一切经由containerd,通过容器来运行。

  containerd是Docker的低级容器技术。

10分钟内借助LinuxKit引导OpenSSH服务器李碧华小说

  只需10分钟即可入手

从https://golang.org/dl/安装和配置go。

安装并启动Docker for Mac,选择边缘版本(我用的是17.05.0-ce-rc1-mac8)。

  我想为大家演示如何在大约10分钟内构建和运行一台SSHD服务器。我们将使用由罗尔夫·纽格鲍尔(Rolf Neugebauer)在Dockercon的全体大会上演示的一个例子。

  开始入手

  先获取LinuxKit的代码,然后编译构建代码。

  # git clone https://github.com/linuxkit/linuxkit

  现在进入到目录,开始执行make:

  # cd $GOPATH/src/github.com/linuxkit/linuxkit

  # make

  你会看到类似这样的输出结果:

  tar cf - vendor src/initrd src/pad4 -C src/cmd/moby . | docker run

  --rm --net=none --log-driver=none -i -e GOOS=darwin -e GOARCH=amd64

  linuxkit/go-

  compile:4513068d9a7e919e4ec42e2d7ee879ff5b95b7f5@sha256:bdfadbe3e4e

  c699ca45b67453662321ec270f2d1a1dbdbf09625776d3ebd68c5 --package

  github.com/linuxkit/linuxkit --ldflags "-X

  main.GitCommit=90d459a82eac9111a08795d6e2a89f32c270e41e -X

  main.Version="0.0" " -o bin/moby > tmp_moby_bin.tar

  gofmt...

  govet...

  golint...

  ineffassign...

  go build...

  tar xf tmp_moby_bin.tar > bin/moby

  rm tmp_moby_bin.tar

  touch bin/moby

  tar cf - vendor -C src/cmd/infrakit-instance-hyperkit . | docker

  run --rm --net=none --log-driver=none -i -e GOOS=darwin –e

  GOARCH=amd64 linuxkit/go-

  compile:4513068d9a7e919e4ec42e2d7ee879ff5b95b7f5@sha256:bdfadbe3e4e

  c699ca45b67453662321ec270f2d1a1dbdbf09625776d3ebd68c5 --package

  github.com/linuxkit/linuxkit -o bin/infrakit-instance-hyperkit >

  tmp_infrakit_instance_hyperkit_bin.tar

  gofmt...

  govet...

  golint...

  ineffassign...

  go build...

  tar xf tmp_infrakit_instance_hyperkit_bin.tar > bin/infrakit-

  instance-hyperkit

  rm tmp_infrakit_instance_hyperkit_bin.tar

  touch bin/infrakit-instance-hyperkit

  这构建了两个新的CLI,名为moby和linuxkit,它们可以用来构建和启动可引导的系统。

  安装新的moby和linuxkit CLI:

  sudo cp ./bin/moby /usr/local/bin

  sudo cp ./bin/linuxkit /usr/local/bin

  构建SSHD例子

  我使用一些实用脚本组建了一个sshdkit Github代码库(https://github.com/alexellis/sshdkit),我们将把该代码库复制到当前文件夹,文章后面要用到它。

  # git clone https://github.com/alexellis/sshdkit

  # cd sshdkit

  把你的公共SSH密钥放入到YAML文件中:

  # cp sshd.example.yml sshd.yml

  首先编辑sshd.yml示例文件,把你的ssh密钥放入到显示root/.ssh/authorized_keys的slot中:

  - path: root/.ssh/authorized_keys

  contents: "ssh-rsa ...."

  ssh密钥将放在$HOME/.ssh/id_rsa.pub中,如果没有该文件,那么输入ssh-keygen,对于所有问题一律按回车键。

  现在构建一个可引导的系统:

  # moby build ./sshd.yml

  你会看到moby CLI工具会将各个映像下拉出来,然后构建一个最终的软件包(包括最近的Linux内核)。

  Extract kernel image: linuxkit/kernel:4.9.x

  Add init containers:

  Process init image: linuxkit/init:63eed9ca7a09d2ce4c0c5e7238ac005fa44f564b

  Process init image: linuxkit/runc:b0fb122e10dbb7e4e45115177a61a3f8d68c19a9

  Process init image: linuxkit/containerd:18eaf72f3f4f9a9f29ca1951f66df701f873060b

  Process init image: linuxkit/ca-certificates:eabc5a6e59f05aa91529d80e9a595b85b046f935

  Add onboot containers:

  Create OCI config for linuxkit/sysctl:2cf2f9d5b4d314ba1bfc22b2fe931924af666d8c

  Add service containers:

  Create OCI config for linuxkit/rngd:3dad6dd43270fa632ac031e99d1947f20b22eec9

  Create OCI config for linuxkit/dhcpcd:48e249ebef6a521eed886b3bce032db69fbb4afa

  Create OCI config for linuxkit/sshd:e108d208adf692c8a0954f602743e0eec445364e

  Add files:

  root/.ssh/authorized_keys

  Create outputs:

  sshd-bzImage sshd-initrd.img sshd-cmdline

  sshd.iso

  sshd-efi.iso

  你会看到当前文件夹中已构建了几个系统映像:

  Create outputs:

  sshd-bzImage sshd-initrd.img sshd-cmdline

  sshd.iso

  sshd-efi.iso

  引导系统

  现在只管输入下列内容,看看一个完整的Linux系统在终端中引导。一旦准备就绪,你将连接至BusyBox外壳,可以输入命令。

  这会利用HyperKit项目作为虚拟机管理程序。若要关闭虚拟机,如果你已准备好,只需输入halt。

  # linuxkit run -ip 192.168.65.100 sshd

  Welcome to LinuxKit

  / # INFO[0000] starting containerd boot... module=containerd

  ...

  INFO[0000] containerd successfully booted in 0.022888s module=containerd

  - 000-sysctl

  - dhcpcd

  - rngd

  - sshd

  / #

  我们还分配了一个静态的IP地址,那样以后就能访问它。

  要访问我们在HyperKit中启动的SSHD虚拟机,最容易的方法就是运行内置SSH客户软件和SSH密钥的Docker容器。

  使用随附的实用脚本来构建该Docker映像:

  # ./build.sh

  现在运行Docker容器,这其实是Alpine Linux映像,已添加了SSHD,并已挂载了你的SSH密钥:

  # ./run-client.sh

  / #

  通过该Docker容器,我们就可以使用ssh客户软件连入至SSH虚拟机:

  / # ssh root@192.168.65.100

  Welcome to LinuxKit

  moby-025000000002:~# cat /etc/os-release

  NAME="Alpine Linux"

  ID=alpine

  VERSION_ID=3.5.0

  PRETTY_NAME="Alpine Linux v3.5"

  HOME_URL="http://alpinelinux.org"

  BUG_REPORT_URL="http://bugs.alpinelinux.org"

  moby-025000000002:~# uname -a

  Linux moby-025000000002 4.9.22-moby #1 SMP Fri Apr 14 12:32:33 UTC 2017 x86_64 Linux

  正如你所见,该系统运行containerd和runc:

  moby-025000000002:~# ps |grep containerd

  356 root 0:00 /usr/bin/containerd

  ...

  moby-025000000002:~# ps |grep runc

  392 root 0:00 /usr/bin/runc run --bundle

  /containers/services/dhcpcd --pid-file /run/dhcpcd.pid dhcpcd

  408 root 0:00 /usr/bin/runc run –bundle

  /containers/services/rngd --pid-file /run/rngd.pid rngd

  420 root 0:00 /usr/bin/runc run --bundle

  /containers/services/sshd --pid-file /run/sshd.pid sshd

  引导多个SSDH虚拟机:

  你可以引导额外的系统,只需要为它们分配单独的IP地址。这是boot.sh文件(linuxkit run -ip 192.168.65.100 sshd)的内容:

  用独特的IP地址来引导:

  # linuxkit run -ip 192.168.65.101 sshd

  在我的台2016入门级Macbook 12英寸电脑上,这个过程只有约4至5秒,感觉相当快。

  现在,你可以连接至那些SSHD服务器中的一台,也可以同时连接两台。

  / # ssh root@192.168.65.100 uptime

  10:45:39 up 29 min, load average: 0.00, 0.02, 0.00

  / # ssh root@192.168.65.101 uptime

  10:45:40 up 1 min, load average: 0.00, 0.00, 0.00

  / #

  结束语

  这个很简单的例子表明了如何借助一项实用的系统服务构建可引导的映像,然后连接至它。让人觉得这个项目带来了无尽的机会。我很想看看别人会如何灵活地使用这个工具。

  如果你是谷歌云用户,可以在谷歌云端同样轻松地引导映像。PacketHost甚至支持引导我们就在裸机服务器上构建的映像。

  ·Raspberry Pi怎么样?

  我认为,从概念上来说,LinuxKit最终有望为32位的Raspberry Pi架构构建映像,但这需要对用来构建系统的内核和映像进行一番调整和移植。眼下,想开始入手Raspberry Pi,最容易的方法就是借助Raspbian映像和我撰写的教程系列。

  RancherOS是一种操作系统,使用Docker作为起点,通过Docker容器来运行所有系统服务。LinuxKit以一种非常相似的方式来运行,但是直接使用containerd,而不是使用Docker。

  相关阅读:

  Docker 改名 Moby 目的 :商业化

  Docker 重磅发布:LinuxKit 和 Moby 开源项目

相关推荐
新闻聚焦
猜你喜欢
热门推荐
  • 网红边玩边挣钱 将催生新商业模式

      2015年中国网红排行榜 网红,就是网络红人的简称。网红不仅仅是当下最热词汇,它还是一个时代。在这个时代里,有网红模......

    04-05    来源:京华时报

    分享
  • 无人驾驶车离我们有多远 百度提出5年内

      车辆自动判断路况 无人驾驶车何时才能驶入百姓生活? 3月30日,百度高级副总裁、百度自动驾驶事业部总经理王劲提出了一......

    04-05    来源:中国青年报·中青在线

    分享
  • 瓜分网红经济千亿蛋糕 哪些A股公司抢得

      网红 papi酱获1200万元投资受热议余温犹存,近日又有自媒体曝出坐拥百亿资产的期货大佬葛卫东不仅看网红女主播视频,还与......

    04-05    来源:每日经济新闻

    分享
返回列表
 
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。