在windows系统下搭建环境需要注意事项:
安装软件前先检查电脑是否开启虚拟机的硬件加速技术, 开机进入BIOS选项 ,依次选Config –> CPU –> Intel Virtualization Technology,里面有个Intel VT-d Feature ,改成Enabled ,保存退出。
安装软件顺序是先安装VirtualBox,再安装vagrant。
1 安装VirtualBox和vagrant工具
1.1 在window系统搭建的虚拟开发环境
(1) 安装VirtualBox
如果安装过程中出现提示的错误是:VirtualBox Installation failed! Error,原因是有些服务未启动。
解决的方法: 我的电脑 –> 右键管理 –> 服务和应用程序 –> 服务 –> 启动Device Install Service和Device Setup Manager两个服务。
(2) 安装vagrant
下载安装完后在终端输入命令vagrant version查看是否安装成功,如果找不到命令添加vagrant的bin目录到系统path中。
1.2 在linux系统搭建的虚拟开发环境
sudo apt update
# 安装virtualBox虚拟机
sudo apt install virtualbox
# 安装vagrant
# 下载
curl -O https://releases.hashicorp.com/vagrant/2.2.9/vagrant_2.2.9_x86_64.deb
# 安装
sudo apt install ./vagrant_2.2.9_x86_64.deb
# 查看版本
vagrant --version
2 vagrant命令说明
命令 | 说明 |
---|---|
vagrant init 名称 | 初始化box的操作 |
vagrant box add 虚拟机名 box文件名 | 添加box的操作 |
vagrant up | 启动虚拟机的操作 |
vagrant ssh | 登录拟机的操作,也可以指定ID号登陆 |
vagrant box list | 显示当前已经添加的box列表 |
vagrant box remove 名称 | 删除相应的box |
vagrant destroy | 停止当前正在运行的虚拟机并销毁所有创建的资源 |
vagrant halt | 关机 |
vagrant status | 获取当前虚拟机的状态 |
vagrant suspend | 挂起当前的虚拟机 |
vagrant resume | 恢复前面被挂起的状态 |
vagrant reload | 重新启动虚拟机,主要用于重新载入配置文件 |
vagrant global-status | 查看所有虚拟机的ID号 |
vagrant plugin | 用于安装卸载插件 |
vagrant ssh-config | 输出用于ssh连接的一些信息 |
vagrant package | 打包命令,可以把当前的运行的虚拟机环境进行打包 |
vagrant ssh-config | 查看ssh登录信息,可以把这些信息 保存到.ssh文件下config中,先用vagrant ssh 登录,然后把宿主机的ssh公钥保存到虚拟机的authorized_keys文件里,然后在宿主机ssh <名称>就可以免密码登录 |
3 Vagrantfile配置文件说明
虚拟机镜像版本
config.vm.box = “centos8.1”
如果指定的镜像名称不存在,会自动去官网找拉取,过程会但非常慢长,建议在国内镜像库 http://mirrors.ustc.edu.cn/centos-cloud/centos/8/vagrant/ 下载到本地。
设置虚拟机硬件资源
config.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--memory", 1024]
v.customize ["modifyvm", :id, "--cpus", 1]
end
设置端口映射
config.vm.network “forwarded_port”, guest: 80, host: 8080
设置网络
# (1) 设置虚拟机私有网络 不能和主机同一个网段,如果只设置private_network,除了主机,其他机器不能访问。
config.vm.network "private_network", ip: "172.17.0.100"
# (2) 设置公有网络绑定网桥,使得除了主机以外可以访问虚拟机
config.vm.network "public_network", bridge: "宿主机的网络名称", adapter: 2, auto_config: false
# 其中adapter值1(nat)、2(hostonly)、3(bridged),必须选择bridged模式才能允许外网访问。
# 使用命令ifconfig查看宿主机网络名称为 eno1
eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.3.5 netmask 255.255.255.0 broadcast 192.168.3.255
inet6 fe80::8455:4306:723e:a1d prefixlen 64 scopeid 0x20<link>
ether 54:bf:64:6d:a3:dc txqueuelen 1000 (以太网)
设置provision任务
provision任务会在原生镜像的基础上,进行一些附加的操作,以改变虚拟机的环境,比如安装应用,发布程序等。可以编写一些命令,让vagrant在启动虚拟机的时候自动执行,节省手动配置环境的时间。
脚本什么时候会被执行?
- 第一次执行vagrant up命令
- 执行vagrant provision命令
- 执行vagrant reload –provision或者vagrant up –provision命令
- 你也可以在启动虚拟机的时候添加–no-provision参数以阻止脚本被执行
-
provision任务一些默认值:
- 默认只执行一次,如果需要每次执行,添加参数run:“always”
- 默认是sudo权限执行脚本,可以使用privileged: false改为非root权限执行。
- 脚本分为行内脚本和外部脚本,外部脚本既可以是本地,也可以是网络地址,例如”https://example.com/provisioner.sh"
# (1) 外部脚本,Vagrant会上传这个脚本到虚拟机并执行。
config.vm.provision "shell", path: <脚本位置>
# (2) 行内脚本
# 单行脚本
config.vm.provision "shell",inline: "echo Hello World"
# 对于多行命令脚本,需要明确命令边界
config.vm.provision "shell" do |s|
s.inline = <<-SHELL
# 更改时区
cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
SHELL
end
设置上传文件
# 将host主机的./config上传到 vm虚拟机的目标文件./Vagrantfile。
config.vm.provision "file", source: "./config", destination: "Vagrantfile"
通过Vagrantfile配置可以很方便一次创建一个或多个自定义环境的虚拟机,例如启动一个安装有docker环境的虚拟机,因为第一次启动虚拟机时可以执行自定义脚本文件。
4 Vagrantfile配置文件模板示例
Vagrant.require_version ">= 1.6.0"
# 设置虚拟机参数
opts = {
# 虚拟机名称
:name => "mydemo",
# 虚拟机内存大小
:mem => "2048",
# 虚拟机CPU核数
:cpu => "2",
# 虚拟机私有ip地址,不可以设置和宿主机在同一网段
:host_ip => "192.168.6.100",
# 如果需要,可以连接网桥
:bridge_network => "en0: Wi-Fi (AirPort)",
# 宿主机共享文件夹路径,虚拟机共享文件夹在/home/vagrant
#:synced_folder => "./synced_folder",
# 第一次启动虚拟机执行外部脚本
:script_path => "./setup.sh",
# 端口映射,可以添加多个端口,
# 然后在虚拟机configure添加demo.vm.network :"forwarded_port", guest: opts[:guest_portN], host: opts[:host_portN]
:guest_port1 => "80",
:host_port1 => "8080",
:guest_port2 => "3306",
:host_port2 => "13306"
}
# 如果需要创建多个虚拟机,复制上面参数列表改名并设置参数
Vagrant.configure(2) do |config|
# 虚拟机镜像版本,如果本地不存在,会去官网拉取
config.vm.box = "centos/7"
# 起始---------------------------------------------------------------------
config.vm.define opts[:name] do |demo|
# 虚拟机名称
demo.vm.hostname = opts[:name]
# 虚拟机硬件资源
demo.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--memory", opts[:mem]]
v.customize ["modifyvm", :id, "--cpus", opts[:cpu]]
end
# 虚拟机私有网络, 不能和主机同一个网段,如果只设置private_network,除了主机,其他机器不能访问。
demo.vm.network "private_network", ip: opts[:host_ip]
# 设置桥接网络,使得除了主机以外可以访问虚拟机,如果指定ip值表示为静态ip,不指定ip值就随机分配
#config.vm.network "public_network", bridge: opts[:bridge_network], ip: opts[:host_ip], adapter: 2, auto_config: false
# 端口映射,映射端口个数根据设置而定
demo.vm.network :"forwarded_port", guest: opts[:guest_port1], host: opts[:host_port1]
demo.vm.network :"forwarded_port", guest: opts[:guest_port2], host: opts[:host_port2]
# 设置共享目录,注意:如果使用了最小化centos系统,是没有安装VirtualBox增强功能的,
# 可以在外部脚本或进入添加"yum update -y"、"yum install -y kernel-devel"这两条命令,
# 然后取消注释共享命令,重新加载Vagrantfile启动虚拟机。
#demo.vm.synced_folder opts[:synced_folder], "/home/vagrant"
# 执行外部脚本
demo.vm.provision "shell", path: opts[:script_path]
end
# 结束---------------------------------------------------------------------
# 如果有多个虚拟机,复制上面信息创建一个新虚拟机
end
5 创建一个已安装docker的虚拟机示例
(1) 下载镜像到本地
wget http://mirrors.ustc.edu.cn/centos-cloud/centos/8/vagrant/x86_64/images/CentOS-8-Vagrant-8.1.1911-20200113.3.x86_64.vagrant-virtualbox.box -O centos8.1.box
(2) 编辑Vagrantfile
修改主机名称、内存大小、cpu核数、宿主机网络名称,内容如下:
Vagrant.require_version ">= 1.6.0"
opts = {
:name => "vbox",
:mem => "2048",
:cpu => "2",
:bridge_network => "eno1",
:script_path => "./setup.sh"
}
Vagrant.configure(2) do |config|
config.vm.box = "centos8.1"
config.vm.define opts[:name] do |demo|
demo.vm.hostname = opts[:name]
demo.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--memory", opts[:mem]]
v.customize ["modifyvm", :id, "--cpus", opts[:cpu]]
end
config.vm.network "public_network", bridge: opts[:bridge_network], adapter: 2, auto_config: false
demo.vm.provision "shell", path: opts[:script_path]
end
end
** (3) 编辑安装docker脚本文件 setup.sh,内容如下:**
#/bin/sh
# 设置时区
cp -r /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# -------------------------安装docker-----------------------------
# 安装一些工具
yum install -y vim git yum-utils openssh-server device-mapper-persistent-data lvm2
# 添加yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 查看可安装的版本
yum list docker-ce --showduplicates | sort -r
# 安装最新版本docker
yum install -y docker-ce
# 把docker权限添加到当前用户中,避免每次使用添加sudo
sudo usermod -aG docker vagrant
# 镜像加速
sudo touch /etc/docker/daemon.json
sudo chmod 666 /etc/docker/daemon.json
echo '{"registry-mirrors": ["https://zrxnbavs.mirror.aliyuncs.com"]}' >> /etc/docker/daemon.json
sudo chmod 644 /etc/docker/daemon.json
# 设置开机启动docker和启动docker
systemctl enable docker
systemctl start docker
# 查看docker版本信息
docker version
(4) 启动虚拟机
# 启动,启动完成后会在生成.vagrant目录
vagrant up
# 进入虚拟机终端
vagrant ssh
注:虚拟机默认帐号和密码为vagrant:vagrant
(5) 允许其他主机使用ssh登录
打开sshd配置文件 /etc/ssh/sshd_config,把字段PasswordAuthentication值no改为yes
专题「工具」的其它文章 »
- TLS和SSL (Nov 17, 2020)
- prometheus基础和使用 (Aug 20, 2019)
- kubernetes基础和使用 (Sep 30, 2018)
- 使用gitlab和gitlab-runner实现DevOps (Sep 15, 2018)
- 一款漂亮的命令行工具——cmder (Sep 10, 2018)
- 搭建个人代码托管git服务 (Aug 19, 2018)
- docker基础和使用 (Aug 10, 2018)
- goland IDE使用说明 (Aug 07, 2018)