Saul's blog Saul's blog
首页
后端
分布式
前端
更多
分类
标签
归档
友情链接
关于
GitHub (opens new window)

Saul.J.Wu

立身之本,不在高低。
首页
后端
分布式
前端
更多
分类
标签
归档
友情链接
关于
GitHub (opens new window)
  • 面试题

  • 博客搭建

  • 部署相关

  • 填坑

  • Python

  • 其他

    • Vagrant虚拟机快速搭建开发环境
      • Oracle VM VirtualBox
      • Vagrant
        • 如何连接虚拟机?
        • vagrant ssh连接
        • 使用密码连接
        • 如何启动/停止虚拟机
        • 配置虚拟机网络
      • 修改虚拟机yum源
      • 安装各种工具
      • 安装docker
      • docker安装mysql
        • 下载镜像文件
        • 配置mysql
        • 创建并启动实例
        • 查看站在运行的容器
        • 查看容器日志
        • win10系统结束占用端口程序
      • 安装redis
        • 持久化redis
    • Linux无法上网
    • yarn和npm命令对比
    • npm构建常用报错
    • windows右键打开终端
    • 微软输入法设置
    • 使用Navicat自动定期备份数据
    • Windows下用Chocolatey管理包工具
    • 右键新建markdown文件
    • 怎样开通gmail邮箱smtp服务
    • Typora+PicGo图床
    • vuepress主题升级
    • win10查看wifi密码
    • win10端口占用解决
    • SpringBoot开启热部署
    • VSCode Remote体验
  • 收藏夹

  • 友情链接
  • 更多
  • 其他
SaulJWu
2020-11-17

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
1

就知道了。

快速安装虚拟机

vagrant init centos/7
1

然后就在当前目录下创建Vagrantfile

启动虚拟机

vagrant up
1

这是一个很漫长的过程,他需要一步步从官方下载镜像,然后再按照镜像启动虚拟机。

完成后,将自动启动虚拟机。

image-20200921125612406

# 如何连接虚拟机?

虚拟机已经启动好了。

ctrl+c停掉命令行

vagrant ssh
1

连接上虚拟机后,可以直接使用linux的相关命令。

image-20200921125923103

# 查看当前用户
whoami
# 查看当前根目录下的所有目录
ls /
# 推出
exit
1
2
3
4
5
6

# vagrant ssh连接

  • 查看vagrant ssh配置
vagrant ssh-config
1

会返回一些配置信息

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
1
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
1
2
3
4
5
6
7

重启完服务后,就可以用ssh工具连接虚拟机了,默认账号密码:root/vagrant或者vagrant/vagrant

# 如何启动/停止虚拟机

  • 直接在virtualBox右键虚拟机操作

也可以用

# 确保当前路径下存在Vagrantfile
vagrant up
1
2

两个启动效果都是一样的。

# 配置虚拟机网络

  • 网络地址转换-端口转发

每个软件都需要配置端口转发太麻烦了。

  • 直接设置虚拟机的地址

# 首先查看VirtualBox网卡的地址

win10系统

ipconfig
1

image-20200921132619661

可以看出网卡的地址为

192.168.56.1
1

# 编辑虚拟机地址

使用文本工具打开Vagrantfile

找到,并且去掉注释

地址改为同一网关

config.vm.network "private_network", ip: "192.168.56.10"
1

image-20200921132851472

保存后,重启虚拟机

vagrant reload
1

# 测试虚拟机

# 连接虚拟机
vagrant ssh
# 查看地址
ip addr
1
2
3
4

image-20200921133505420

可见已经修改成功,接下来ping通一下

win10 ping 虚拟机

ping 192.168.56.10
1

image-20200921133616764

虚拟机 ping win10 ip4地址

ping 192.168.1.104
1

image-20200921133733344

说明已经成功。

而且也能ping通外网。

切换到root用户

su root
# 密码是vagrant

# 切换成功后,查看一下当前用户
whoami

1
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
1
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
1

# 安装各种工具

  • wget
yum install wget -y
1
  • unzip 解压工具
yum install unzip -y
1

# 安装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
1
2
3
4
5

安装docker

sudo yum install docker-ce docker-ce-cli containerd.io -y
1

启动docker

sudo systemctl start docker
1

查看docker

docker -v
sudo docker images

1
2
3

设置docker开机启动

sudo systemctl enable docker
1

docker镜像加速

  1. 登陆阿里云(推荐支付宝扫码登陆)
  2. 去到控制台
  3. 左侧菜单找到产品与服务
  4. 容器镜像服务
  5. 镜像加速器
  6. 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# docker安装mysql

# 下载镜像文件

sudo docker pull mysql

# 下载完成后查看镜像
sudo docker images
1
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
1
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
1
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
1

启动成功后,返回一大段字母加数字,是唯一标识

# 查看站在运行的容器

docker ps
1

image-20200921192157457

说明运行成功

如果没有则查看容器日志

# 查看容器日志

dockers logs container_name
1

参数说明

# 容器跟随docker启动
--restart=always
1
2
# 容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限
--privileged=true
1
2

Centos7安全Selinux禁止了一些安全权限,导致mysql和mariadb在进行挂载/var/lib/mysql的时候会提示

logs命令查看,发现提示信息是:chown: changing ownership of ‘/var/lib/mysql/....‘: Permission denied

如果不加这个则无法启动成功

# 将容器的3306端口映射到主机的3306端口
-p 3306:3306
1
2
# 将配置文件夹挂载到主机
-v /mydata/mysql/conf:/etc/mysql
1
2
# 将日志文件夹挂载到主机
-v /mydata/mysql/log:/var/log/mysql
1
2
# 将数据文件夹挂载到主机
-v /mydata/mysql/data:/var/lib/mysql
1
2
# 初始化root用户的密码
-e MYSQL_ROOT_PASSWORD=root
1
2
# 在后台运行
-d mysql
1
2

# win10系统结束占用端口程序

# 找对应的PID
netstat -aon|findstr "3306"

# 查找具体的占用进程,去任务管理器找到对应pid的程序,结束它
tasklist|findstr "21548"

1
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
1
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

1
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 # 保存退出
1
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则已经持久化成功
1
2
3
4
5
6
7
8
9
10
11

redis其他配置可参考官方文档

帮我改善此页面 (opens new window)
#Linux#虚拟机#环境搭建
上次更新: 2021/02/16, 12:29:08
python发送邮件demo
Linux无法上网

← python发送邮件demo Linux无法上网→

最近更新
01
zabbix学习笔记二
02-28
02
zabbix学习笔记一
02-10
03
Linux访问不了github
12-08
更多文章>
Theme by Vdoing | Copyright © 2020-2022 Saul.J.Wu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式