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 映射目录或文件,启动了一个数据卷容器,数据卷路径为:/data,
再将此数据卷映射到宿主机的/zking/data目录
--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 普通数据卷(默认即这种类型),映射到主机/var/lib/docker/volumes路径下
例如:
--mount type=volume,source=my-vol,target=/webapp
type=bind
绑定数据卷,映射到主机指定路径下
例如:
--mount type=bind,source=/webapp,target=/webapp2
type=tmpfs 临时数据卷,只存在于内存中
例如:
--mount type=tmpfs,target=/app
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官网有介绍
}
}
}
标签:容器,nginx,部署,项目,nacos,--,mysql,docker From: https://blog.51cto.com/u_16264548/7480407