介绍
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-init
,coreos-cloudinit
,iginition
或bsd-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后,打开应用程序。
您应该看到以下欢迎屏幕:
单击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应该没问题,但是如果您预计安装大量软件包或在映像中存储大量数据,则应该将其提高到预期的磁盘使用率。
选择虚拟硬盘的大小后,单击“ 创建” 。
此时,您将返回到初始欢迎屏幕,您将在其中看到刚刚创建的虚拟机:
我们现在可以开始在虚拟机上安装Ubuntu了。
第2步 - 将Ubuntu 18.04安装到虚拟机上
在此步骤中,我们将在我们的虚拟机上安装和配置Ubuntu操作系统。
首先,从VirtualBox欢迎屏幕中选择您的虚拟机,然后单击工具栏中的“ 开始”按钮。
您应该看到以下虚拟机窗口,提示您选择要从中引导系统的ISO文件:
选择您下载的Ubuntu 18.04 Server ISO,然后点击Start 。
在VM中,Ubuntu安装程序将开始从ISO启动,您应该进入以下菜单:
使用箭头键选择首选语言,然后按ENTER
继续。
然后,您应该看到以下键盘配置屏幕:
选择首选键盘配置,选择“完成” ,然后按ENTER
。
接下来,您将进入以下安装程序选择屏幕:
选择Install Ubuntu ,然后按ENTER
。
应显示以下网络连接屏幕:
此屏幕允许您配置Ubuntu服务器的网络接口。 由于我们在虚拟机上执行安装,因此我们只使用默认选项,因为当我们在DigitalOcean平台上启动映像时,配置的界面将被覆盖。
选择完成,然后按ENTER
。
然后,您将进入以下配置代理屏幕:
如果您需要代理,请在此处输入。 然后,选择完成 ,然后按ENTER
。
下一个屏幕将允许您选择Ubuntu存档镜像:
除非您需要特定的镜像,否则此处的默认值应该没问题。 选择完成,然后按ENTER
。
接下来,系统将提示您对虚拟磁盘进行分区:
除非您要设置逻辑卷管理器 (LVM)或手动对虚拟磁盘进行分区,否则请选择“ 使用整个磁盘”以使用整个连接的虚拟磁盘,然后单击“确定”。
以下屏幕允许您选择要分区的虚拟磁盘:
如提示文本中所述,安装程序将为引导加载程序创建分区,并使用剩余的虚拟磁盘空间来创建将安装Ubuntu OS的ext4
分区。
选择附加的虚拟磁盘,然后按ENTER
。
以下屏幕显示分区前文件系统安装程序选项的摘要:
ext4
分区将挂载到/
,并将为GRUB引导加载程序创建第二个分区(1 MB)。 完成并ENTER
虚拟磁盘的分区方案后,选择Done ENTER
。
在出现的确认屏幕中,选择继续 ENTER
。
下一个屏幕将允许您配置系统主机名以及Ubuntu用户:
请注意,在您填写此屏幕时,安装程序将继续在后台将文件复制到虚拟磁盘。
在本教程中,我们将创建一个名为sammy的用户并调用我们的服务器ubuntu 。 当此图像在DigitalOcean平台上运行时,服务器名称可能会被覆盖,因此请随意在此处为其指定临时名称。
您可以将SSH密钥上传到DigitalOcean并自动将它们嵌入到创建的Droplet中,所以现在我们不会导入SSH身份 。 要了解如何将SSH密钥上传到DigitalOcean,请参阅Droplet产品文档 。
填写完所有必填字段后,提示符应如下所示:
选择完成,然后按ENTER
。
下一个屏幕将提示您为Ubuntu服务器选择流行的快照。 Snap是预先打包的软件包,包含应用程序,其依赖项和配置。 要了解有关快照的更多信息,请参阅快照文档 。
在本指南中,我们不会安装任何快照,并将在稍后的步骤中手动安装软件包。 如果您要安装快照,请使用SPACE
选择或取消选择它,然后向下滚动到完成 。 然后,按ENTER
。
无论您在快照屏幕中进行选择,都可以进入安装进度和摘要屏幕:
安装完成后,选择“ 立即重新启动” 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
Output05_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
您应该看到以下图形菜单:
最初突出显示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这样的工具来自动创建机器映像。