docker部署项目

目录

1.自定义网络相关

1.1.自定义网络操作

1.2.容器互通

1.2.1.同一网络下的容器互通

1.2.2.不同网络下的容器互通

2.Docker安装配置Nginx

2.1.什么是Nginx

2.2.部署架构图

​编辑  2.3.安装Nginx

    2.3.1.快速入门

2.3.2.部署SPA项目

3.安装配置MySQL

3.1.拉取镜像

3.2.上传mysql配置文件

3.3.创建运行mysql容器

3.4.配置mysql远程访问

3.5.持久化测试

4.安装配置Nacos

4.1.安装配置单机版Nacos

4.1.1.拉取镜像

4.1.2.创建nacos容器

2.1.3.查看nacos容器启动日志

4.1.4.配置防火墙并访问nacos

4.1.5.测试

4.2.安装配置集群版Nacos

4.2.1.停止并删除所有容器

4.2.2.创建mysql容器

4.2.3.创建nacos集群

4.3.测试

5.tomcat配置(这里采用两个节点)

 5.1.首先需要将后台的代码打包放入linux中的(tomcat的webapps目录中)

 5.2.需要创建数据卷容器

 5.3.需要进入tomcat容器中启动tomcat

6.Nginx动态代理配置

  6.1. 创建nginx容器

6.2.修改nginx配置文件nginx.conf


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.同一网络下的容器互通

分别创建两个容器centos1centos2,两个容器均使用同一个自定义网络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镜像就要加-itdnginx镜像则不需要-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 

 测试centos1centos2的连接:

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.停止并删除所有容器

分别删除单机版nacosmysql容器,之后创建的nacosmysql容器都将基于自定义网络。

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官网有介绍
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值