Vagrant虚拟机快速搭建开发环境
# Oracle VM VirtualBox
我们需要安装开源的Linux虚拟机,所以要先下载VirtualBox (opens new window)
之后mysql,redis都要安装在linux虚拟机
当虚拟机安装后,需要安装镜像,但是一步步安装镜像又太麻烦了
# Vagrant
Vagrant只要安装了VirtualBox,可以快速创建虚拟机,不用一步步安装centos
镜像地址
https://app.vagrantup.com/boxes/search
下载地址
https://www.vagrantup.com/downloads
安装成功后,需要重启电脑
验证是否安装成功
vagrant
就知道了。
快速安装虚拟机
vagrant init centos/7
然后就在当前目录下创建Vagrantfile
启动虚拟机
vagrant up
这是一个很漫长的过程,他需要一步步从官方下载镜像,然后再按照镜像启动虚拟机。
完成后,将自动启动虚拟机。
# 如何连接虚拟机?
虚拟机已经启动好了。
ctrl+c
停掉命令行
vagrant ssh
连接上虚拟机后,可以直接使用linux的相关命令。
# 查看当前用户
whoami
# 查看当前根目录下的所有目录
ls /
# 推出
exit
2
3
4
5
6
# vagrant ssh连接
- 查看vagrant ssh配置
vagrant ssh-config
会返回一些配置信息
Host localvm1
HostName 127.0.0.1
User vagrant
Port 2200
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile D:/bigdata/.vagrant/machines/localvm1/virtualbox/private_key
IdentitiesOnly yes
LogLevel FATAL
2
3
4
5
6
7
8
9
10
当我们用外部ssh工具连接时,需要去D:/bigdata/.vagrant/machines/localvm1/virtualbox/private_key这个文件夹下配置公钥,vagrant是使用公钥来连接ssh的
当然如果不用private_key连接,也可以去使用密码登陆
# 使用密码连接
# 进入vagrant系统后
vi /etc/ssh/sshd_config
# 修改 PasswordAuthenication yes/no 改为yes
# 重启服务
service sshd restart
2
3
4
5
6
7
重启完服务后,就可以用ssh工具连接虚拟机了,默认账号密码:root
/vagrant
或者vagrant
/vagrant
# 如何启动/停止虚拟机
- 直接在virtualBox右键虚拟机操作
也可以用
# 确保当前路径下存在Vagrantfile
vagrant up
2
两个启动效果都是一样的。
# 配置虚拟机网络
- 网络地址转换-端口转发
每个软件都需要配置端口转发太麻烦了。
- 直接设置虚拟机的地址
# 首先查看VirtualBox网卡的地址
win10系统
ipconfig
可以看出网卡的地址为
192.168.56.1
# 编辑虚拟机地址
使用文本工具打开Vagrantfile
找到,并且去掉注释
地址改为同一网关
config.vm.network "private_network", ip: "192.168.56.10"
保存后,重启虚拟机
vagrant reload
# 测试虚拟机
# 连接虚拟机
vagrant ssh
# 查看地址
ip addr
2
3
4
可见已经修改成功,接下来ping通一下
win10 ping 虚拟机
ping 192.168.56.10
虚拟机 ping win10 ip4地址
ping 192.168.1.104
说明已经成功。
而且也能ping通外网。
切换到root用户
su root
# 密码是vagrant
# 切换成功后,查看一下当前用户
whoami
2
3
4
5
6
如果是root用户,不用带sudo
前缀
# 修改虚拟机yum源
因为安装的是纯净的Linux虚拟机,什么工具都没有,所以需要yum
来安装各种工具
因为默认yum
源默认是国外的地址,如果不在国外,速度非常慢
更换阿里云镜像(非必要)
# 备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# centos7 更换阿里云源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 清除缓存
sudo yum clean all
# 生成缓存
sudo yum makecache
2
3
4
5
6
7
8
当然,也可以用163源
curl -o /etc/yum/repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
# 安装各种工具
- wget
yum install wget -y
- unzip 解压工具
yum install unzip -y
# 安装docker
网址
https://docs.docker.com/engine/install/centos/
进入终端,连接虚拟机
安装docker所需工具
sudo yum install yum-utils -y
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
2
3
4
5
安装docker
sudo yum install docker-ce docker-ce-cli containerd.io -y
启动docker
sudo systemctl start docker
查看docker
docker -v
sudo docker images
2
3
设置docker开机启动
sudo systemctl enable docker
docker镜像加速
- 登陆阿里云(推荐支付宝扫码登陆)
- 去到控制台
- 左侧菜单找到产品与服务
- 容器镜像服务
- 镜像加速器
- centos
依照命令执行完就可以了
# 1
sudo mkdir -p /etc/docker
# 2
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://kxem1gii.mirror.aliyuncs.com"]
}
EOF
# 3
sudo systemctl daemon-reload
# 4
sudo systemctl restart docker
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# docker安装mysql
# 下载镜像文件
sudo docker pull mysql
# 下载完成后查看镜像
sudo docker images
2
3
4
# 配置mysql
mkdir /mydata
mkdir /mydata/mysql
mkdir /mydata/mysql/conf.d
mkdir /mydata/mysql/data/
# 创建文件
touch /mydata/mysql/my.cnf
cd /mydata/mysql/
# 进入编辑模式
vi my.cnf
# 输入以下
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
# 按下esc退出输入模式
# 按下:进入底线命令模式
# 输入wq保存退出
wq
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 创建并启动实例
docker run \
--restart=always \
--privileged=true \
-p 3306:3306 \
--name mysql \
-v /mydata/mysql/data/:/var/lib/mysql \
-v /mydata/mysql/conf.d:/etc/mysql/conf.d \
-v /mydata/mysql/my.cnf:/etc/my.cnf \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql
2
3
4
5
6
7
8
9
10
不知道是不是上面换行错误还是什么,下面弄成一行才运行成功。
docker run --restart=always --privileged=true -p 3306:3306 --name mysql -v /mydata/mysql/data/:/var/lib/mysql -v /mydata/mysql/conf.d:/etc/mysql/conf.d -v /mydata/mysql/my.cnf:/etc/my.cnf -e MYSQL_ROOT_PASSWORD=root -d mysql
启动成功后,返回一大段字母加数字,是唯一标识
# 查看站在运行的容器
docker ps
说明运行成功
如果没有则查看容器日志
# 查看容器日志
dockers logs container_name
参数说明
# 容器跟随docker启动
--restart=always
2
# 容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限
--privileged=true
2
Centos7安全Selinux禁止了一些安全权限,导致mysql和mariadb在进行挂载/var/lib/mysql的时候会提示
logs命令查看,发现提示信息是:chown: changing ownership of ‘/var/lib/mysql/....‘: Permission denied
如果不加这个则无法启动成功
# 将容器的3306端口映射到主机的3306端口
-p 3306:3306
2
# 将配置文件夹挂载到主机
-v /mydata/mysql/conf:/etc/mysql
2
# 将日志文件夹挂载到主机
-v /mydata/mysql/log:/var/log/mysql
2
# 将数据文件夹挂载到主机
-v /mydata/mysql/data:/var/lib/mysql
2
# 初始化root用户的密码
-e MYSQL_ROOT_PASSWORD=root
2
# 在后台运行
-d mysql
2
# win10系统结束占用端口程序
# 找对应的PID
netstat -aon|findstr "3306"
# 查找具体的占用进程,去任务管理器找到对应pid的程序,结束它
tasklist|findstr "21548"
2
3
4
5
6
docker添加容器时,使用 -v 挂载时无法启动容器
原因:
CentOS7中的安全模块selinux把权限禁掉了,无法使用-v命令进行挂载
解决方法:
添加selinux规则,将要挂载的目录添加到白名单
chcon -Rt svirt_sandbox_file_t /mydata/mysql/log
chcon -Rt svirt_sandbox_file_t /mydata/mysql/data
chcon -Rt svirt_sandbox_file_t /mydata/mysql/conf
2
3
添加完后,删除旧的mysql容器,再重新添加一个,成功启动
# 安装redis
# 安装redis
docker pull redis
# 创建目录
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf
# 创建并启动实例
docker run -p 6379:6379 --name redis --restart=always \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf
# 检查redis
docker ps
# 测试redis
docker exec -it redis redis-cli
set a b
# 返回b
get a
# exit
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 持久化redis
问题,当redis重启后,数据消失了,因为redis没有持久化
# 重启redis
docker restart redis
# 进入redis操作模式
docker exec -it redis redis-cli
# 返回(nil)
get a
# 退出
exit
# 返回挂载目录 /mydata/redis/conf
pwd
# 查看当前目录文件
ls
# 编辑配置文件
vi redis.conf
# 设置数据持久化到硬盘
appendonly yes
# esc :
wq # 保存退出
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
重启redis后,再测试一次
# 先设置数据
docker restart redis
docker exec -it redis redis-cli
set aa bb
exit
# 重启后看看数据是否还在
docker restart redis
docker exec -it redis redis-cli
get aa
# 如果返回bb则已经持久化成功
2
3
4
5
6
7
8
9
10
11
redis其他配置可参考官方文档