SmartOS依赖images。images是包含在创建新zone或虚拟机时使用的磁盘或文件系统映像和元数据的模板。

images使用imgadm工具进行管理。 使用此工具,您可以:

查看和下载在公共映像服务器上可用的映像
     安装本地images或者import远程images
     列出,显示或打印有关images的详细信息
     销毁images

这里我们将讨论如何查找可用的images并开始使用它们。 然后我们将看看images是什么,以及如何创建自己的images。 最后,我们来看一下如何创建自己的私有image server。

Basics

Viewing & Downloading Public Images(查看和下载公开的images)

**注意,这些信息最近已经改变了,为了清楚和正确,这一段可能被编辑**

默认images服务器是https://images.joyent.com。 您可以使用imgadm sources -a <URL>命令来编辑源列表,如imgadm(1m)中所述。 使用命令imgadm更新,将导致本地缓存(/var/db/imgadm/imgcache.json)使用sources.list中找到的服务器上的可用映像进行更新。 一旦您的本地缓存更新,您可以列出所有可用的images使用imgadm avail:

# imgadm sources
https://images.joyent.com # imgadm avail | head -n 1 ; imgadm avail | tail
UUID NAME VERSION OS PUBLISHED
380539c4-3198-11e5-82c8-bf9eeee6a395 debian-7 20150724 linux 2015-07-24T00:09:14Z
ab3db4c0-31ac-11e5-8856-43e56a8e4285 centos-6 20150724 linux 2015-07-24T02:35:38Z
7459f182-31af-11e5-b23a-eb0fd8799c77 freebsd-10 20150724 bsd 2015-07-24T02:55:34Z
ead4ff68-320a-11e5-bd54-3749d04712df ubuntu-14.04 20150724 linux 2015-07-24T13:50:17Z
0764d78e-3472-11e5-8949-4f31abea4e05 minimal-32 15.2.0 smartos 2015-07-27T15:13:25Z
8ec06130-3472-11e5-bf91-ebc747dbae7e minimal-64 15.2.0 smartos 2015-07-27T15:17:13Z
1e5d6e28-3473-11e5-9e94-1fd77993b49f minimal-multiarch 15.2.0 smartos 2015-07-27T15:21:14Z
2bd52afe-3474-11e5-b07d-c7fb14b2c9e8 base-32 15.2.0 smartos 2015-07-27T15:28:46Z
5c7d0d24-3475-11e5-8e67-27953a8b237e base-64 15.2.0 smartos 2015-07-27T15:37:17Z
9caff6c6-3476-11e5-9951-bf98c6cb8636 base-multiarch 15.2.0 smartos 2015-07-27T15:46:14Z # imgadm avail | grep base-64 | tail
c02a2044-c1bd-11e4-bd8c-dfc1db8b0182 base-64-lts 14.4.0 smartos 2015-03-03T15:55:44Z
24648664-e50c-11e4-be23-0349d0a5f3cf base-64-lts 14.4.1 smartos 2015-04-17T14:15:04Z
4166f6d6-ea5f-11e4-addd-8351b159d9b6 base-64 15.1.0 smartos 2015-04-24T08:52:36Z
b67492c2-055c-11e5-85d8-8b039ac981ec base-64-lts 14.4.2 smartos 2015-05-28T17:12:26Z
0edf00aa-0562-11e5-b92f-879647d45790 base-64 15.1.1 smartos 2015-05-28T17:50:41Z
5c7d0d24-3475-11e5-8e67-27953a8b237e base-64 15.2.0 smartos 2015-07-27T15:37:17Z 要下载这些images之一,如“base-64”,我们将使用图像UUID导入它:
# imgadm import 5c7d0d24-3475-11e5-8e67-27953a8b237e
Importing 5c7d0d24-3475-11e5-8e67-27953a8b237e (base-64@15.2.0) from "https://images.joyent.com"
Gather image 5c7d0d24-3475-11e5-8e67-27953a8b237e ancestry
Must download and install 1 image (127.2 MiB)
Imported image 5c7d0d24-3475-11e5-8e67-27953a8b237e (base-64@15.2.0) # imgadm list
UUID NAME VERSION OS PUBLISHED
5c7d0d24-3475-11e5-8e67-27953a8b237e base-64 15.2.0 smartos 2015-07-27T15:37:17Z

Advanced Topics

What exactly is an Image?

图像是创建新VM所需的数据和元数据。 “数据”是一个或多个压缩的ZFS数据集,将被克隆以创建新的VM。 “元数据”以JSON的形式描述了数据,并概述了使用它的机器的规范。
以下是两个文件的示例:

benr@magnolia:~/datasets$ ls -lh
total 41M
-rw-rw-r-- 1 benr benr 996 Sep 10 14:54 smartos-1.3.12.dsmanifest
-rw-rw-r-- 1 benr benr 41M Jun 10 2011 smartos-1.3.12.zfs.bz2

Image Manifests(image 清晰度)

以下是从公共存储库https://datasets.joyent.com/datasets/(为了清楚起见而添加重新排列和换行符)的示例清单。
您会注意到,当创建/更新/发布图像时,我们有属性可以识别图像(UUID,名称,版本,描述等),作者(creator_name,creator_uuid等),然后是一个标识ZFS的数组 数据集文件或文件,最后列出一些要求的数组。

  {
"uuid": "febaa412-6417-11e0-bc56-535d219f2590",
"name": "smartos",
"version": "1.3.12",
"description": "Base template to build other templates on", "os": "smartos",
"type": "zone-dataset",
"platform_type": "smartos",
"cloud_name": "sdc",
"urn": "sdc:sdc:smartos:1.3.12", "creator_name": "sdc",
"creator_uuid": "352971aa-31ba-496c-9ade-a379feaecd52",
"vendor_uuid": "352971aa-31ba-496c-9ade-a379feaecd52", "created_at": "2011-04-11T08:45Z",
"updated_at": "2011-04-11T08:45Z",
"published_at": "2011-04-11T08:45Z", "files": [
{
"path": "smartos-1.3.12.zfs.bz2",
"sha1": "246c9ae158dc8f204643afdd6bd4d3c4aa35e733",
"size": 42016482,
"url": "https://datasets.joyent.com/datasets/febaa412-6417-11e0-bc56-535d219f2590/smartos-1.3.12.zfs.bz2"
}
],
"requirements": {
"networks": [
{
"name": "net0",
"description": "public"
}
]
}
}
创建自己的清单时,需要以下属性:

    uuid:image的UUID(使用在线UUID生成器)
    名称:image的名称(例如:“centos-6”)
    版本:image的版本(例如:“1.0.0”)
    描述:image的简短描述
    published_at:在映像服务器上发布日期的时间戳(不需要准确);以正确格式输出当前时间,使用命令:date +“%Y-%m-%dT%T.000Z”
    creator_uuid:image作者的UUID(如果您没有使用在线UUID生成器)
    creator_name:image作者的名称
    urn:用于以“cloud_name:creator_name:name:version”的形式描述image的特殊字符串;对于“cloud_name”,如果您不确定,我建议“smartos”,创建者的名字通常是您的组织。字符串不应包含空格。 (例如:“smartos:cuddletech:plan9:1.0.0”)
    类型:image的类型,KVM的“zvol”或zone的“zone-dataset”
    os:这个image的操作系统,需要。在撰写本文时,必须是smartos,linux,windows,bsd,illumos等。
    文件:一个或多个文件对象的数组,每个文件对象包含以下属性:
        路径:image数据文件的本地文件路径(压缩zfs转储)
        sha1:image数据文件的SHA1;获取SHA1哈希使用:digest -a sha1 <file>
        size:image数据文件的文件大小;获取使用:ls -l <​​file> 要求部分是推荐但不是当前需要,也不是强制执行。

Creating a Custom Zone Image

创建zone image的过程如下所示:
     根据需要创建和自定义zone
     清除日志等,并运行sm准备image以使机器image-ready(请记住阅读警告消息!)。
     暂停zone:vmadm stop <UUID>
     快照zone数据集:zfs快照区域/ <UUID> @image
     转储和压缩数据集:zfs send zones / <UUID> @image | gzip> image_name.zfs.gz
     创建如上所述的清单

您现在可以通过imgadm在本地导入映像或将其传输到映像服务器。

数据集压缩
数据集必须被压缩。 您可以使用Xz,GZip或BZip2。 BZip2将提供比GZip更小的文件,但GZip压缩更快。 特别是对于大于10GB的数据集,强烈推荐使用GZip。

如果您希望使用image的所有CN都是20150402或更高版本,则Xz是一个选项。 XZ将提供更好的压缩,BZip2和通常接近GZip的速度。 Xz在release-20150402之前不可用。

Creating a Custom KVM Image

创建KVM image的过程如下所示:

根据需要创建和自定义KVM实例
     清除并准备实例
     停止VM:vmadm stop <UUID>
     快照disk0 ZVol:zfs snapshot zones/<UUID>-disk0@image
     转储和压缩数据集:zfs send zones / <UUID> -disk0 @ image | gzip> image_name.zvol.gz

您现在可以通过imgadm在本地导入映像或将其传输到映像服务器。

Importing Images Locally

通常,映像从映像服务器下载,但是也可以使用以下方式导入映像:imgadm -m <manifest> -f <file>

过程如下所示:

# imgadm install -m smartos-1.3.12.dsmanifest -f smartos-1.3.12.zfs.bz2
febaa412-6417-11e0-bc56-535d219f2590 doesnt exist. continuing with install
febaa412-6417-11e0-bc56-535d219f2590 successfully installed
image febaa412-6417-11e0-bc56-535d219f2590 successfully imported

Serving Images

默认社区映像(以前的数据集)服务器是datasets.joyent.com。 您可以使用各种各样的image来使用和构建新的image。 但是,如果您想分发自己的image供他人使用? 这就是我们在这里讨论的。

How Image Server Work

image的功能非常简单。 当image服务器被添加到客户端sources.list并且它们进行imgadm更新时,该工具将针对源URL执行HTTP GET操作。 此get将返回一个JSON对象数组,这是每个可用映像的dsmanifest文件。 这是一个例子:

$ curl -ks https://datasets.joyent.com/datasets/
[
{
"name": "mongodb",
"version": "1.3.2",
"type": "zone-dataset",
"description": "64-bit MongoDB 2.0 SmartMachine Database Appliance with Quickbackup and Replica Sets",
"published_at": "2012-08-31T16:04:51.970Z",
"os": "smartos",
"uuid": "6bf31ce2-f384-11e1-a338-e39c2fe4ab59",
"creator_uuid": "352971aa-31ba-496c-9ade-a379feaecd52",
"vendor_uuid": "352971aa-31ba-496c-9ade-a379feaecd52",
"creator_name": "sdc",
"platform_type": "smartos",
"cloud_name": "sdc",
"urn": "sdc:sdc:mongodb:1.3.2",
"created_at": "2012-08-31T16:04:51.970Z",
"updated_at": "2012-08-31T16:04:51.970Z",
"files": [
{
"path": "mongodb-1.3.2.zfs.bz2",
"sha1": "dff4787bcc8cd115a2307d1e833a49d23a1ad9b0",
"size": 115202324,
"url": "https://datasets.joyent.com/datasets/6bf31ce2-f384-11e1-a338-e39c2fe4ab59/mongodb-1.3.2.zfs.bz2"
}
],
"requirements": {
"networks": [
{
"name": "net0",
....
当客户端使用imgadm import UUID下载图像时,默认情况下,客户端将以以下形式下载清单中指定的映像文件(ZFS数据集):<source_server_url> / <image_uuid> / <file_path>。
所以在上面的例子中,下载的文件将是* https://datasets.joyent.com/datasets/6bf31ce2-f384-11e1-a338-e39c2fe4ab59/mongodb-1.3.2.zfs.bz2*。 您会注意到,清单中的文件包含一个URL,如果存在它将被使用,但不是必需的。 因此,image服务器的操作非常简单和直接。

Creating a Poor Man's Image Server

如上所述,“image”服务器所需的功能非常基本。 因此,我们可以通过以下方式模拟数据集服务器的基本功能:

在您的Web服务器上,为您的SmartOS映像服务器创建一个目录。 我们将在http://mysite.com上假设“images /”。
     将每个DS清单添加到index.html。 不要包含任何HTML! 我们只使用这个文件名,因为它是访问目录时发送的默认内容。 请记住,该文件包含一个清单对象数组,因此格式为:

[
{ manifest1... },
{ manifest2... }
]
对于每个image,使用图像UUID创建一个目录,即:“images / 6bf31ce2-f384-11e1-a338-e39c2fe4ab59”。
将image文件复制到UUID目录中
现在试试吧! “curl -ks http://mysite.com/images”应该返回你的对象。
将其添加到sources.list和imgadm更新以使用。
这里描述的解决方案不是优雅的,也不是最优的,但是从网络帐户提供图像的可行选项,它们不具有使用下面描述的更优雅的smartos-image-server的选项。

Using the smartos-image-server

由nshalman启动的社区image服务器项目可以在github:smartos-image-server上找到
服务器在Node.js中实现,并实现了服务image所需的基本功能。 这是推荐的服务image的方法。

												

Managing Images on smartos的更多相关文章

  1. Managing a node remotely by using the netapp SP

    Managing a node remotely by using the Service Processor The Service Processor (SP) is a remote manag ...

  2. Managing IIS Log File Storage

    Managing IIS Log File Storage   You can manage the amount of server disk space that Internet Informa ...

  3. Managing the Lifecycle of a Service

    service的生命周期,从它被创建开始,到它被销毁为止,可以有两条不同的路径: A started service 被开启的service通过其他组件调用 startService()被创建. 这种 ...

  4. Android内存管理(4)*官方教程 含「高效内存的16条策略」 Managing Your App's Memory

    Managing Your App's Memory In this document How Android Manages Memory Sharing Memory Allocating and ...

  5. Managing Group Policy with PowerShell

    Overview In this article, I’ll talk about your options when it comes to managing Group Policy using ...

  6. ZFS+Dtrace+Zones+KVM=SMARTOS + dtrace 详细文档

    https://smartos.org/ http://dtrace.org/guide/chp-io.html http://blog.csdn.net/babyfacer/article/deta ...

  7. Managing Hierarchical Data in MySQL

    Managing Hierarchical Data in MySQL Introduction Most users at one time or another have dealt with h ...

  8. [Angular 2] Managing State in RxJS with StartWith and Scan

    The scan operator in RxJS is the main key to managing values and states in your stream. Scan behaves ...

  9. Managing linux Shell Jobs

    Managing Shell Jobs   When moving jobs between the foreground and background, it may be useful to ha ...

随机推荐

  1. poj 3046 Ant Counting(多重集组合数)

    Ant Counting Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) Total ...

  2. 操作系统-容器-Docker:如何将应用打包成为 Docker 镜像?

    ylbtech-操作系统-容器-Docker:如何将应用打包成为 Docker 镜像? 1.返回顶部 1. 虽然 DockerHub 提供了大量的镜像,但是由于企业环境的多样性,并不是每个应用都能在 ...

  3. IP地址与子网掩码

    IP地址 众所周知,为了确保通信时能相互识别,在internet上的每台主机都必须有一个唯一的标识,即主机的IP地址.IP协议就是根据IP地址来实现信息传递的. IP地址由32位(4字节)二进制数组成 ...

  4. Hibernate 一对多/多对多

    一对多关联(多对一): 一对多关联映射: 在多的一端添加一个外键指向一的一端,它维护的关系是一指向多 多对一关联映射: 咋多的一端加入一个外键指向一的一端,它维护的关系是多指向一 在配置文件中添加: ...

  5. 在docker中运行jenkins实现代码自动发布到测试服务器

    在docker中运行jenkins 用的镜像是apline版:lts-alpine,并设置正确的时区. docker run --name jenkins_master -d \ -p 8081:80 ...

  6. java编译器

    编译: .java变成.class        前端编译   Sun javac Eclipse ECJ .class变成机器码      运行期编译 等HostSpot VM c1,c2 .jav ...

  7. css sprite实例

    css sprite直译过来就是CSS精灵.通常被解释为“CSS图像拼合”或“CSS贴图定位”.本文章向码农们介绍css sprite使用方法和基本使用实例,需要的码农可以参考一下. 一.什么是css ...

  8. final修饰的类有什么特点

    变量定义为final,一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引用不可再变. 方法定义为final,是为了防止任何继承类改变它. 类定义为final, ...

  9. HTML5中常用的标签(及标签的属性和作用)

    1.标签:<!DOCTYPE>作用:声明是文档中的第一成分,位于<html>标签之前. 2.标签:<html>作用:此元素可告知浏览器其自身是一个HTML文档.属性 ...

  10. 抽象工厂模式( Abstract Factory )

    提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类.解决多产品多等级结构.模式的类图如下: 抽象工厂模式的优点: 易于交换产品系列,由于具体工厂类在一个应用中只需要在初始化的时候出现一 ...