Windows下搭建Vagrant+VirtualBox环境

1,618 阅读6分钟

前言

最近在折腾一些东西,需要使用docker,但是我的机器配置很神奇,无法直接安装docker,没得法子我只好曲线救国了---使用Vagrant+VirtualBox。

安装 VirtualBox

下载 VirtualBox 安装包

VirtualBox 下载页面地址(不保证长期有效):

https://www.virtualbox.org/wiki/Downloads

我现在的是window版本,具体链接如下(不保证长期有效):

https://download.virtualbox.org/virtualbox/6.1.30/VirtualBox-6.1.30-148432-Win.exe

大家注意 vagrant 和 VirtualBox 的版本,不同的版本之间可能会出现兼容性问题,大家最好和我的保持一致,毕竟坑我已经趟过了。virtualbox:6.1.30版本;vagrant :2.2.19

安装vagrant

下载vagrant 安装包

vagrant下载页面地址:

https://www.vagrantup.com/downloads
下载界面

直接下载64位的即可,我下载时的版本为vagrant_2.2.19,具体链接如下(不保证长期有效):

https://releases.hashicorp.com/vagrant/2.2.19/vagrant_2.2.19_x86_64.msi
安装vagrant

没啥特别的直接next下一步下一步就行,当然可以自行选择安装地址,这个看自己的意愿。

下载虚拟机镜像

这个虚拟机镜像下载的速度真的是很感人!所以我们要先下好镜像,然后直接用命令添加到vagrant的box中就可以了。下载页面的地址如下(不保证长期有效):

https://app.vagrantup.com/centos/boxes/7

我下载的是centos7镜像,具体链接如下(不保证长期有效):

别问为什么还使用centos7,问就是习惯了centos。

https://cloud.centos.org/centos/7/vagrant/x86_64/images/CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box
自定义项目地址

通过 Vagrant 创建虚机需要先导入镜像文件,也就是 box,它们默认存储的位置在用户目录下的 .vagrant.d 目录下,对于 Windows 系统来说,就是 C:\Users\用户名.vagrant.d。如果后续可能会用到较多镜像,或者你的 C 盘空间比较紧缺,可以通过设置环境变量 VAGRANT_HOME 来设置该目录。

window系统

setx VAGRANT_HOME "D:\ProgramFiles\vagrant\boxData"
setx VAGRANT_HOME "D:\ProgramFiles\vagrant\boxData" /M

linux 系统

export VAGRANT_HOME="/path/to/vagrant_home"

window系统下使用cmd执行上述命令后,记得重新打开cmd配置才会生效。

添加本地镜像

我将镜像放在D:\ProgramFiles\vagrant\data目录下,在cmd上执行下面的命令添加镜像:

vagrant box add centos/7 ./CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box

如果提示没有权限则请使用管理员权限启动cmd

执行完毕提示下面的文字则镜像添加成功:

==> box: Successfully added box 'centos/7' (v0) for 'virtualbox'!
新建虚机

还是在D:\ProgramFiles\vagrant\data目录下,执行下面的命令:

vagrant init centos/7

出现下面的文字提示则认为初始化成功:

A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
启动虚拟机

执行下面的命令之前,记得先启动VirtualBox

vagrant up

出现下面的文字提示则认为虚拟机启动成功:

D:\ProgramFiles\vagrant\data>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: No guest additions were detected on the base box for this VM! Guest
    default: additions are required for forwarded ports, shared folders, host only
    default: networking, and more. If SSH fails on this machine, please install
    default: the guest additions and repackage the box to continue.
    default:
    default: This is not an error message; everything may continue to work properly,
    default: in which case you may ignore this message.
==> default: Configuring and enabling network interfaces...
==> default: Rsyncing folder: /cygdrive/d/ProgramFiles/vagrant/data/ => /vagrant
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.

这个地方坑就比较多了,一是前面提到的vagrant和virtualbox两者版本兼容的问题。二就是中文用户名的问题。前面说到创建成功的镜像文件保存在 C:\Users\用户名.vagrant.d路径下,vagrant采用ruby语言编写会遇到一些编码的问题,碰巧我的用户名也是中文,网上解决方案折腾了半天,最后我直接新建了一个windows用户解决。

接下来你就可以在VirtualBox中看到一个已经启动的虚拟机。

虚拟机启动成功

附上我的Vagrantfile配置文件

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  # The most common configuration options are documented and commented below.
  # For a complete reference, please see the online documentation at
  # https://docs.vagrantup.com.

  # Every Vagrant development environment requires a box. You can search for
  # boxes at https://vagrantcloud.com/search.
  config.vm.box = "centos/7"
  config.vm.network "private_network", ip: "192.168.33.10"

end
登录虚拟机

vagrant默认有两个账户,具体如下:

账户:vagrant 密码: vagrant
账户:root    密码: vagrant

其实vagrant默认的是使用密钥登录,直接执行vagrant ssh命令即可登录,但是登录的是vagrant 账户,但在虚拟机中安装一些软件,例如docker是需要使用root账户权限的,所以该如何解决呢? vagrant ssh命令登录 虚拟机

直接使用 su 命令,然后输入密码 vagrant即可。

可以使用 vagrant ssh-config 查看具体的登录配置:

D:\ProgramFiles\vagrant\data>vagrant ssh-config
  Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile D:/ProgramFiles/vagrant/data/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL

上面说到使用vagrant ssh 登录虚拟机,但是有些地方还是不太方便,所以还是需要使用专业的终端软件登录虚拟机,这里我使用的是MobaXterm,以前我都是使用xshell+xftp的,无奈后面没法白*嫖,就换了这个MobaXterm,用起来感觉还行。

配置如下

这个host我尝试使用前面Vagrantfile文件中的IP地址 192.168.33.10,但是无法连接。

安装jdk8

接下来我们就登录虚拟机,先安装一下jdk8。下面的步骤都是在虚拟机中操作的。

下载jdk8安装包

Oracle的Java8下载页面地址(不保证长期有效):

https://www.oracle.com/java/technologies/downloads/#java8

我选择的是x64 Compressed Archive版本,具体下载地址如下(这个链接应该也会随时失效的):

https://download.oracle.com/otn/java/jdk/8u311-b11/4d5417147a92418ea8b615e228bb6935/jdk-8u311-linux-x64.tar.gz?AuthParam=1638083601_4ec49a992915eff50f4be9d904997568
下载地址

可以在window下下载好然后传到Linux里,不过我建议直接在Linux中下载,毕竟就是一个命令的事情:

cd /usr/local/src

wget https://download.oracle.com/otn/java/jdk/8u311-b11/4d5417147a92418ea8b615e228bb6935/jdk-8u311-linux-x64.tar.gz?AuthParam=1638083601_4ec49a992915eff50f4be9d904997568

现在下载需要登录账户了,这里提供一个Oracle登录账户

账户:pigide3064@fxseller.com 密码:Azerty1!

账户随时会失效,若是失效自己百度或者直接注册一个账户吧!

安装jdk8
  1. 创建安装目录

    mkdir /usr/local/java
    
  2. 将安装包解压至安装目录

    tar -zxvf /usr/local/src/jdk-8u311-linux-x64.tar.gz\?AuthParam\=1638083601_4ec49a992915eff50f4be9d904997568  -C /usr/local/java/
    
    
  3. 设置环境变量,将Java添加至环境变量中

    打开文件

    vim /etc/profile
    

    在文件的末尾处增加

    
    export JAVA_HOME=/usr/local/java/jdk1.8.0_311
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=${JAVA_HOME}/bin:$PATH
    
    

    执行source命令重载profile文件

    source /etc/profile
    

    添加软连接(这一步不做好像也是可以的)

    ln -s /usr/local/java/jdk1.8.0_311/bin/java /usr/bin/java
    
  4. 检查效果如何:

java -version

结果出现下面的文字则代表java安装完成。 检查效果

安装docker

在安装docker之前记得先切换到root用户。

  1. 不管三七二十一先执行下面的命令,卸载系统自带的docker。

    yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-engine
    
  2. 开始安装docker,执行的相关命令如下:

    
    # step 1: 安装必要的一些系统工具
    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    # Step 2: 添加软件源信息
    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    # Step 3: 更新并安装Docker-CE
    sudo yum makecache fast
    sudo yum -y install docker-ce
    # Step 4: 开启Docker服务
    sudo service docker start
    
    # 开机启动
    systemctl enable docker
    

    参考资料参见我之前的文章 在CentOS7上使用yum安装Docker

安装docker composer

这都是用docker了那容器编排起码也要用一下,这里我就用docker composer了。安装的相关命令如下:

  1. 运行以下命令下载 Docker Compose 的当前稳定版本:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

这里使用的是官方文档里的示例,安装的是1.29.2版本。链接:https://docs.docker.com/compose/install/

  1. 将可执行权限应用于二进制文件:

    chmod +x /usr/local/bin/docker-compose
    
  2. 测试安装结果:

    docker-compose --version
    

    如果展现下面提示则代表docker-compose安装完成。

    [root@localhost vagrant]# docker-compose --version
    docker-compose version 1.29.2, build 5becea4c
    [root@localhost vagrant]#
    

总结

这样我们就完成了Vagrant+VirtualBox环境配置,也在虚拟机中配置好了Java环境和docker。