如何从Ubuntu ISO格式图像创建DigitalOcean Droplet

DigitalOcean的自定义图像功能允许您将虚拟磁盘映像从内部部署环境或其他云平台带到DigitalOcean,并使用它们启动DigitalOcean Droplet。如......中所述

介绍

DigitalOcean的自定义图像功能允许您将虚拟磁盘映像从内部部署环境或其他云平台带到DigitalOcean,并使用它们启动DigitalOcean Droplet。

自定义图像文档中所述,自定义图像上载工具本身支持以下图像类型:

ISO是另一种流行的图像格式,您可能希望将其用于自定义图像。 Linux映像经常由Linux发行版提供,作为安装Linux的便捷方法。 遗憾的是,上传工具目前不支持ISO映像,但计划在2018年底提供支持。

在本教程中,我们将演示如何使用免费和开源的VirtualBox虚拟化工具从Ubuntu 18.04 ISO创建兼容DigitalOcean的VDI映像(VirtualBox磁盘映像)。 本指南中的步骤可以适用于您首选的发行版的ISO映像。

先决条件

在开始之前,您需要以下内容:

  • 您将安装和使用VirtualBox的本地计算机或远程服务器(具有GUI访问权限)。 在本教程中,我们将使用Mac OS X本地计算机,但您可以使用VirtualBox支持的任何系统。 要了解有关支持的系统的更多信息,请参阅VirtualBox手册 GUI菜单选项在操作系统中应该类似,但可能不相同。
  • ISO格式的Ubuntu 18.04服务器操作系统映像 ubuntu-18.04.1-live-server-amd64.iso映像符合自定义映像映像要求中列出的两个要求

    • 您的映像必须支持ext3或ext4文件系统
    • 您的映像必须安装cloud-init 0.7.7, cloudbase-initcoreos-cloudinitiginitionbsd-cloudinit (Ubuntu 18.04 Server附带cloud-init

如果您正在为其他发行版的ISO调整这些步骤,并且您的映像没有安装和配置cloud-init ,则必须在安装操作系统后手动安装和配置它。

一旦您有了这些先决条件,您就可以开始使用本指南了。

第1步 - 安装VirtualBox和创建虚拟机

我们将用于转换本指南中ISO格式图像的工具是VirtualBox ,这是一个用于x86硬件的免费开源虚拟器。 默认情况下,VirtualBox使用GUI,我们将在本指南中使用它来创建VDI映像。

首先,从下载页面下载并安装VirtualBox。 请遵循VirtualBox 5.2.20平台软件包部分中的相应链接,具体取决于您的主机操作系统。 在本指南中,我们将使用OSX系统,因此我们将使用提供的DMG下载并安装VirtualBox。

安装VirtualBox后,打开应用程序。

您应该看到以下欢迎屏幕:

VirtualBox欢迎屏幕

单击New开始创建Ubuntu虚拟机。

应弹出以下窗口,允许您命名虚拟机(VM)并选择其操作系统:

名称虚拟机窗口

在本教程中,我们将命名我们的VM Ubuntu 18.04 ,但随意给VM一个更具描述性的名称。

对于Type ,选择Linux ,对于Version ,选择Ubuntu(64位) 然后,点击继续

将出现以下屏幕,允许您指定要分配给虚拟机的内存量:

分配内存窗口

除非您有更复杂的用例,否则1024 MB应该足够您的虚拟机内存。 如果需要调整内存大小,请输入要分配给VM的内存量,然后单击“ 继续”

您应该看到以下屏幕:

创建硬盘窗口

此窗口允许您为VM创建虚拟硬盘。 此虚拟硬盘是您稍后将上载到DigitalOcean的映像。 Ubuntu操作系统将从您下载到此虚拟硬盘的ISO安装。 确保选中“ 立即创建虚拟硬盘” ,然后单击“ 创建”

应显示以下硬盘文件类型窗口,允许您选择要用于图像的格式:

选择硬盘类型窗口

DigitalOcean自定义图像支持所有这三种类型,因此除非您有强烈的偏好,否则请选择VDI(VirtualBox磁盘映像) 点击继续

然后,您应该看到以下窗口:

硬盘选项

此窗口允许您在动态分配固定大小的硬盘文件之间进行选择。 我们将使用默认的动态分配选项,并允许文件在安装Ubuntu OS和软件包时增长。 点击继续

下一个窗口允许您命名硬盘文件(以及选择保存它的路径),并指定其最大大小:

硬盘大小

请务必给自己足够的磁盘空间来安装操作系统以及您可能需要的其他软件包。 对于大多数用途,默认的10 GB应该没问题,但是如果您预计安装大量软件包或在映像中存储大量数据,则应该将其提高到预期的磁盘使用率。

选择虚拟硬盘的大小后,单击“ 创建”

此时,您将返回到初始欢迎屏幕,您将在其中看到刚刚创建的虚拟机:

VM欢迎屏幕

我们现在可以开始在虚拟机上安装Ubuntu了。

第2步 - 将Ubuntu 18.04安装到虚拟机上

在此步骤中,我们将在我们的虚拟机上安装和配置Ubuntu操作系统。

首先,从VirtualBox欢迎屏幕中选择您的虚拟机,然后单击工具栏中的“ 开始”按钮。

您应该看到以下虚拟机窗口,提示您选择要从中引导系统的ISO文件:

选择ISO

选择您下载的Ubuntu 18.04 Server ISO,然后点击Start

在VM中,Ubuntu安装程序将开始从ISO启动,您应该进入以下菜单:

Ubuntu选择语言

使用箭头键选择首选语言,然后按ENTER继续。

然后,您应该看到以下键盘配置屏幕:

Ubuntu键盘配置

选择首选键盘配置,选择“完成” ,然后按ENTER

接下来,您将进入以下安装程序选择屏幕:

Ubuntu安装程序选择

选择Install Ubuntu ,然后按ENTER

应显示以下网络连接屏幕:

Ubuntu网络连接

此屏幕允许您配置Ubuntu服务器的网络接口。 由于我们在虚拟机上执行安装,因此我们只使用默认选项,因为当我们在DigitalOcean平台上启动映像时,配置的界面将被覆盖。

选择完成,然后按ENTER

然后,您将进入以下配置代理屏幕:

Ubuntu配置代理

如果您需要代理,请在此处输入。 然后,选择完成 ,然后按ENTER

下一个屏幕将允许您选择Ubuntu存档镜像:

Ubuntu存档镜像

除非您需要特定的镜像,否则此处的默认值应该没问题。 选择完成,然后按ENTER

接下来,系统将提示您对虚拟磁盘进行分区:

Ubuntu分区磁盘

除非您要设置逻辑卷管理器 (LVM)或手动对虚拟磁盘进行分区,否则请选择“ 使用整个磁盘”以使用整个连接的虚拟磁盘,然后单击“确定”。

以下屏幕允许您选择要分区的虚拟磁盘:

Ubuntu文件系统设置

如提示文本中所述,安装程序将为引导加载程序创建分区,并使用剩余的虚拟磁盘空间来创建将安装Ubuntu OS的ext4分区。

选择附加的虚拟磁盘,然后按ENTER

以下屏幕显示分区前文件系统安装程序选项的摘要:

Ubuntu文件系统摘要

ext4分区将挂载到/ ,并将为GRUB引导加载程序创建第二个分区(1 MB)。 完成ENTER虚拟磁盘的分区方案后,选择Done ENTER

在出现的确认屏幕中,选择继续 ENTER

下一个屏幕将允许您配置系统主机名以及Ubuntu用户:

Ubuntu创建用户

请注意,在您填写此屏幕时,安装程​​序将继续在后台将文件复制到虚拟磁盘。

在本教程中,我们将创建一个名为sammy的用户并调用我们的服务器ubuntu 当此图像在DigitalOcean平台上运行时,服务器名称可能会被覆盖,因此请随意在此处为其指定临时名称。

您可以将SSH密钥上传到DigitalOcean并自动将它们嵌入到创建的Droplet中,所以现在我们不会导入SSH身份 要了解如何将SSH密钥上传到DigitalOcean,请参阅Droplet产品文档

填写完所有必填字段后,提示符应如下所示:

Ubuntu简介完成

选择完成,然后按ENTER

下一个屏幕将提示您为Ubuntu服务器选择流行的快照。 Snap是预先打包的软件包,包含应用程序,其依赖项和配置。 要了解有关快照的更多信息,请参阅快照文档

Ubuntu选择快照

在本指南中,我们不会安装任何快照,并将在稍后的步骤中手动安装软件包。 如果您要安装快照,请使用SPACE选择或取消选择它,然后向下滚动到完成 然后,按ENTER

无论您在快照屏幕中进行选择,都可以进入安装进度和摘要屏幕:

Ubuntu安装进度

安装完成后,选择“ 立即重新启动” ENTER

安装程序将关闭并提示您删除安装介质(在这种情况下,这是我们之前选择的ISO映像)。 在大多数情况下,ISO将在重新启动时自动分离,因此您只需按ENTER

要仔细检查,请在VirtualBox GUI菜单中导航到Devices ,然后导航到Optical Drives 如果您可以使用“ 从虚拟驱动器中删除磁盘”选项,请单击它以从虚拟机中分离ISO。 然后,返回虚拟机窗口,按ENTER

系统将在虚拟机中重新启动,这次是从我们安装Ubuntu的虚拟磁盘。

由于默认情况下在Ubuntu 18.04服务器上安装了cloud-init ,因此第一次启动Ubuntu时, cloud-init将运行并自行配置。 在虚拟机窗口中,您应该看到一些cloud-init日志项,并提供一个提示。 ENTER

然后,您可以使用在安装程序中创建的用户登录Ubuntu服务器。

输入您的用户名ENTER ,然后输入您的密码ENTER

您现在应该可以访问命令提示符,表明您已成功完成Ubuntu 18.04安装,现在以您之前创建的用户身份登录。

在本指南的下一步中,我们将重新配置cloud-init并将其设置为在DigitalOcean平台上作为Droplet启动Ubuntu映像时运行。

第3步 - 重新配置cloud-init

现在我们已经将Ubuntu 18.04安装到虚拟磁盘并启动并运行了系统,我们需要重新配置cloud-init以使用适用于DigitalOcean平台的数据源。 cloud-init数据源是cloud-init的配置数据源,通常由用户数据(如shell脚本)或服务器元数据(如hostname,instance-id等)组成。要了解有关cloud-init数据源的更多信息,请咨询官方cloud-init文档

默认情况下,在Ubuntu 18.04上, cloud-init将自身配置为使用DataSourceNoCloud数据源。 这将在DigitalOcean上运行映像时出现问题,因此我们需要重新配置cloud-init以使用ConfigDrive数据源,并确保在DigitalOcean上启动映像时重新运行cloud-init

首先,确保您已启动Ubuntu 18.04虚拟机并以先前创建的用户身份登录。

从命令行,导航到/etc/cloud/cloud.cfg.d目录:

cd /etc/cloud/cloud.cfg.d

使用ls命令列出目录中存在的cloud-init配置文件:

ls
05_logging.cfg  50-curtin-networking.cfg  90_dpkg.cfg  curtin-preserve-sources.cfg  README

首先,删除50-curtin-networking.cfg文件,该文件为您的Ubuntu服务器配置网络接口。 在DigitalOcean上启动映像时, cloud-init将自动运行并重新配置这些接口。 如果未删除此文件,则从此Ubuntu映像创建的DigitalOcean Droplet将使其接口配置错误,并且无法从Internet访问。

sudo rm 50-curtin-networking.cfg

接下来,我们将运行dpkg-reconfigure cloud-init来删除NoCloud数据源,确保cloud-init搜索并找到DigitalOcean上使用的ConfigDrive数据源:

sudo dpkg-reconfigure cloud-init

您应该看到以下图形菜单:

Cloud Init dpkg菜单

最初突出显示NoCloud数据源。 SPACE取消选择它,然后按ENTER

最后,导航到/etc/netplan

cd /etc/netplan

删除50-cloud-init.yaml文件(这是我们之前删除的cloud-init网络文件生成的):

sudo rm 50-cloud-init.yaml

最后一步是确保我们从初始的cloud-init运行中清理配置,以便在DigitalOcean上启动映像时重新运行。

为此,请运行cloud-init clean

sudo cloud-init clean

此时,您的图像已准备好在DigitalOcean平台上启动。 您可以在映像中安装其他软件包和软件。 完成后,关闭虚拟机:

sudo shutdown -h now

我们现在可以继续在DigitalOcean平台上上传和启动此自定义图像。

第4步 - 上传自定义图像和创建Droplet

现在我们已经创建了一个Ubuntu 18.04 VDI映像并将其配置为在DigitalOcean上使用,我们可以使用自定义映像上传工具上传它。

在macOS上,我们创建和配置的Ubuntu虚拟磁盘映像默认位于~/VirtualBox VMs/ your_VM_name / your_virtual_disk_name .vdi 根据您在VirtualBox中使用的操作系统,此路径可能略有不同。

在我们上传图片之前,我们会对其进行压缩以加快文件传输到DigitalOcean的速度。

在主机操作系统上(不在虚拟机内),导航到包含VDI映像文件的目录:

cd ~/VirtualBox\ VMs/Ubuntu\ 18.04/

现在,使用gzip压缩文件:

gzip < Ubuntu\ 18.04.vdi > Ubuntu\ 18.04.gz

在此命令中,我们将源Ubuntu 18.04.vdi文件传输到gzip ,将Ubuntu 18.04.gz压缩文件指定为输出。

gzip完成压缩文件后,按照自定义图像快速入门中的说明将.gz文件上传到DigitalOcean。

您现在应该能够从自定义Ubuntu 18.04 Server映像创建和使用Droplet。

结论

在本教程中,我们学习了如何使用VirtualBox虚拟化工具从vanilla Ubuntu 18.04 ISO创建自定义VDI映像。 我们调整了cloud-init以便它可以在DigitalOcean上正确配置Droplet网络,最后使用自定义图像上传工具压缩和上传图像。

您可以调整本教程中的步骤以使用首选的Linux发行版的ISO映像。 确保已安装SSH服务器并将其配置为在引导时启动,并且已安装并正确配置了cloud-init以使用ConfigDrive数据源。 最后,确保已清除任何过时的网络配置文件。

您可能还希望使用像Packer这样的工具来自动创建机器映像。

要了解有关DigitalOcean自定义图像的更多信息,请参阅自定义图像产品文档并启动博客文章