本文的初衷是手动搭建一个跨平台,可移植,轻量型的Linux虚拟机开发环境,以替代 Vagrant。
Vagrant 实际就是在虚拟机(如VirtualBox)的基础上,再封装一层管理脚本。但是,引入了不必要的复杂性,有些Linux镜像更新很不及时导致无法使用,命令脚本出错手动分析问题麻烦。
本文撰写时, 已放弃 vagrant。使用原生 virtual box 虚拟机。简单!干净!
Alpine Linux 是一个社区开发的面向安全应用的轻量级Linux发行版。很适合做轻量型的定制化开发环境。
宿主机 | Windows 10 专业版 |
Virtual Box | 6.1.14 r140239 (Qt5.6.2) |
Alpine Linux | alpine-virt-3.12.0-x86_64.iso |
到官网 https://www.virtualbox.org 下载最新版本的VirtualBox安装包和扩展包。
注: 扩展包版本必须和安装包版本一致。
下载地址:https://www.virtualbox.org/wiki/Downloads
找到 Oracle VM VirtualBox Extension Pack ,点击 All supported platforms 即可下载。
装好Virtualbox后,打开主界面,点击:菜单 -> 管理 -> 全局设定 -> 扩展 -> 添加。选中扩展包。
注:此处默认为最新版本. 旧版则下载旧版扩展包 VirtualBox older builds;
https://alpinelinux.org/downloads/
可下载虚拟机专用版. 如 alpine-virt-3.12.0-x86_64.iso 光盘文件仅40M
类型选择 “Linux 2.6 / 3.x / 4.x (64-bit)”。
可选择100G,反正是动态扩展。虚拟硬盘文件类型 默认即可.
- VDI: vbox自己的虚拟硬盘格式
- VMDK: VMWare等其他虚拟化厂商支持的虚拟硬盘格式
- VHD: Microsoft支持的虚拟硬盘文件格式
- Parallels,这个大家好像见得不多,他也是一个虚拟化厂商(2008年成立)
-
连接方式选择 桥接网卡, 勾选 接入网线。 virtual box 默认为 网络地址转换(NAT)
桥接网卡: 创建一个和宿主机并列的, 处于相同局域网的独立网络环境, 宿主机可通过局域网IP访问.
网络地址转换NAT: 创建一个宿主机下的网络环境, 宿主机使用端口转发与其交互.
共享文件夹路径(宿主机目录) - 共享文件夹名称(www) - 挂载点(虚拟机目录)(/root/www)
存储 - 控制器 - 分配光驱 选择虚拟光盘文件,找到我们前面下载的 AlpineLinux的iso文件.
系统–处理器–启用 PAE/NX, 使能硬件加速, USB设置成3.0版本
启动虚拟机,用光盘启动,然后用root登录AlpineLinux,没有密码。敲入命令:
- setup-alpine
-
跟随命令行向导一步一步执行:
不清楚一律默认,这样不容易出问题.
选择时区时, 选择 Asia/Shanghai
选择安装源时,敲入 f 让系统自己寻找一个最快的源
选择安装目标盘时,根据具体磁盘名选择, 一般是 sda
选择分区类型时,敲入 sys
磁盘格式化并写入操作系统数据,会提示擦除所以数据,确认输入 y 。耐心等待
- WARNING: Erase the above disk(s) and continue? [y/N]: y
-
没几分钟就安装完了.
最后:退出光盘,重启虚拟机
虚拟机设置–网络–网卡1–连接方式–桥接网卡。默认值为: 网络地址转换(NAT)
- ip address show
-
Alpine 默认关闭root用户ssh登录。更改 sshd_config 文件,开启root登录。
- echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
-
- rc-service sshd restart
-
挂载宿主机 Virtual Box 安装目录下的 VBoxGuestAdditions.iso 光盘文件安装。
Virtual Box的Alpine系统挂载ISO光盘文件 https://www.cdsy.xyz/computer/soft/others/240228/cd60979.html
去掉 repositories 仓库中 community 的注释,开启 community 社区源:
- vim /etc/apk/repositories
-
- http://mirrors.ustc.edu.cn/alpine/v3.12/main
- http://mirrors.ustc.edu.cn/alpine/v3.12/community
- ......
-
因为 virtualbox-guest-additions 和 docker 包都是在community仓库里面。
安装增强扩展
- apk add virtualbox-guest-additions
-
- mkdir -p /root/www
- modprobe -a vboxsf
- mount -t vboxsf www /root/www
-
www 目录为 virtual box --设置–共享文件夹,设置的共享名称。可设置多个共享目录
开机启动自动挂载:
- echo "www /root/www vboxsf defaults 0 0" >> /etc/fstab
-
- vi /etc/network/interfaces
-
iface eth0 inet dhcp 改为 iface eth0 inet static ,
参照宿主机IP网段,配置对应的 address, netmask, gateway 项。
- auto lo
- iface lo inet loopback
-
- auto eth0
- iface eth0 inet static
- address 192.168.0.102
- netmask 255.255.255.0
- gateway 192.168.0.1
- hostname localhost
-
- auto eth1
- iface eth1 inet dhcp
-
重启服务
- service networking restart
-
安装并启动docker:
- apk add docker
- addgroup <username> docker
- service docker start
-
使之随机启动:
- ln -s /etc/init.d/docker /etc/runlevels/default/docker
-
或
- rc-update add docker boot
-
安装 docker-compose
- apk add docker-compose
-
Docker国内镜像加速:
- vi /etc/docker/daemon.json:
-
- {
- "registry-mirrors": ["https://registry.docker-cn.com"]
- }
-
docker-compose 无法使用,可能是因为pip未安装
- localhost:~# docker-compose
- -ash: docker-compose: not found
- localhost:~# pip -V
- -ash: pip: not found
-
apk add pip 提示找不到包。百度无解,谷歌后,得知应如下安装 pip 才是正解:
- apk add py-pip
-
alpine Docker https://wiki.alpinelinux.org/wiki/Docker
Windows7 能够引导 vhd 格式的虚拟硬盘,而 VirtualBox 的虚拟硬盘文件默认是 vdi 格式的。可以用 VBoxManager.exe来转换。
VBoxManager 存在于VirtualBox的安装目录下。
vmdk转换成vdi
- VBoxManage.exe clonehd source.vmdk rename.vdi --format VDI
-
vdi转换成vmdk
- VBoxManage.exe clonehd source.vdi rename.vmdk --format VMDK
-
vdi转换成vhd
- VBoxManage.exe clonehd source.vdi rename.vhd --format VHD
-
运行命令后,原文件会保留,并创建一个新的硬盘文件。