• vagrant+java+springcloud+redis+zookeeper镜像下载(&制作详解)



    《SpringCloud Nginx 高并发核心编程》 环境搭建 - 系列

    组件 链接地址
    windows centos 虚拟机 安装&排坑 vagrant+java+springcloud+redis+zookeeper镜像下载(&制作详解))
    centos mysql 安装&排坑 centos mysql 笔记(内含vagrant mysql 镜像)
    linux kafka安装&排坑 kafka springboot (或 springcloud ) 整合
    Linux openresty 安装 Linux openresty 安装
    【必须】Linux Redis 安装(带视频) Linux Redis 安装(带视频)
    【必须】Linux Zookeeper 安装(带视频) Linux Zookeeper 安装, 带视频
    Windows Redis 安装(带视频) Windows Redis 安装(带视频)
    RabbitMQ 离线安装(带视频) RabbitMQ 离线安装(带视频)
    ElasticSearch 安装, 带视频 ElasticSearch 安装, 带视频
    Nacos 安装(带视频) Nacos 安装(带视频)
    【必须】Eureka Eureka 入门,带视频
    【必须】springcloud Config 入门,带视频 springcloud Config 入门,带视频
    【必须】SpringCloud 脚手架打包与启动 SpringCloud脚手架打包与启动
    Linux 自启动 假死自启动 定时自启 Linux 自启动 假死启动

    1 什么是vagrant

    必先利其器,开发环境 和 开发工具 就是 我们开发人员的剑,所以我们需要一个快并且好用的剑

    Vagrant:是一个比较流行的虚拟机管理软件,使用Vagrant 可以让我们用命令直接从云上下载虚拟机的镜像,然后进行创建和管理等。

    刚开始做开发的时候的都是把开发环境 配置在 自己的电脑上,随着后面我们接触的东西越来越多,慢慢的电脑上都是各种环境了,php,java,python,nodejs等等,非常麻烦,并且经常由于某种原因就把电脑重装了,ORZ,所以环境都要重来。所以打造一个属于自己并且可以移动的环境是非常重要的。

    vagrant就是一款构建虚拟开发环境的工具,支持window,linux,mac,总有一款适合你。并且vagrant 可以把配置好的环境打包成一个box,分享给其他人直接使用,非常方便

    vagrant 是一个很适合开发者的虚拟环境部署工具,本身集成了主流的虚拟器管理工具,支持 vmvare 和 virtualbox。

    vagrant 的精髓在一个 Vagrantfile 里面,和 docker 的 Dockerfile 功能上一样。我们只需要把需要安装部署的步骤写在 Vagrantfile 里面,便可以实现轻松部署。vagrant 还支持把当前系统做成一个.box 后缀命名的镜像,类似 docker 的 image,可轻松实现环境的移植。

    所以,使用vagrant可以在运行着多台vm的系统上定义复杂的虚拟框架。可以通过 Vagrant 封装一个 Linux 的开发环境,分发给团队成员。成员可以在自己喜欢的桌面系统(Mac/Windows/Linux)上开发程序,代码却能统一在封装好的环境里运行,非常霸气。是不是很酷?

    2 准备工作:

    下载安装 VirtualBox ,下载安装 Vagrant ,下载更多不同系统甚至是已经配置好环境直接可以用的box,虽然可以直接在Vagrant直接使用网址,由Vagrant自动下载安装,但是考虑到网络情况,还是建议自行先下载好。

    还可以在 http://www.vagrantbox.es/ 这里下载更多不同系统甚至是已经配置好环境直接可以用的box,虽然可以直接在Vagrant直接使用网址,由Vagrant自动下载安装,但是考虑到网络情况,还是建议自行先下载好。

    此外,还得下载官方封装好的基础镜像:
    Ubuntu precise 32 VirtualBox http://files.vagrantup.com/precise32.box
    Ubuntu precise 64 VirtualBox http://files.vagrantup.com/precise64.box
    
    如果你要其他系统的镜像,可以来这里下载:http://www.vagrantbox.es/
    
    网友提供的centos 7.2网盘地址:https://pan.baidu.com/s/15S2OZq37FcL9RWWSTWntIw   提取码:3xb0
    
    • GitBash
      GitBash是windows下的Unix shell,方便向Vagrant输入指令。(一般的java开发,都会使用git进行代码同步,所以此工具默认是已经安装了的)
      https://git-scm.com/download/win

    空间:

    15G 的硬盘空间

    什么是:springcloud.box镜像

    疯狂创客圈网盘,为大家准备了springcloud.box镜像,里边预装了java 、 redis 、zookeeper、kafka、Eureka、springcloud config 等必须的组件。网盘地址请参见【博客园总入口

    在这里插入图片描述

    3 使用vagrant制作Java开发环境

    第一步,新建目录

    E:virtualwork
    

    选择新建立的文件夹作,右键 —> Git Bash Here,在Git Bash打开当前目录

    在 Git Bash 中可以看到,当前的linux 格式目录,执行指令如下:

    $ pwd
    /e/virtual/work

    第二步,添加镜像到 Vagrant

    vagrant box add  centos  /e/virtual/vagrant-centos-7.2.box
    centos 表示指定名称,如果使用base,之后可以直接使用 
    

    $ vagrant box add centos /e/virtual/vagrant-centos-7.2.box
    ==> box: Box file was not detected as metadata. Adding it directly...
    ==> box: Adding box 'centos' (v0) for provider:
    box: Unpacking necessary files from: file:///E:/virtual/vagrant-centos-7.2.box
    box:
    ==> box: Successfully added box 'centos' (v0) for 'virtualbox'!

    $

    vagrant-centos-7.2.box是box的文件名,这里是本地保存box的路径。也可以是可以下载box的网址,如果是网址的话,Vagrant会自动启动下载。

    第三步,初始化虚拟机

    设置好box之后,在当前工作目录运行

    $ vagrant init centos
    

    centos为初始化的时候需要指定box的名称。执行的结果如下:

    $ vagrant init centos
    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.

    你也可以使用已有的目录,切换到开发目录里,用 centos 镜像初始化当前目录。初始化镜像之后,在当前目录生成一个虚拟机的配置文件 Vagrantfile,通过该配置文件,可以配置端口映射、虚拟机的IP、目录映射等。通过文本编辑器打开Vagrantfile可以进行一些进一步的常用配置,如果配置登录用户名称和密码,虚拟机的ip如下:

    config.ssh.username = "root"
    config.ssh.password = "vagrant"
    
    config.vm.network :private_network, ip: "192.168.68.128"
    

    重启虚拟机,这样我们就能用 192.168.233.128 访问这台机器了,你可以把 IP 改成其他地址,只要不产生冲突就行。

    具体的配置,稍后介绍。

    第四步,启动虚拟机

    使用如下命令:

    $ vagrant up   # 启动虚拟机
    

    你会看到终端显示了启动过程,启动完成后,我们就可以用 SSH 登录虚拟机了,剩下的步骤就是在虚拟机里配置你要运行的各种环境和参数了。

    $ vagrant ssh # SSH 登录
    $ cd /vagrant # 切换到开发目录,也就是宿主机上的 E:virtualwork

    Windows 用户注意:Windows 终端并不支持 ssh,所以需要安装第三方 SSH 客户端,比如:Putty、Cygwin 、Git Bash等。

    有关初始账户和密码:

    账户 密码
    vagrant vagrant
    root vagrant

    可以使用其他的终端工具,通过root访问虚拟机了

    4 打包分发

    当你配置好开发环境后,退出并关闭虚拟机。在终端里对开发环境进行打包:

    $ vagrant package
    

    打包完成后会在当前目录生成一个 package.box 的文件,将这个文件传给其他用户,其他用户只要添加这个 box 并用其初始化自己的开发目录就能得到一个一模一样的开发环境了。

    执行的过程如下:

    
    $ vagrant halt
    ==> default: Attempting graceful shutdown of VM...
    ==> default: Forcing shutdown of VM...
    
    
    $ vagrant package --output  springcloud-dev.box
    ==> default: Clearing any previously set forwarded ports...
    ==> default: Exporting VM...
    ==> default: Compressing package to: E:/virtual/work/springcloud-dev
    
    $ vagrant box list
    centos (virtualbox, 0)
    
    

    命令的具体说明:

    vagrant package -hUsage: vagrant package [options] [name]

    Options:
    --base NAME virtualbox程序里面的虚拟机的名称,不是box的名字也不是Vagrantfile里面的虚拟机名称.默认是打包当前目录下面的虚拟机。
    --output NAME 要打包成的box名称,不会自动添加.box后缀,要手动加.默认值package.box

    ​ --include FILE... 打包时包含的文件名,你可以把.box文件理解为一个压缩包
    ​ --vagrantfile FILE 打包时包含的Vagrantfile文件,原理和上面类似
    ​ -h, --help Print this help
    例子:vagrant package –base virtualbox_vm_name –output newbox_name.box

    5 通过Vagrantfile进行虚拟机配置:

    网络配置:

    Vagrant的网络有三种模式

    1、较为常用是端口映射,就是将虚拟机中的端口映射到宿主机对应的端口直接使用 ,在Vagrantfile中配置:

    config.vm.network :forwarded_port, guest: 80, host: 8080
    

    guest: 80 表示虚拟机中的80端口, host: 8080 表示映射到宿主机的8080端口。

    2、如果需要自己自由的访问虚拟机,但是别人不需要访问虚拟机,可以使用private_network,并为虚拟机设置IP ,在Vagrantfile中配置:

     config.vm.network :private_network, ip: "192.168.1.104"
    

    192.168.1.104 表示虚拟机的IP,多台虚拟机的话需要互相访问的话,设置在相同网段即可

    3、如果需要将虚拟机作为当前局域网中的一台计算机,由局域网进行DHCP,那么在Vagrantfile中配置:

    config.vm.network :public_network
    

    目录映射:

    默认的,vagrant将共享你的工作目录(即Vagrantfile所在的目录)到虚拟机中的/vagrant,所以一般不需配置即可,如你需要可配置:

    Vagrant.configure("2") do |config|
    
    
      config.vm.synced_folder "src/", "/srv/website"
    end
    
     
    

    "src/":物理机目录;"/srv/website"虚拟机目录

    目录映射(文件夹)详细说明如下:

    既然是开发环境,那么开发工作肯定还是需要在本地完成,而不是都要进到虚拟机中去完成,虚拟机就好好在后台运行服务就好了,不然就本末倒置了,所以这里就需要使用目录映射功能,将本地的目录映射到虚拟机的对应目录。

    默认情况下,当前的工作目录,会被映射到虚拟机的 /vagrant 目录,当前目录下的文件可以直接在 /vagrant 下进行访问,当然也可以在通过 ln 创建软连接,如

    ln -fs /vagrant/wwwroot /var/www
    

    来进行目录映射,当然,从自动化配置的角度,能不进系统就不需要进系统,所以在Vagrant也可以进行目录映射的操作:

    config.vm.synced_folder "wwwroot/", "/var/www"
    

    前面的参数 “wwwroot/” 表示的是本地的路径,这里使用对于工作目录的相对路径,这里也可以使用绝对路径,比如: “d:/www/”

    后面的参数 “/var/www” 表示虚拟机中对应映射的目录。

    当在启动Vagrant后,对于虚拟机有进行过安装环境相关的配置,如果并不希望写在Vagrant的启动shell里面每次都重新安装配置一遍,可以将当前配置好的虚拟机打包成box,

    注:如果网络模式中使用 private_network 的话,在打包之前需要清除一下private_network的设置,避免不必要的错误:

    sudo rm -f /etc/udev/rule.d/70-persistent-net.rules
    

    制作完成之后直接将box文件拿到其他计算机上配置即可使用。

    更多信息可以参考官方文档:http://docs.vagrantup.com/v2/
    

    启动的时自运行需要的shell命令或脚本

    内部脚本:

    Vagrant::Config.run do |config|
      config.vm.provision :shell, :inline => "echo abc > /tmp/test"
    end
    

    外部脚本:

     
    
    Vagrant.configure("2") do |config|
      config.vm.provision :shell, :path => "script.sh"   #脚本的路径相对于项目根,也可使用绝对路径
    end
    
    
    

    附:简单的vagrantfile文件

    Vagrant.configure(2) do |config|
    	config.ssh.username = "root"
    	config.ssh.password = "vagrant"
        config.vm.box = "centos"
        config.vm.network "private_network", ip: "192.168.68.128"
    
       config.vm.synced_folder "/home/wangkongming/files/works/code/kfz-pm", "/data/webroot/pmv2"
       
    end
    

    6 vagrant 基本命令

    官网文档:https://docs.vagrantup.com/v2/getting-started/index.html

    vagrant init 初始化vagrantfile

    vagrant add box 添加box,自动帮你生成vagrantfile

    vagrant halt 关闭虚拟机

    vagrant destroy 销毁虚拟机

    vagrant ssh 连接虚拟机

    vagrant reload 重新加载vagarntfile文件

    vagrant suspend 暂时挂起虚拟机

    vagrant status 查看虚拟机运行状态

    vagrant package 打包 box文件

    vagrant box list 首先查看已经添加的box:

    user@DESKTOP-FJ882IS MINGW64 /e/virtual/work
    $ vagrant box list
    centos (virtualbox, 0)
    
    

    7 虚拟机集群

    建立虚拟机目录

    先建立一个目录: /e/virtual/workcluster,通过 Git Bash进入 /e/virtual/workcluster,然后

    添加镜像到 Vagrant

    把下载的镜像springcloud-dev.box放入目录,添加镜像到 Vagrant

    vagrant box add  springcloud-dev  springcloud-dev.box
    

    springcloud-dev 表示指定名称,如果使用base,之后可以直接使用

    初始化镜像

    $ vagrant init springcloud-dev

    输出以下日志:

    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.
    在当前目录生成了 Vagrantfile 文件。

    修改Vagrantfile

    修改文件以下:

    # -*- mode: ruby -*-
    # vi: set ft=ruby :
    
    # Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
    VAGRANTFILE_API_VERSION = "2"
    
    Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
    
      (1..3).each do |i|
        config.vm.define vm_name = "cdh#{i}"  do |config|
            config.vm.provider "virtualbox" do |v|
                v.customize ["modifyvm", :id, "--name", vm_name, "--memory", "2048",'--cpus', 1]
            end
            config.vm.box = "springcloud-dev"
            config.vm.hostname =vm_name
            config.ssh.username = "root"
            config.ssh.password = "vagrant"
            config.vm.network :private_network, ip: "192.168.56.12#{i}"
    								config.vm.provision :shell, :path => "bootstrap.sh"
        end
      end
    end
    

    上面的文件中定义了三个虚拟机,三个虚拟机的名字和 hostname 分别为cdh一、cdh二、cdh3,网络使用的是 host-only 网络。

    在启动成功以后,会运行 bootstrap.sh 脚本,你能够编写你本身的脚本。

    bootstrap.sh 脚本

    #!/usr/bin/env bash
    
    # The output of all these installation steps is noisy. With this utility
    # the progress report is nice and concise.
    
    echo "Update /etc/hosts"
    cat > /etc/hosts <<EOF
    127.0.0.1       localhost
    
    192.168.56.121 cdh1
    192.168.56.122 cdh2
    192.168.56.123 cdh3
    EOF
    
    echo "Disable iptables"
    setenforce 0 >/dev/null 2>&1 && iptables -F
    
    ### Set env ###
    echo "export LC_ALL=en_US.UTF-8"  >>  /etc/profile
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    
    • 设置hosts文件
    • 关掉防火墙
    • 设置虚拟机时区

    启动集群

    $ vagrant init springcloud-dev
    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.
    
    $ vagrant up
    ....省略一大堆的输出
    

    回到◀疯狂创客圈

    疯狂创客圈 - Java高并发研习社群,为大家开启大厂之门

  • 相关阅读:
    @loj
    @codeforces
    @bzoj
    @hdu
    @poj
    @loj
    @bzoj
    @bzoj
    Python配合BeautifulSoup读取网络图片并保存在本地
    Java--多线程读取网络图片并保存在本地
  • 原文地址:https://www.cnblogs.com/crazymakercircle/p/14194688.html
Copyright © 2020-2023  润新知