文章主要讲述了如何通过vagrant搭建docker环境,可以快速搭建开发环境。但这个方案可能性能比较低,在某些场景下,不如wsl。
Vagrant介绍
大模型
创建虚拟机
前提:安装vm或者virtualbox,这里因为对性能不太敏感,选择了virtualbox。
打开git bash,注意是git bash
mkdir ~/Documents/vagrant_ubuntu2404
cd ~/Documents/vagrant_ubuntu2404
vagrant init bento/ubuntu-24.04 --box-version 202502.21.0
vagrant up
执行以上命令以后,就会拉取镜像,然后创建一个虚拟机。
导入box
若因网络原因,无法拉取远程的box,导致上面一步执行失败,可以从网盘中下载box文件,导入到系统中。
1. 确认本地 box 文件路径
首先找到你的 Vagrant box 文件(通常后缀为 .box),记录其完整路径(例如:/Users/yourname/Downloads/centos7.box 或 C:\Downloads\ubuntu2004.box)。
2. 导入本地 box 文件
打开终端(Linux/macOS)或命令提示符(Windows),执行以下命令:
vagrant box add [自定义名称] [本地 box 文件路径]
- 参数说明:
[自定义名称]:给这个 box 起一个便于记忆的名字(后续在 Vagrantfile 中会用到),例如my-centos7或ubuntu2004-local。[本地 box 文件路径]:box 文件的绝对路径或相对路径(若终端当前目录与 box 文件一致,可直接写文件名)。
示例
将网盘中的文件放到C:\baidunetdiskdownload\中, 然后执行以下命令
vagrant box add ubuntu2404 C:\baidunetdiskdownload\bentou-buntu-24.04-250221.box
执行成功后,可以通过vagrant box list命令查看。
$ vagrant box list
bento/ubuntu-24.04 (virtualbox, 202502.21.0, (amd64))
ubuntu2204 (virtualbox, 0, (amd64))
导入之后,使用别名进行vagrant虚拟机的创建。
vagrant init ubuntu2204
相关配置
增加本地文件映射
在 Vagrant 中,通过配置 Vagrantfile 可以将本地主机的文件夹映射(共享)到虚拟机中,实现主机与虚拟机之间的文件双向同步。具体操作如下:
核心配置:synced_folder
Vagrant 提供了 config.vm.synced_folder 配置项,用于定义共享文件夹。基本语法如下:
Vagrant.configure("2") do |config|
# 映射本地文件夹到虚拟机
config.vm.synced_folder "本地文件夹路径", "虚拟机中目标路径", [选项]
end
参数说明
-
本地文件夹路径:
主机中要共享的文件夹路径,可以是相对路径(相对于
Vagrantfile所在目录)或绝对路径。例:
./data(当前目录下的data文件夹)、/Users/yourname/Documents(绝对路径)。 -
虚拟机中目标路径:
文件夹在虚拟机中挂载的路径(必须是绝对路径)。若路径不存在,Vagrant 会自动创建。
例:
/var/www、/home/vagrant/shared。 -
可选参数(常用):
type: "virtualbox":指定同步类型(根据虚拟机提供商选择,如 VirtualBox 用virtualbox,VMware 用vmware_fusion等,默认自动适配)。nfs: true:使用 NFS 协议同步(性能优于默认方式,适合大文件或频繁读写场景,仅支持 Linux/macOS 主机)。read_only: true:设置为只读(虚拟机无法修改主机文件)。create: true:若本地文件夹不存在,自动创建(默认false)。owner: "vagrant"、group: "vagrant":指定虚拟机中文件夹的所有者和组(避免权限问题)。
示例
假设需求:将主机当前目录下的 ./code 文件夹,映射到虚拟机的 /home/vagrant/project 目录,且支持双向读写。
-
编辑
Vagrantfile,添加如下配置:ruby
Vagrant.configure("2") do |config|
# 基础配置(已有的虚拟机配置,如 box 名称等)
config.vm.box = "ubuntu2004" # 你的 box 名称
# 共享文件夹配置
config.vm.synced_folder "C:/Users/textworld/Documents", "/home/vagrant/documents",
create: true, # 若主机 ./code 不存在,自动创建
owner: "vagrant", # 虚拟机中文件夹所有者为 vagrant 用户
group: "vagrant"
# 可选:使用 shell provisioning 进行额外设置
config.vm.provision "shell", inline: <<-SHELL
# 确保挂载目录有正确权限
sudo chown -R vagrant:vagrant /home/vagrant/documents
SHELL
end
-
使配置生效:
保存
Vagrantfile后,在终端执行以下命令重启虚拟机(加载新配置):
vagrant reload
-
验证共享:
进入虚拟机后,检查目标路径是否存在并同步文件:
# 进入虚拟机
vagrant ssh
# 查看虚拟机中的共享目录
ls /home/vagrant/project
# 在主机的 ./code 中创建文件,虚拟机中会同步出现;反之亦然
注意事项
- 权限问题:若虚拟机中访问共享文件夹提示 “权限不足”,可通过
owner和group参数指定为虚拟机中的用户(如vagrant),或手动在虚拟机中执行chmod调整权限。 - 性能优化:对于频繁读写的场景(如开发环境),建议使用
nfs: true(需主机支持 NFS,Windows 主机不适用),或rsync类型(单向同步,适合静态文件)。 - 路径格式:Windows 主机的路径建议用正斜杠(如
C:/Users/yourname/code),避免反斜杠转义问题。
通过以上配置,即可实现本地文件夹与虚拟机的无缝同步,方便开发时直接在主机编辑文件,虚拟机中实时生效。
安装docker
安装采用离线安装的方式,不依赖网络。从网盘中下载几个文件到刚才挂载的文件夹中。
启动虚拟机之后,进入到虚拟机的bash中,执行如下命令,安装docker
sudo su
# 必须将宿主机中的文件拷贝到linux中的文件夹中。因为宿主机中的文件没有执行权限,所以拷贝到系统中也没有执行权限, 不进行额外赋权的话,会导致docker启动失败。
cp -R /home/vagrant/documents/docker-install/ ~/docker-install/
cd ~/docker-install
bash install.sh -f ./docker-28.5.1.tgz
mkdir -p /usr/libexec/docker/cli-plugins/
cp ~/docker-install/docker-compose-linux-x86_64 /usr/libexec/docker/cli-plugins/docker-compose
chmod +x /usr/libexec/docker/cli-plugins/docker-compose
验证
安装完成之后,执行docker compose 命令如果正常输出,则说明docker 安装完成
root@vagrant:~/docker-install# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@vagrant:~/docker-install# chmod +x /usr/libexec/docker/cli-plugins/docker-compose
root@vagrant:~/docker-install# docker compose
Usage: docker compose [OPTIONS] COMMAND
Define and run multi-container applications with Docker
Options:
--all-resources Include all resources, even those not used by services
--ansi string Control when to print ANSI control characters ("never"|"always"|"auto") (default "auto")
--compatibility Run compose in backward compatibility mode
--dry-run Execute command in dry run mode
--env-file stringArray Specify an alternate environment file
-f, --file stringArray Compose configuration files
--parallel int Control max parallelism, -1 for unlimited (default -1)
--profile stringArray Specify a profile to enable
--progress string Set type of progress output (auto, tty, plain, json, quiet)
--project-directory string Specify an alternate working directory
(default: the path of the, first specified, Compose file)
-p, --project-name string Project name
网盘资源下载
通过网盘分享的文件:bentou-buntu-24.04-250221.box
链接: https://pan.baidu.com/s/1PYQvBI6lJ2LYiUiD5tcYpw?pwd=x8k9 提取码: x8k9
–来自百度网盘超级会员v6的分享
通过网盘分享的文件:docker
链接: https://pan.baidu.com/s/1pjBALmoL9u6NBdeYwrOvkA?pwd=59p7 提取码: 59p7
–来自百度网盘超级会员v6的分享