介绍
DigitalOcean 的 [自定义图像] (https://www.digitalocean.com/docs/images/custom-images/) 功能允许您将虚拟磁盘图像从本地环境或其他云平台带到 DigitalOcean,并使用它们启动 DigitalOcean Droplets。
如在 [自定义图像文档] 中所述(https://www.digitalocean.com/docs/images/custom-images/overview/),自定义图像上传工具可支持以下图像类型:
- Raw (
.img
) - qcow2
- [VHDX](https://en.wikipedia.org/wiki/VHD_(file_format)# Virtual_Hard_Disk_(VHDX))
- VDI
- VMDK
ISO是您可能想与自定义图像一起使用的另一个流行的图像格式。ISO图像通常由Linux发行版提供,作为安装Linux的方便方法。不幸的是,ISO图像目前不受上传工具的支持,尽管支持计划于2018年底。
在本教程中,我们将展示如何使用免费和开源的虚拟化工具 VirtualBox从Ubuntu 18.04 ISO创建一个兼容DigitalOcean的VDI图像(VirtualBox Disk Image)。
前提条件
在您开始之前,您将需要以下为您提供:
- 本地机器或远程服务器(有GUI访问),您将安装和使用VirtualBox。 在这个教程中,我们将使用一台Mac OS X本地机,但您可以使用由VirtualBox支持的任何系统. 为了更多地了解所支持的系统,请参考虚拟Box手册。 GUI菜单选项在操作系统之间应该类似,但可能并不相同.
- ISO格式 [Ubuntu 18.04 服务器 OS 映像 (http://releases.ubuntu.com/18.04/). `ubuntu-18.04.1-life-server-amd64.iso'图像符合自定义图像图像要求中列出的两项要求:
- 您的图像必须支持ext3或ext4文件系统
- 你的形象必须安装了 " 云-尼特 " 0.77、 " 云-尼特 " 、 " 云-尼特 " 、 " 图像 " 或 " bsd-cloudinit " (Ubuntu 18.04服务器安装了 " 云-尼特 " )
如果您正在为另一个发行版的 ISO 调整这些步骤,而您的图像没有安装和配置cloud-init
,则您必须在安装操作系统后手动安装和配置它。
一旦你有这些前提条件可供你使用,你已经准备好开始这个指南。
第1步:安装 VirtualBox 并创建虚拟机
我们将在本指南中使用的工具来转换 ISO 格式图像是 VirtualBox,为 x86 硬件的免费和开源虚拟化程序. 默认情况下,VirtualBox 使用 GUI,我们将使用它来创建本指南中的 VDI 图像。
要开始,从 下载页面下载和安装 VirtualBox。根据您的主机操作系统,请遵循 VirtualBox 5.2.20 平台包 部分中的相应链接。在本指南中,我们将使用 OSX 系统,因此我们将使用提供的 DMG 下载和安装 VirtualBox。
安装 VirtualBox 后,打开应用程序。
您应该看到以下欢迎屏幕:
点击新
开始创建您的Ubuntu虚拟机。
下面的窗口应该出现,允许您命名虚拟机(VM)并选择其操作系统:
在本教程中,我们将我们的 VM 命名为Ubuntu 18.04
,但请自由给 VM 一个更为描述性的名称。
对于 Type ,选择** Linux** ,而对于** Version** ,选择** Ubuntu(64位)** 。
应该出现以下屏幕,允许您指定要分配给虚拟机的内存量:
除非您有一个更复杂的使用案例,否则 1024 MB 应该是虚拟机的足够内存. 如果您需要调整内存大小,请输入要分配给 VM 的内存量,然后按 继续 。
你应该看到下面的屏幕:
此窗口允许您为您的 VM 创建虚拟硬盘. 此虚拟硬盘是您将在后一步上传到DigitalOcean的图像. Ubuntu 操作系统将从您下载的ISO安装到这个虚拟硬盘。
应该出现以下 硬盘文件类型 窗口,允许您选择您想要用于您的图像的格式:
所有三种类型都支持DigitalOcean Custom Images,所以除非您有强烈的偏好,否则请选择 VDI (VirtualBox Disk Image) 。
您应该看到以下窗口:
此窗口允许您选择一个 动态分配 或** 固定大小** 硬盘文件. 我们将使用默认的** 动态分配** 选项,并允许文件在我们安装Ubuntu操作系统和包时生长。
下一个窗口允许您命名硬盘文件(以及选择将其保存的路径),并指定其最大尺寸:
请确保给自己足够的磁盘空间来安装操作系统以及您可能需要的其他软件包. 默认的 10 GB 应该适用于大多数目的,但如果您预计将安装大量的软件包或存储大量数据在图像中,您应该将此影响到您的预期磁盘使用量。
选择虚拟硬盘的大小后,点击 创建 。
在此时,您将返回最初的欢迎屏幕,在那里您将看到您刚刚创建的虚拟机:
我们现在可以开始在虚拟机上安装Ubuntu。
第2步:在虚拟机上安装Ubuntu 18.04
在此步骤中,我们将在我们的虚拟机上安装并配置Ubuntu操作系统。
首先,从 VirtualBox 欢迎屏幕中,选择您的虚拟机,然后在工具栏中按一下 Start 按钮。
您应该看到以下虚拟机窗口,提示您选择您要启动系统的ISO文件:
选择您下载的 Ubuntu 18.04 服务器 ISO,然后点击 Start 。
在 VM 中,Ubuntu 安装程序将从 ISO 开始启动,您应该被带到以下菜单:
使用箭头键选择您喜欢的语言,然后按ENTER
继续。
然后你应该看到以下 键盘配置 屏幕:
选择您喜欢的键盘配置,选择 完成 ,然后点击进入
。
接下来,您将被带到以下安装程序选择屏幕:
选择安装Ubuntu
,然后点击进入
。
以下网络连接
屏幕应显示:
由于我们正在在虚拟机上进行安装,我们只会使用默认选项,因为在我们在DigitalOcean平台上启动图像时,配置的界面将被重写。
选择完成
并点击进入
。
然后,您将被带到以下 Configure proxy 屏幕:
如果您需要一个代理,请在这里输入它,然后选择 完成 ,然后点击输入
。
下一个屏幕将允许您选择一个Ubuntu档案镜子:
除非您需要一个特定的镜子,否则此处的默认值应该是好的。
接下来,您将被要求分区您的虚拟磁盘:
除非您想设置 Logical Volume Manager (LVM) 或手动分区虚拟磁盘,否则选择 Use An Entire Disk 以使用附加的整个虚拟磁盘,然后点击 ENTER
。
下面的屏幕允许您选择将分区的虚拟磁盘:
正如提示文本中所描述的,安装程序将为启动器创建分区,并使用剩余的虚拟磁盘空间创建一个ext4
分区,将安装Ubuntu OS。
选择附加的虚拟磁盘,然后点击ENTER
。
下面的屏幕显示了分区之前的文件系统安装程序选项的摘要:
将)创建第二个分区(1 MB)。一旦您转到并确认了虚拟磁盘的分区方案,请选择完成
并点击进入
。
在出现的确认屏幕上,选择 继续 ,然后点击进入
。
下面的屏幕将允许您配置系统主机名,以及Ubuntu用户:
请注意,当您填写此屏幕时,安装程序将继续将文件复制到虚拟磁盘的背景。
在本教程中,我们将创建一个名为 sammy 的用户,并拨打我们的服务器** ubuntu** . 当该图像在DigitalOcean平台上运行时,服务器名称很可能会被重写,所以请在这里给它一个临时名称。
您可以上传您的SSH密钥到DigitalOcean并自动嵌入创建的Droplets,所以目前我们不会 导入SSH身份 . 要了解如何上传您的SSH密钥到DigitalOcean,请参阅 Droplet产品文档。
一旦您填写了所有所需的字段,提示应该看起来像这样:
选择完成
并点击进入
。
下一个屏幕将提示您为您的Ubuntu服务器选择流行的快照。快照是包含应用程序、依赖和配置的预包软件包。要了解更多关于快照的信息,请参阅 快照文档。
在本指南中,我们不会安装任何快照,并将在稍后的一步中手动安装包. 如果您想安装快照,请使用SPACE
选择或删除选择,然后滚到 Done 。
无论您在快照屏幕上的选择如何,您将被带到安装进度和摘要屏幕:
安装完毕后,选择现在重新启动
并点击进入
。
安装程序会关闭并提示您删除安装介质(在这种情况下,这是我们之前选择的ISO图像)。
要双重检查,在 VirtualBox GUI 菜单中,导航到 设备 ,然后到** 光学驱动器** . 如果您可以选择** 从虚拟驱动器中移除磁盘** ,请点击它以将ISO从虚拟机中分离。
系统将在虚拟机中重新启动,这次是从我们安装Ubuntu的虚拟磁盘。
由于cloud-init
默认安装在 Ubuntu 18.04 服务器上,Ubuntu 首次启动时,cloud-init
会运行并自定义,在虚拟机窗口中,你应该看到一些cloud-init
日志项目,并向你提供提示。
然后,您可以使用您在安装程序中创建的用户登录您的Ubuntu服务器。
输入您的用户名并点击ENTER
,然后输入您的密码并点击ENTER
。
您现在应该可以访问命令提示,表示您已成功完成 Ubuntu 18.04 安装,并且现在已登录为您之前创建的用户。
在本指南的下一步中,我们将重新配置cloud-init
并将其设置为在DigitalOcean平台上发布Ubuntu图像时运行。
第3步:重新配置Cloud-init
现在,我们把Ubuntu 18.04安装到虚拟磁盘上,并且使系统上线和运行,我们需要重新配置云-init',为数字海洋平台使用适当的数据源。
cloud-init'数据源是`cloud-init'的配置数据来源,通常由用户数据(类似于 shell 脚本)或服务器元数据组成,如主机名、实例编号等。 欲进一步了解 " 云闪 " 数据源,请查阅[官方 " 云闪 " 文件(https://cloudinit.readthedocs.io/en/latest/topics/datasources.html).
默认情况下,在Ubuntu 18.04,‘cloud-init’将自己配置为使用‘DataSourceNoCloud’数据源,这将导致在DigitalOcean上运行图像时出现问题,因此我们需要重新配置‘cloud-init’以使用‘ConfigDrive’数据源,并确保‘cloud-init’在DigitalOcean上启动图像时重新启动。
首先,请确保您已经启动了 Ubuntu 18.04 虚拟机,并已登录为您之前创建的用户。
从命令行导航到 /etc/cloud/cloud.cfg.d
目录:
1cd /etc/cloud/cloud.cfg.d
使用ls
命令列出目录中存在的cloud-init
配置文件:
1ls
1[secondary_label Output]
205_logging.cfg 50-curtin-networking.cfg 90_dpkg.cfg curtin-preserve-sources.cfg README
首先,删除为您的 Ubuntu 服务器配置网络接口的 50-curtin-networking.cfg
文件. 当图像在 DigitalOcean 上发布时, `cloud-init' 将自动运行并重新配置这些接口。
1sudo rm 50-curtin-networking.cfg
接下来,我们将运行dpkg-reconfigure cloud-init
来删除NoCloud
数据源,确保cloud-init
搜索并找到用于DigitalOcean的ConfigDrive
数据源:
1sudo dpkg-reconfigure cloud-init
您应该看到以下图形菜单:
NoCloud
数据源最初被突出。 按SPACE
解除选项,然后按ENTER
。
最后,导航到 /etc/netplan
:
1cd /etc/netplan
删除 50-cloud-init.yaml
文件(这是从我们之前删除的 cloud-init
网络文件中生成的):
1sudo rm 50-cloud-init.yaml
最后一步是确保我们清理最初的云启动
运行的配置,以便在DigitalOcean上启动图像时重新启动。
要做到这一点,请运行cloud-init clean
:
1sudo cloud-init clean
此时,您的图像已准备好在DigitalOcean平台上发布,您可以将额外的包和软件安装到您的图像中。
1sudo shutdown -h now
我们现在可以继续上传并在DigitalOcean平台上发布这个自定义图像。
步骤4 — 上传自定义图像并创建Droplet
现在我们已经创建了一个Ubuntu 18.04 VDI图像,并将其配置用于DigitalOcean,我们可以使用自定义图像上传工具(https://www.digitalocean.com/docs/images/custom-images/quickstart/)。
在 macOS 上,我们创建和配置的 Ubuntu 虚拟磁盘图像默认情况下位于 ~/VirtualBox VMs/your_VM_name/your_virtual_disk_name.vdi
。
在我们上传图像之前,我们将压缩它以加快文件传输到DigitalOcean。
在主机操作系统上(不是虚拟机内部),导航到包含 VDI 图像文件的目录:
1[environment local]
2cd ~/VirtualBox\ VMs/Ubuntu\ 18.04/
现在,使用gzip
来压缩文件:
1[environment local]
2gzip < Ubuntu\ 18.04.vdi > Ubuntu\ 18.04.gz
在此命令中,我们将源Ubuntu 18.04.vdi
文件导入gzip
,指定作为输出Ubuntu 18.04.gz
压缩文件。
一旦)。
您现在应该能够从自定义的 Ubuntu 18.04 服务器图像创建和使用 Droplets。
结论
在本教程中,我们学会了如何使用 VirtualBox 虚拟化工具创建一个自定义 VDI 图像从瓦尼拉 Ubuntu 18.04 ISO. 我们调整了cloud-init
,以便它可以在 DigitalOcean 上正确配置 Droplet 网络,最后用自定义图像上传工具压缩和上传图像。
您可以调整本教程中的步骤,以便使用您喜爱的 Linux 发行版的 ISO 图像。 确保您已安装并配置 SSH 服务器启动,并且已安装和正确配置cloud-init
以使用ConfigDrive
数据源。
您可能还想使用一个工具,如 Packer来自动创建您的机器图像。