使用vagrant+virtualbox+docker构建一个开发环境

基础知识

这些都是构建过程中涉及到的一些点

  • VirtualBox:一款开源的虚拟机软件,用于构建虚拟机,在这台虚拟机上可以安装系统和软件,与真实的电脑一般无二。
  • Vagrant:用于创建和部署虚拟化开发环境。可理解成vagrant利用virtualbox提供的接口,创建和管理虚拟机。(理解:可以在gitbash中打开vagrant,vagrant通过在gitbash窗口里输入的命令,建立删除和操作虚拟机)
  • SSH客户机:可以理解乘一个远程传输协议,是linux系统的标配
  • Git bash:建议用git bash操作vagrant,因为比较像linux的命令,我们在虚拟机中所用的一般都是linux命令;可以通过新建一个ssh连接的方法连接上虚拟机(理解:gitbash就是Windows下的命令行窗口,在gitbash中可以通过vagrant连上虚拟机然后进行执行命令,就跟在虚拟机里执行命令一样)
  • 镜像:镜像是一种文件存储形式,是冗余的一种类型,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本即为镜像。(理解:就是能在不同主机上保持一样的文件)
  • 本机和虚拟机的ping:具体ping的命令自行搜索(理解:安装完虚拟机后,为了检验有没有安装好,可以进行ping;这个是为了配置网络,或者说让虚拟机能和主机通信。。。)
  • sudo:sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。换句话说通过此命令可以让非root的用户运行只有root才有权限执行的命令。(理解:提升权限用)
  • docker:Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。Docker是虚拟化容器技术,docker基于镜像,可以秒级启动各种容器,每一中容器都是一种完整的运行环境,容器之间相互隔离。
    —想象一个关系图:镜像在中间,四周是仓库、容器、dockerfile、tar文件,这就组成了docker
    —docker中可以pull镜像,也可以push镜像
    —docker可以下载很多镜像,也可以上传,可以用run来运行镜像。
    —run一个镜像的时候,把外部的80端口映射到内部的80,这样内部的80端口就是运行了这个镜像了。
    —镜像运行起来,就是一个容器了,可以通过bash命令进入这个容器,然后再容器里进行操作(比如在Nginx容器里,改变index文件里的内容为hello,然后点击80端口,进入这个容器,这时候浏览器就显示hello。)
    —强大功能:对容器进行操作和修改,保存成镜像,之后在别的及其重新运行这个镜像,是保持了修改的。
    (理解:docker就是一个小型的虚拟机,也可以理解为这就是一个小型的容器;docker可以操作很多镜像,把这些镜像运行了就是一个容器,docker可以从仓库中pull和push这些镜像,有点像是一个版本控制的工具。)
    ●docker常用命令:
    pull nginx 镜像:docker pull nginx(等效于nginx:latest)
    运行:docker run -【d】(后台运行不阻塞shell) 【-p 80:80】(指定容器端口映射,内部:外部) nginx
    查看正在运行:docker ps
    删除容器:docker rm -f container id(不用打全,前缀区分)
    进入bash:docker exec -it container id(不用打全,前缀区分) bash
    commit镜像:docker commit container’id(不用打全,前缀区分) name
    查看镜像列表:docker images (刚才commit的镜像)
    使用运行刚才commit的镜像:docker run -d name
    使用Dockerfile构建镜像:docker build -t name 存放Dockerfile的文件夹
    删除镜像:docker rmi name
    保存为tar:docker save name tar name
    从tar加载:docker load tar name
    一些启动参数:
    后台运行容器:-d
    容器内外端口映射:-p 内部端口号:外部端口号
    目录映射:-v dir name : dir
    指定映像版本:name:ver
    ●为什么要用docker安装mysql:有了docker,只需要一行代码就能拉取所需软件的镜像,然后配置一个容器就启动了。需要开发的时候就打开docker,服务便能够运行。占用的空间也小,性能和原生差异不大。增删查改都只需要一行代码就能完成。卸载起来也毫无残留。更重要的是,我可以同时有一个镜像的几个容器。即使我搞坏了一个,也可以用其他的容器。还能随时监测这些容器的磁盘占用等状态。(理解:利用docker将mysql直接安装到虚拟机里,还可以自己配置到主机的某个端口里,很方便)

安装版本

  • virtualbox 6.1.22
  • vagrant 2.2.16
  • 虚拟机centOS7
  • docker最新版即可
  • 利用docker安装mysql5.7和redis6.0

安装步骤

安装virtual box和vagrant

  1. 去virtualbox和vagrant的官网下载安装包,一路next。
  2. 去vagrant官网的find box找虚拟机的镜像,用比较多人下载的镜像就好,我用的是CentOS7。网址点进去是两个命令,一个是vagrantfile里的,一个是初始化命令(vagrant init centos/7),这两个命令之后用到。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  3. 用gitbash命令进入D盘(自己想要保存的路径),新建floatCentOS文件夹;
    用vagrant安装镜像到floatCentOS文件夹下:vagrant box add centos/7
  • 发生错误:编码不对。解决方法:修改vagrant文件的权限,写入Encoding.default_external = Encoding.find(‘Windows-1251’)和Encoding.default_internal = Encoding.find(‘Windows-1251’),成功解决;
  1. 使用vagrant box list命令显示:centos/7 (virtualbox, 2004.01),则成功!
    在这里插入图片描述
  • 发生错误:镜像并没有保存到floatCentOS文件夹里。解决方法:add box的时候默认保存在C盘用户文件夹 C:\Users\xxx.vagrant.d,通过设置VAGRANT_HOME环境变量为D:\nata_Install\floatCentOS改变默认位置;把原来C盘的.vagrant.d文件夹复制到自己的路径,这样就ok了;
  • 之后还改了vitual box的路径:先把c盘下的文件夹放到d盘中,然后更改virtualbox软件的全局设置中的路径即可;

配置virtualBox虚拟机

  1. 首先从gitbash进入floatCentOS文件夹下,使用命令行vagrant init,生成vagrantfile文件,这是虚拟机配置文件(配置文件中配置了转发端口,私有网络等,私有网络的意思就是本主机作为虚拟机的网关;);
    在这里插入图片描述
    把文件中的config.vm.box = "base"改成config.vm.box = “centos/7”;
    在这里插入图片描述

  2. 之后在floatCentOS里使用vagrant up命令,新建一台虚拟机,然后启动;

  • 发生错误:no guest addition。。。,就是缺少了Virtualbox Gusest Additions;解决方法:先安装插件vagrant plugin install vagrant-vbguest,再修改vagrantfile,把句子改成config.vm.synced_folder “.”, “/share”;但并没有解决
  • 发生错误:No Virtualbox Guest Additions installation found,而且又多了ssh exit 0的问题,先直接忽视问题,因为这个错误不影响后续操作(详细解决方法见解决no guest和没有共享目录的问题这一部分)。
  1. vagrant ssh,让当前的控制台和虚拟机建立联系;
  • 发生错误:命令无反应;解决方法:用cmd试一下,cmd可以成功连接
  • 尝试解决cmd可以,gitbash不可以的问题。解决方法:使用winpty vagrant ssh命令代替vagrant ssh,成功。之后在gitbash就能操纵虚拟机了;
  • 其他的常用命令:
    vagrant halt关机,vagrant suspend挂起关机,vagrant destroy删除;pwd显示当前目录;

配置虚拟机网络

  • private network:就是让虚拟机成为私有网络,虚拟机就有自己的ip地址了,宿主机可以通过ip访问它(在浏览器输入ip地址就能去到),但是外部地址不能访问;

首先用在cmd中输入ipconfig获得虚拟机地址,如192.168.56.1;
一般用私有网络就是,所以在vagrantfile里面的私有网络private network配置这个地址;
重启虚拟机,尝试ping通本机和虚拟机,即ping 192.168.43.127,能ping通即成功;

  • public network:公有网络,只要设置成这样,虚拟机就有自己的公有地址了;如果跟同事需要有交流,就可以用这个;

解决no guest和没有共享目录的问题

(1)No Virtualbox Guest Additions installation found问题

第一次安装Additions,说还是没有找到这个Additions,解决办法是先卸载再重装,多试几次即可。
在gitbash中输入:

vagrant plugin uninstall vagrant-vbguest
vagrant plugin install vagrant-vbguest --plugin-version 0.21

成功:

[default] GuestAdditions 6.1.22 running --- OK.
==> default: Checking for guest additions in VM...
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
    default: /proj => D:/nata_Install/floatCentOS/proj
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.

(2)共享目录问题
1)synced folder共享目录:
在vagrantfile里加上config.vm.synced_folder "D:/nata_Install/floatCentOS/proj", "/proj",前一个代表主机地址,后一个是虚拟机里的地址;并且禁用之前的目录config.vm.synced_folder '.', '/vagrant', disabled: true;(这一步是为了能用自己设置的共享目录)
之后ssh respond non-zero错误就解决了。
2)对共享文件夹进行测试。
测试原理:如果在本机的"D:/nata_Install/floatCentOS/proj"目录中新建的test.txt文件,也能在虚拟机对应的"/proj"看见,则共享成功。
过程:reload虚拟机,在本机目录下新建test文件,在虚拟机的proj目录里面有本机的文件test,这就算成功了。
—>好处是在windows中进行开发,可以立马在虚拟机得到展现
—>这个’/proj’是表示是虚拟机的最根的目录下的一个文件夹!是跟home同级的!所以要一直’cd …'到根目录,才能看到!

打开虚拟机的步骤

所有配置都成功之后,之后利用gitbash操纵虚拟机,需要执行以下操作:

由gitbash进入vagrantfile所在路径—vagrant up—winpty vagrant ssh,之后即可在gitbash操控虚拟机了。

  • 发生错误:直接使用vagrant up命令打开不了了;解决方法:应该去vagrantfile所在的目录,也就是floatCentOS,直接用vagrant up命令;
  • 发生错误:用了vagrant up之后,还是不行,提示有无法解决的错误,并且这个错误是在virtualbox里的;解决方法:去virtualbox里,修改错误文件,把后缀vbox-tmp改成vbox,即可。

安装docker

docker网址::https://docs.docker.com/engine/install/centos/

  • tips:需要在[vagrant@localhost ~]目录下进行操作;localhost~到底是什么目录呢?(~表示当前用户目录,/表示根目录)然后pwd一下,发现其实就是/home/vagrant目录。

首先进入vagrant,在[vagrant@localhost ~]目录下进行操作。
安装软件包:$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
设置仓库:$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装docker engine:$ sudo yum install -y docker-ce docker-ce-cli containerd.io
启动docker引擎 $ sudo systemctl start docker
设置开机自启动$ sudo systemctl enable docker
设置阿里云的镜像加速:自行搜索教程

docker安装mysql

用docker安装mysql之后才知道,原来docker那么方便,只要一句命令即可下载,不用繁琐的配置
(1)安装数据库:sudo docker pull mysql:5.7
(2)创建实例并启动sudo docker run -p 3306:3306 --name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
-v就是挂载,前面的是主机的目录,后面的是容器的目录,之后可以看到linux下有一个mydata目录了,就是挂载到了主机的mydata目录下了。
疑问:这是用的分配给虚拟机的内存,但是不太懂挂载到主机是到哪里了。。。按理说分配给虚拟机的是D盘的空间,但C盘空间一直在变小,希望确定挂载的目录为D盘。
(3)设置编码sudo vi /mydata/mysql/conf/my.cnf,写入那段话,然后点击esc,然后输入:wq,即写入成功。
(4)重启mysql:sudo docker restart mysql
(5)自动启动sudo docker update mysql --restart=always

docker安装redis

$ sudo docker pull redis:6.0
$ sudo mkdir -p /mydata/redis/conf
$ sudo touch /mydata/redis/conf/redis.conf
$ sudo docker run -p 6379:6379 --name redis -v /mydata/redis/data:/data -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf -d redis:6.0 redis-server /etc/redis/redis.conf

进入/mydata/redis/conf/redis.conf使redis持久化:

  appendonly yes
$ sudo docker restart redis
$ sudo docker exec -it redis redis-cli
$ sudo docker update redis --restart=always
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值