从零开始创建 Vagrant 镜像

3 min read · March 16th 2017

Vagrant 是一个用于创建和部署虚拟化开发环境的工具。vagrant 镜像是一个 vagrant 用来启动虚拟机的文件,通常是纯净的操作系统镜像,如 Ubuntu, Debian,CentOS 打包生成。但我们也可以选择一款操作系统,在其上安装配置我们需要的工具和软件,然后打包成一个自定义 vagrant 镜像。

我们将通过 virtualbox, 安装运行 ubuntu-server-16.04.2 操作系统,再在其上安装 docker-17.03.0, 然后将这一切打包成为一个名为 ubuntu-16.04-docker-17.03.0 的 vagrant 镜像

准备

下载并安装 vagrant 和 virtualbox, 下载 ubuntu-server-16.04.2.iso 文件

虚拟机安装运行 ubuntu

配置虚拟机有几点要注意:

  • 硬盘空间动态且足够,这里选择 8G 默认值
  • 网路适配器 1(Network > Adapter1) 必须是 NAT, 选择默认值
  • 内存可以适当小一点,这里选择 512M
  • 禁掉非必须的硬件比如声卡,USB 控制器

安装 ubuntu server 时也有几点需要注意:

  • 安装区域最好选择您所在区域
  • 用户名设置:vagrant, 密码也是:vagrant

设置 root 密码为 vagrant

sudo passwd root #连续两次输入 vagrant

检查是否设置成功

su - #输入 vagrant 可以切换到 root

设置 vagrant 用户无密码运行 sudo

需 vagrant 用户需自由运行 sudo 命令而不用输入密码

sudo visudo -f /etc/sudoers.d/vagrant

添加下面内容到文件

vagrant ALL=(ALL) NOPASSWD:ALL

这样在使用 sudo 时就不必在输入密码了 可以通过下面命令确认配置是否生效

sudo pwd

vagrant 用户安装 ssh 公钥

vagrant 通过 ssh 与虚拟机交互,我们需要从 github 下载公钥安装到 vagrant 用户

mkdir -p /home/vagrant/.ssh
chmod 0700 /home/vagrant/.ssh
wget --no-check-certificate \
    https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub \
    -O /home/vagrant/.ssh/authorized_keys
chmod 0600 /home/vagrant/.ssh/authorized_keys
chown -R vagrant /home/vagrant/.ssh

配置 SSH 服务

安装 ssh 服务器

sudo apt-get update -y
sudo apt-get install -y openssh-server

默认情况下 ssh 会查找 DNS, 离线情况下这种行为会浪费很多时间,所以我们需要配置UseDNS no来阻止这种行为

sudo vi /etc/ssh/ssh_config

添加

UseDNS no

安装 VirtualBox Guest Additions

VirtualBox Guest Additions 提供了共享文件夹功能,此为对性能还有一些优化,所以有必要安装

  • 更新应用包

    sudo apt-get update -y
    sudo apt-get upgrade -y
  • 安装依赖

    sudo apt-get install -y linux-headers-$(uname -r) build-essential dkms
  • 安装 VBoxLinuxAdditions

  • 点击 Virtualbox 菜单:devices > Insert Guset Additions CD Image.. 挂载镜像

  • 挂载镜像到文件系统sudo mount /dev/cdrom /media/cdrom

  • 运行安装脚本sudo sh /media/cdrom/VBoxLinuxAdditions.run

自定义

这步是可选步骤

我们也可以安装一些我们喜欢的工具,进行一些常用配置 此处我们安装 docker

通过阿里云镜像网站安装 docker 最新版

curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sudo sh -

将 vagrant 用户加入到 docker 组

sudo usermod -aG docker vagrant

清理

为了尽可能减小镜像的体积,我们进行一些清理

首先清理安装包

sudo apt-get clean

磁盘碎片整理

sudo dd if=/dev/zero of=/EMPTY bs=1M
sudo rm -f /EMPTY

清除 Bash 历史

echo > ~/.bash_history && history -c

打包

vagrant package --output ubuntu-16.04-docker-17.03.0.box --base ubuntu
  • output: 输出镜像文件位置
  • base: 从运行中虚拟机 ubuntu 导出镜像

结论

到此,我们的自定义 vagrant 镜像就算制作完成了,你可以导入后运行,也可以分享给好友和同事。