一.使用VirtualBox + Vagrant
分别下载安装后,运行:vagrant init centos7 https://mirrors.ustc.edu.cn/centos-cloud/centos/7/vagrant/x86_64/images/CentOS-7.box
后:vagrant up
登录: vagrant ssh
常用命令:
启动:vagrant up ,状态是 running
停止:vagrant halt 状态是 poweroff
暂停:vagrant suspend 状态是 saved
重启:vagrant reload 状态是 running 命令 reload 是先关闭,再开启
销毁:vagrant destroy 状态是 not created
以下解决Vagrant磁盘爆满问题:
我们在vagrant所在的目录(huangjy40/)下创建一个名为backup的目录。
然后进入目录:
D:\MyData\用户\.vagrant.d\boxes\centos7\0\2004.01\virtualbox
找到该目录下的Vagrantfile文件,进行修改。
修改前:
Vagrant.configure("2") do |config|
config.vm.base_mac = "5254004d77d3"
config.vm.synced_folder ".", "/vagrant", type: "rsync"
end
修改后:
Vagrant.configure("2") do |config|
config.vm.base_mac = "5254004d77d3"
config.vm.synced_folder "./backup", "/vagrant", type: "rsync"
end
config.vm.synced_folder "D:/Home/pypy","/vagrant",type: "rsync"
可以修改源目录,但目标目标经测试只能是:/vagrant
另: 自动同步: vagrant rsync-auto
手工同步: vagrant rsync
另一种:先安装插件:vagrant plugin install vagrant-rsync-auto
再在config.vm.synced_folder后配置:config.rsync_auto.enable = true
# config.rsync_auto.interval = 30
修改后,重启vagrant
要开机自运行vagrant up,shell:startup 后建一个 bat文件,输入:cmd /k "cd /d C:\Users\Administrator && vagrant up",或在别的地方建,在这里粘贴快捷方式。
二.登录后设置虚拟机IP: 查年windows的ipconfig ,找到virtualbox的虚拟网卡网关:如 192.168.56.1 ,则 虚拟机IP可设置为: 192.168.56.10 ,这个IP的设置位置是:c:/users/administrator/VagrantFile中的:config.vm.network "private_network", ip: "192.168.56.10"
修改后,执行: vagrant reload让设置生效。
三.虚拟机网络设置:
如果一直报:Could not resolve host: mirrorlist.centos.org; Unknown error,这一般是网卡没配置好,只要在VagrantFile 里面打开这一行,开启桥接模式:config.vm.network "public_network"
四.Docker安装及自启动
安装参考:Docker官方文档
先删除:
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
之后:安装工具:
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
第3步:sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
第4步,启动Docker :
sudo systemctl start docker
第5步:设置Docker自启动:
sudo systemctl enable docker
第6步:镜像加速
轻量应用服务器 安装 Docker 并配置镜像加速源-最佳实践-文档中心-腾讯云
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://b6qf0f6f.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
注意:默认情况下 Docker 的tcp 2375端口是不开放的,修改方法:
vim /usr/lib/systemd/system/docker.service
找到ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
在后台加上: -H tcp://0.0.0.0:2375
变成: ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
重启: systemctl daemon-reload systemctl restart docker 即可。
查看images : docker images
删除image: docker rmi imageid
五、Docker 安装 Mysql
1:从Docker hub中拉取mysql :
sudo docker pull mysql:8.0
在腾讯云上使用 8.0.22 没有错误,8.0报错
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 \
-v /mydata/mysql/files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:8.0
3:启动:docker start mysql 。
查看运行中的容器:docker ps (process status) 。
设置mysql自启动:sudo docker update mysql --restart=always
查看mysql的日志:docker container logs mysql
4:进入容器:docker exec -it mysql bash
5: 如果MYsql日志报错(加了-v /mydata/mysql/files:/var/lib/mysql-files \应该就不会报错): mysqld: Error on realpath() on ‘/var/lib/mysql-files’ (Error 2 - No such file or directory): 先删除container :sudo docker container rm mysql
再建 一个文件夹: mkdir mysql-files ,再输入命令:
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 -v /home/vagrant/mysql-files/:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=1234 -d mysql:8.0
解决mysqld: ‘/var/lib/mysql-files‘ (Error 2..._wslynn的博客-CSDN博客
6:如果远程连接时报错:docker Host is not allowed to connect to this mysql server,则先登录mysql容器:docker exec -it mysql bash
后在mysql命令后执行:
use mysql;
update user set host='%' where user='root';
Grant all privileges on root.* to 'root'@'%'; #执行两次,第一次会报错:ERROR 1410 (42000): You are not allowed to create a user with GRANT,mysql8.0以上版本分配权限不能带密码创建账号了,要先创建账号再设置权限
alter user root identified with mysql_native_password by '1234';
FLUSH PRIVILEGES;
7) 如何报需要 mysqladmin flush-hosts ,则是错误连接过多,用docker 进入 mysql,执行:mysqladmin -u root -p flush-hosts
六:安装 redis:
1)sudo docker pull redis
2) 创建配置文件:
sudo mkdir -p /mydata/redis/conf
sudo touch /mydata/redis/conf/redis.conf
3)运行Docker
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 redis-server /etc/redis/redis.conf
4)进入redis容器内:
sudo docker exec -it redis redis-cli
5) 修改/mydata/redis/conf/redis.conf ,增加 appendonly yes 作用是将存储改由内存改为持久化。
6) 查看挂载:docker inspect -f "{{.Mounts}}" 369a1376f78c
7)修改挂载:
先停止docker服务
systemctl stop docker.service(关键,修改之前必须停止docker服务)
后vi /var/lib/docker/containers/container-ID/config.v2.json
查看完整容器ID:docker ps --no-trunc
8)修改redis密码:sudo docker exec -it redis /bin/bash
然后运行:redis-cli
查看当前密码:config get requirepass
修改密码:config set requirepass 12345
9) 设置redis自启动:
sudo docker update redis --restart=always
sudo docker start redis
注意: docker/redis.conf 默认没有内容,可加 appendonly yes表示开启物理存储
docker/redis.conf 支持远程内容:
#bind 127.0.0.1 //允许远程连接
protected-mode no
appendonly yes //持久化
requirepass 123456 //密码
七.安装nacos:
拉取: sudo docker pull nacos/nacos-server默认是2.0版本
用新版: sudo docker pull nacos/nacos-server:v2.2.2
先简单启动:sudo docker run -p 8848:8848 --name nacos -d nacos/nacos-server:v2.2.2
sudo mkdir /mydata/nacos
sudo docker cp nacos:/home/nacos/logs/ /mydata/nacos/logs/
sudo docker cp nacos:/home/nacos/conf/ /mydata/nacos/conf/
sudo docker rm -f nacos
sudo systemctl stop firewalld
再安装:
sudo docker run -d --name nacos -p 8848:8848 -p 9848:9848 -p 9849:9849 --privileged=true -e JVM_XMS=256m -e JVM_XMX=512m -e MODE=standalone -v /mydata/nacos/logs/:/home/nacos/logs -v /mydata/nacos/conf/:/home/nacos/conf/ --restart=always nacos/nacos-server:v2.2.2
开关防火墙:
systemctl start firewalld (开启防火墙)
systemctl status firewalld (查看防火墙状态)
systemctl stop firewalld
开放端口:
1.添加指定需要开放的端口:
firewall-cmd --add-port=8848/tcp --permanent
2.重载入添加的端口:
firewall-cmd --reload
3.查询指定端口是否开放成功:
firewall-cmd --query-port=8848/tcp
八.安装Nginx 如果是多个微服务有一个gateway调度, 一般不把nginx作为Docker运行,而是在宿主机上直接安装nginx.安装方法:
yum -y install nginx
启动服务:systemctl start nginx
系统自系统:systemctl enable nginx
找目录:whereis nginx
拉镜像:sudo docker pull nginx
运行:
sudo mkdir -p /mydata/nginx/conf/
sudo touch /mydata/nginx/conf/nginx.conf
sudo mkdir -p /mydata/nginx/conf.d
#启动容器
sudo docker run -d --name nginx nginx
# 拷贝容器内 Nginx 默认配置文件到本地当前目录下的 conf 目录($PWD 当前全路径)
docker cp nginx:/etc/nginx/nginx.conf /mydata/nginx/conf
docker cp nginx:/etc/nginx/conf.d /mydata/nginx/conf
# 停止容器
docker container stop nginx
# 删除容器
docker container rm nginx
#部署容器
docker run -p 80:80 --name nginx -v /mydata/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /mydata/nginx/conf.d:/etc/nginx/conf.d -v /mydata/nginx/html:/usr/share/nginx/html -v /mydata/nginx/logs:/var/log/nginx -d nginx
docker update nginx --restart=always
九:docker安装Sentinel
sudo docker search sentinel
sudo docker pull bladex/sentinel-dashboard
docker run --name sentinel -p 8858:8858 -td bladex/sentinel-dashboard --restart=always
十:docker 开启远程TCP端口方法:
查看docker安装路径:systemctl status docker.service
vim /lib/systemd/system/docker.service
在ExecStart行后面追加以下内容: -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
重新载入服务信息: systemctl daemon-reload
重启docker服务:systemctl restart docker.service
最后,可以在IDEA的Docker面板连接这个tcp://222.222.222.22:2375,进行下一步操作。
十一:软件装好后,在windows下运行 shell:startup打开自动启动目录,将两个快捷方式粘贴到这里:一个是nacos/bin下的静默启动 startnacos.vbs:
set ws=WScript.CreateObject("WScript.Shell")
ws.Run "startup.cmd -m standalone",0
另一个是:在c:/users/admin下建一个vagrant.bat:
vagrant up
十二:本机开发环境总结:
1.虚拟机(192.168.56.11)vagrant up启动,安装docker/redis/mysql/nginx。其中在nginx里面配置上游服务器及反向代理:
upstream zhzhnet{server 192.168.56.1:88;}
server {
listen 80;
server_name test.zhzh.net mini.zhzh.net;
location / { proxy_set_header Host $host; proxy_pass http://zhzhnet;}
}
2.主机HOST配置DNS:192.168.56.11 test.zhzh.net
192.168.56.11 mini.zhzh.net。
3.IDEA项目建好,有Gateway微服务接管88端口,并做lb:微服务映射。
如:
.route("mini-web", r -> r.host("mini.zhppt.net") .filters(f -> f.rewritePath("^/?(.*)$", "/$1") .filter((exchange, chain) -> { ServerHttpRequest request = exchange.getRequest(); ServerHttpResponse response = exchange.getResponse(); log.info("mini-web: 请求:" + request.getMethodValue() + request.getURI()); return chain.filter(exchange).then(Mono.fromRunnable(() -> { HttpStatus statusCode = response.getStatusCode(); log.info("mini-web: 响应" + statusCode.value() + statusCode.getReasonPhrase()); })); }) ).uri("lb://ppt-mini"))
过程就是主机域名去访问虚拟机的nginx网关,这个网关又指向主机的88微服务。
十三:docker 清理
docker system prune -a : 命令可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像,前提要先 systemctl stop docker
docker system prune 这个命令默认不会删除悬空的资源,即那些未被使用的资源。
docker system df : 查看占用空间。