目录
5.1.首先需要将后台的代码打包放入linux中的(tomcat的webapps目录中)
1.自定义网络相关
1.1.自定义网络操作
-
创建自定义网络,并设置相关网络配置:
docker network create --driver bridge --subnet 192.168.0.1/16 --gateway 192.168.0.1 mynet
参数说明:
-
删除自定义网络
mynet
:(注意:没有容器使用此网络才能删除)
docker network rm mynet
-
查看docker中已安装的所有网络:
docker network ls
-
查看自定义网络
mynet
中的配置信息:
docker network inspect mynet
-
network帮助命令:
docker network --help
1.2.容器互通
1.2.1.同一网络下的容器互通
分别创建两个容器centos1
和centos2
,两个容器均使用同一个自定义网络mynet
:
# 创建容器centos1
docker run --name centos1 -itd --net mynet --ip 192.168.0.11 centos:latest
# 创建容器centos2
docker run --name centos2 -itd --net mynet --ip 192.168.0.12 centos:latest
有些下载的镜像,执行docker run -d
不加-it
参数运行后就直接exited(0)
,这是制作此镜像的基础镜像的问题,添加-itd
即可。
例如:centos
镜像就要加-itd
,nginx
镜像则不需要-it
,-d
即可 。
启动容器后检查网络之间是否可以互通:
docker exec -it centos1 ping centos2
1.2.2.不同网络下的容器互通
停止所有容器并删除所有容器:
docker stop $(docker ps -aq) && docker rm $(docker ps -aq)
使用bridge
默认网络模式创建容器centos1
:
docker run --name centos1 -itd centos:latest
使用自定义网络模式mynet
创建容器centos2
:
docker run --name centos2 -itd --net mynet --ip 192.168.0.12 centos:latest
测试centos1
和centos2
的连接:
docker exec -it centos1 ping centos2
连接失败,控制台出现如下提示:ping: centos2: Name or service not known
解决方案:向网络mynet
中添加容器centos1
docker network connect mynet centos1
为什么成功了呢?原因:容器centos1
具有两个ip
,也就是双网卡的概念。
2.Docker安装配置Nginx
2.1.什么是Nginx
Nginx(“engine x”)是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用Nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
官网地址:nginx的官网
2.2.部署架构图
2.3.安装Nginx
2.3.1.快速入门
-
搜索镜像:
docker search nginx
-
拉取镜像:
docker pull nginx
-
使用
docker
内置网络bridge
创建Nginx
容器:
docker run \
--name mynginx \
-d -p 80:80 \
nginx:latest
修改centos7
的防火墙放开80端口:
# 开启80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
#重启防火墙(不重启以上的设置是不会生效的):
firewall-cmd --reload
#查询指定端口号是否开启:
firewall-cmd --query-port=80/tcp
测试nginx
是否安装成功。打开浏览器输入: http://宿主机ip:80
,正常情况下会显示nginx
的欢迎页面。
-
使用自定义网络
mynet
创建Nginx
容器:
由于之前已经创建了一个mynginx
容器(基于bridge
网络模式),所以在创建下面容器时请先要删除已经存在的容器mynginx
,再执行下列命令创建容器:
docker run \
--name mynginx \
-d -p 80:80 \
--net mynet --ip 192.168.0.13 \
nginx:latest
最终,通过外部浏览器访问时页面提示连接不上。(自定义网络对外不可见)
2.3.2.部署SPA项目
第一步:在宿主机上创建挂载目录(数据卷):
mkdir -p /data/nginx/{conf,conf.d,html,log}
mkdir -p /data/nginx/{conf,conf.d,html,log}
因为在nginx
镜像中没有安装vi
或vim编辑器(安装又太麻烦了),无法编辑nginx
配置文件,所以直接通过数据卷挂载上去更加方便。
第二步:将nginx
配置文件nginx.conf
上传到宿主机的挂载目录/data/nginx/conf
下:
将课件中的nginx.conf
文件上传到/data/nginx/conf
目录下,并对其配置进行修改。将nginx.conf
配置文件中的动态资源访问部分注释掉。
第三步:将vue
前端项目打包后上传到宿主机的挂载目录/data/nginx/html
下并解压
unzip dist.zip
第四步:创建启动nginx
容器并查看启动日志信息
docker run \
--name mynginx \
-d -p 80:80 \
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /data/nginx/log:/var/log/nginx \
-v /data/nginx/html:/usr/share/nginx/html \
nginx:latest
注意: 第一个-v:挂载nginx
的主配置文件,以方便在宿主机上直接修改容器的配置文件 第二个-v:挂载容器内nginx
的日志,容器运行起来之后,可以直接在宿主机的这个目录中查看nginx
日志 第三个-v:挂载静态页面目录
如果容器创建失败,可通过如下命令,查看在docker
容器启动日志:
docker logs -f -t --tail 行数 容器名
最后,在浏览器中输入地址即可正确访问到SPA项目的首页。
3.安装配置MySQL
注意:基于bridge
网络模式完成下列操作配置。
3.1.拉取镜像
在这里使用mysql
的5.7.24版本,注意在拉取之前一定要先更换docker
镜像加速器,因为本身Docker Hub
官网下载速度太慢了。(此步骤docker入门章节中已完成)
docker pull mysql/mysql-server:5.7
注意:后面的mysql
标签是版本号,可选择,有:5.5/5.6/5.7/8.0
3.2.上传mysql配置文件
在宿主机中创建mysql
相关目录,用于挂载容器的相关数据。
-
conf
目录用于配置mysql
的核心配置文件my.cnf
; -
data
目录用于存放mysql
的数据;
mkdir -p /data/mysql/{conf,data}
重要:必须提前上传my.cnf
文件到/data/mysql/conf
目录,并且它与window
中的配置文件my.ini
后缀名是不一样!
3.3.创建运行mysql容器
docker run -p 3306:3306 \
--name mysql \
-v /data/mysql/conf/my.cnf:/etc/my.cnf \
-v /data/mysql/data:/var/lib/mysql \
--privileged=true \
--restart=always \
-e MYSQL_ROOT_PASSWORD=1234 \
-d mysql/mysql-server:5.7
参数说明:
参数 | 说明 |
---|---|
--name | 指定容器名称 |
-p | 端口映射。宿主机端口:容器端口 |
-v | 映射目录或文件,启动了一个数据卷容器,数据卷路径为: 再将此数据卷映射到宿主机的 |
--privileged | 使用该参数,容器内的root 拥有真正的root 权限。true :有权限、false :无权限 |
-e | 指定key/value 进行传递环境变量 |
-d | 指定容器后台运行模式 |
--restart=always | 指定容器随着Docker 一起启动运行。自启动配置 |
-it | 是两个参数,-i:interactive 容器具有交互功能,-t :容器将提供伪终端 |
3.4.配置mysql远程访问
-
进入容器:
docker exec -it mysql /bin/bash
-
测试
mysql
是否运行:
service mysql status
-
登录
mysql
数据库:
mysql -u root -p
-
授权远程登录:
# 授权
grant all privileges on *.* to 'root'@'%' identified by '1234' with grant option;
# 重载授权表
flush privileges;
# 退出
exit;
查看数据库字符集:
show variables like 'character%';
3.5.持久化测试
创建数据库nacos_config
,并完成初始化。
最后,删除MySQL
容器,重新再次运行一遍创建MySQL
容器的命令,测试之前添加的数据naocs
及数据是否存在。(存在则证明持久化成功,反之失败)
4.安装配置Nacos
4.1.安装配置单机版Nacos
注意:基于bridge
网络模式完成下列操作配置。
4.1.1.拉取镜像
docker pull nacos/nacos-server:1.1.4
4.1.2.创建nacos容器
在创建nacos
容器之前请先查看bridge
网络配置信息,确认mysql
容器的IP
地址信息(因为nacos
容器创建时需要指定数据库的相关配置信息,包括:IP
、端口以及账号密码等)。
docker network inspect bridge
创建Nacos
容器:
docker run -d \
-e PREFER_HOST_MODE=192.168.6.101 \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_MASTER_SERVICE_HOST=172.17.0.2 \
-e MYSQL_MASTER_SERVICE_PORT=3306 \
-e MYSQL_MASTER_SERVICE_USER=root \
-e MYSQL_MASTER_SERVICE_PASSWORD=1234 \
-e MYSQL_MASTER_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SLAVE_SERVICE_HOST=172.17.0.2 \
-p 8848:8848 \
--name nacos \
--restart=always \
nacos/nacos-server:1.1.4
参数说明:
2.1.3.查看nacos容器启动日志
docker logs -f -t --tail=100 nacos
4.1.4.配置防火墙并访问nacos
firewall-cmd --zone=public --add-port=8848/tcp --permanent
firewall-cmd --reload
打开浏览器输入地址:http://192.168.6.101:8848/nacos/index.html
4.1.5.测试
-
登录
Nacos
,并添加测试数据:
-
查看数据库是否更新:
-
在虚拟机中输入如下命令获取配置信息:
curl -X GET "http://192.168.6.101:8848/nacos/v1/cs/configsdataId=test.yml&group=DEFAULT_GROUP"
4.2.安装配置集群版Nacos
注意:基于mynet
自定义网络模式完成下列操作配置。
4.2.1.停止并删除所有容器
分别删除单机版nacos
和mysql
容器,之后创建的nacos
和mysql
容器都将基于自定义网络。
docker stop $(docker ps -aq) && docker rm $(docker ps -aq)
4.2.2.创建mysql容器
基于自定义网络重新创建mysql
容器。
docker run \
--name mysql \
--net mynet \
--ip 192.168.0.10 \
-v /data/mysql/conf/my.cnf:/etc/my.cnf \
-v /data/mysql/data:/var/lib/mysql \
--privileged=true \
--restart=always \
-e MYSQL_ROOT_PASSWORD=1234 \
-d mysql/mysql-server:5.7
注:由于之前做了数据持久化处理,新创建容器中的数据都是存在的。
容器启动成功后,修改mysql
允许root
远程访问(同上)。
4.2.3.创建nacos集群
集群节点IP设置如下:
-
nacos01
节点IP:192.168.0.21
-
nacos02
节点IP:192.168.0.22
-
nacos03
节点IP:192.168.0.23
注意:机器配置高的可以做
nacos
的三节点集群;如果机器配置不太好的可以做nacos
的两节点集群。
-
示例一:创建集群节点
nacos01
创建nacos
集群节点nacos01
,在启动要向其他nacos
节点发起注册信息;但是由于其他节点还未创建,所以在创建nacos01
节点时会不停去尝试连接其他节点。
docker run -d \
--net mynet \
--ip 192.168.0.21 \
-e PREFER_HOST_MODE=ip \
-e MODE=cluster \
-e NACOS_SERVERS="192.168.0.22:8848 192.168.0.23:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_MASTER_SERVICE_HOST=192.168.0.10 \
-e MYSQL_MASTER_SERVICE_PORT=3306 \
-e MYSQL_MASTER_SERVICE_USER=root \
-e MYSQL_MASTER_SERVICE_PASSWORD=1234 \
-e MYSQL_MASTER_SERVICE_DB_NAME=nacos_config \
-e MYSQL_DATABASE_NUM=1 \
-e NACOS_SERVER_PORT=8848 \
--name nacos01 \
--restart=always \
nacos/nacos-server:1.1.4
查看nacos
容器的日志信息:
docker logs -f -t --tail=100 nacos01
-
示例二:创建集群节点
nacos02
docker run -d \
--net mynet \
--ip 192.168.0.22 \
-e PREFER_HOST_MODE=ip \
-e MODE=cluster \
-e NACOS_SERVERS="192.168.0.21:8848 192.168.0.23:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_MASTER_SERVICE_HOST=192.168.0.10 \
-e MYSQL_MASTER_SERVICE_PORT=3306 \
-e MYSQL_MASTER_SERVICE_USER=root \
-e MYSQL_MASTER_SERVICE_PASSWORD=1234 \
-e MYSQL_MASTER_SERVICE_DB_NAME=nacos_config \
-e MYSQL_DATABASE_NUM=1 \
-e NACOS_SERVER_PORT=8848 \
--name nacos02 \
--restart=always \
nacos/nacos-server:1.1.4
-
示例三:创建集群节点
nacos03
docker run -d \
--net mynet \
--ip 192.168.0.23 \
-e PREFER_HOST_MODE=ip \
-e MODE=cluster \
-e NACOS_SERVERS="192.168.0.21:8848 192.168.0.22:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_MASTER_SERVICE_HOST=192.168.0.10 \
-e MYSQL_MASTER_SERVICE_PORT=3306 \
-e MYSQL_MASTER_SERVICE_USER=root \
-e MYSQL_MASTER_SERVICE_PASSWORD=1234 \
-e MYSQL_MASTER_SERVICE_DB_NAME=nacos_config \
-e MYSQL_DATABASE_NUM=1 \
-e NACOS_SERVER_PORT=8848 \
--name nacos03 \
--restart=always \
nacos/nacos-server:1.1.4
4.3.测试
如果电脑配置低或者虚拟机分配的资源过低都会影响到nacos
集群启动的时间,所以请耐心等待。
curl http://192.168.0.21:8848/nacos/index.html
curl http://192.168.0.22:8848/nacos/index.html
curl http://192.168.0.23:8848/nacos/index.html
这时可以进行数据测试,随机抽取一个nacos
节点进行测试:
curl -X GET
"http://192.168.0.23:8848/nacos/v1/cs/configs?dataId=test.yml&group=DEFAULT_GROUP"
5.tomcat配置(这里采用两个节点)
5.1.首先需要将后台的代码打包放入linux中的(tomcat的webapps目录中)
5.2.需要创建数据卷容器
#节点一
docker run -itd --name tomcat01 \
--mount type=bind,source=/opt/apache-tomcat-9.0.75/,target=/tomcat \
--net mynet --ip 192.168.0.3 registry.cn-hangzhou.aliyuncs.com/t284/zkingt284:v1.0
#节点二
docker run -itd --name tomcat02 \
--mount type=bind,source=/opt/apache-tomcat-9.0.75/,target=/tomcat \
--net mynet --ip 192.168.0.2 registry.cn-hangzhou.aliyuncs.com/t284/zkingt284:v1.0
--mount
选项的type
参数支持三种类型的数据卷:
属性 | 说明 |
---|---|
type=volume | 普通数据卷(默认即这种类型),映射到主机 例如: |
type=bind | 绑定数据卷,映射到主机指定路径下 例如: |
type=tmpfs | 临时数据卷,只存在于内存中 例如: |
5.3.需要进入tomcat容器中启动tomcat
[root@localhost /]docker exec -it tomcat01 sh
/usr/local/java # cd /tomcat/bin
/tomcat/bin # cd /tomcat/bin
以上是启动的示例
6.Nginx动态代理配置
6.1. 创建nginx容器
docker run \
--name mynginx \
-d -p 80:80 \
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /data/nginx/log:/var/log/nginx \
-v /data/nginx/html:/usr/share/nginx/html \
nginx:latest
将mynginx
添加至自定义网络mynet
并测试:
docker network connect mynet mynginx
6.2.修改nginx配置文件nginx.conf
修改nginx
配置文件nginx.conf
,请重启nginx
容器让其配置生效。
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
#新增1:nacos集群
upstream nacoses {
server 192.168.0.21:8848 weight=1;
server 192.168.0.22:8848 weight=1;
server 192.168.0.23:8848 weight=1;
}
#当前的Nginx的配置
server {
listen 80;#监听80端口,可以改成其他端口
server_name localhost;#当前服务的域名,没有域名可随便填写
#新增2:用于重定向至nacos集群
location /nacos {
proxy_pass http://nacoses;
}
location / {
root /usr/share/nginx/html/dist;#将要访问的网站的目录
try_files $uri $uri/ /index.html;#该句代码是为解决history路由不能跳转的问题,在vue-router官网有介绍
}
}
}