如何在Docker上运行Ubuntu Core

jopen 4年前

Snappy是一个极度精简的Ubuntu镜像,因为它可以快速部署在云端,并且提供了简便的基础功能组件更新,所以很多人用来在云端上构建(微)系统架构。很可惜Snappy并不包含在Docker的官方镜像中,本文通过一个实例演示了如何在Docker中运行Ubuntu Core镜像,并构建自己的Snappy容器。文章短小精悍,希望能给使用Snappy系统并希望用Docker来构建系统架构的人一些有益的借鉴。

有很多人已经听说过 Ubuntu Core的大名,没听过也不要紧, Ubuntu Core 是一个极度精简的ubuntu版本。它通过Snappy(一个包管理器)来运行一些基本服务并提供主要的功能组件更新。Ubuntu Core 提供轻量级的基本运行时系统,给使用者以快速部署和方便的持续更新功能。并且在它上面还使用了 security model

上述这些令人激动的特性使得Snappy可以快速部署在云平台上。与此同时,人们已经开始考虑使用它在云端上来构建他们自己的(微)服务架构。就在几周前,一个用户在 Ask Ubuntu 上提问题:Can I run Snappy Ubuntu Core as a guest inside Docker? 。问题在于Ubuntu Core并不包含在Docker提供的官方镜像库中,所以我们自己手动创建镜像了。下面是一个例子:

创建 Docker 镜像

步骤一: 获取最新的Ubuntu Core镜像

截止发稿时为止,Ubuntu Core 的版本是 alpha 3 ,下载地址为 :
$ wget http://cdimage.ubuntu.com/ubuntu-core/releases/alpha-3/ubuntu-core-WEBDM-alpha-03_amd64-generic.img.xz

(如果你访问这个网址 cdimage.ubuntu.com,可以获取带有hash签名的版本)

下载的镜像是通过XZ方式压缩的,所以要通过下面的命令解压:
$ unxz ubuntu-core-WEBDM-alpha-03_amd64-generic.img.xz

步骤二: 使用qemu-nbd方式连接镜像

解压后的文件不是普通的文件格式,上一个版本(Alpha 2)镜像是QCOW2文件格式,为了能够使用这个镜像内容,我们有几个解决方案。这里我介绍其中的一种,既可以使用文件系统又可以使用QCOW2镜像的方式。下面的小技巧包含使用qemu-nbd(一个基于 qemu-utils)的工具包):
# qemu-nbd -rc /dev/nbd0 ubuntu-core-WEBDM-alpha-03_amd64-generic.img

运行上面的命令将会创建一个名为/dev/nbd0的虚拟设备,并且创建 名为/dev/nbd0p1、/dev/nbd0p2,诸如此类的虚拟分区,可以通过 使用fdisk -l /dev/nbd0命令,查看关于QCOW2镜像相关的信息。

步骤三: 挂载文件系统

例如我们感兴趣的是/dev/nbd0p3,我们通过下面的命令来挂载分区:
# mkdir nbd0p3  # mount -r /dev/nbd0p3 nbd0p3

步骤四:创建一个基于docker的基础镜像

建议阅读 Docker官方手册,创建一个简单的Docker基础镜像。
tar -C nbd0p3 -c . | docker import - ubuntu-core alpha-3

通过运行docker images命令,我们可以查看我们刚刚创建的Docker镜像。
# docker images  REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE  ubuntu-core         alpha-3             f6df3c0e2d74        5 seconds ago       543.5 MB

通过这个命令docker run ubuntu-core:alpha-3 Snappy,让我们验证一下Snappy是否可以访问:
# docker run ubuntu-core:alpha-3 Snappy  Usage:Snappy [-h] [-v]           {info,versions,search,update-versions,update,rollback,install,uninstall,tags,config,build,booted,chroot,framework,fake-version,nap}           ...

如果看到上面的信息,那么恭喜你,已经成功将Ubuntu Core融入到Docker镜像中,第一次运行了Snappy容器。

安装软件

废话不多说,下面演示如何在docker中安装并运行xkcd-webserverSnappy包管理器。
# docker run -p 8000:80 ubuntu-core:alpha-3 /bin/sh -c 'Snappy install xkcd-webserver 

原文链接:Running Ubuntu Snappy inside Docker(翻译:隋鑫 审校:魏小红)来自: