首页 > 其他分享 >docker部署项目

docker部署项目

时间:2023-09-15 14:04:30浏览次数:28  
标签:容器 nginx 部署 项目 nacos -- mysql docker

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

docker部署项目_nginx

以上是启动的示例

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

相关文章

  • 洗面奶检测的项目包含哪些?
    洗面奶,属于面部洁肤制品。清洗皮肤时,洗面奶清洗的对象物是人体面部的皮肤分泌的皮脂、汗、剥离脱落的角质层细胞等从身体上产生的污垢,以及灰尘、各种微生物、美容化妆品残留物等来自外部的污垢。这些残留代谢产物是不稳定的,可与空气中的氧,或沉积分子反应。在暴露于阳光时或皮肤上有......
  • Electron-vue项目打包遇坑
    项目背景一个Electron+vue2的桌面应用项目,进行打包使用了vue-cli-plugin-electron-builder将Electron和vue结合直接使用electron-builder打包问题一:打包后,background.js中会出现模块引入报错。Electron是commonJs规范,但使用了ESM规范import{createProtocol}from'vu......
  • 银河麒麟安装Docker-国产化-九五小庞
     银河麒麟高级服务器操作系统V10是针对企业级关键业务,适应虚拟化、云计算、大数据、工业互联网时代对主机系统可靠性、安全性、性能、扩展性和实时性的需求,依据CMMI5级标准研制的提供内生安全、云原生支持、国产平台深入优化、高性能、易管理的新一代自主服务器操作系统;......
  • 软件测试|深入解析Docker Run命令:创建和启动容器的完全指南
    简介Docker是一种流行的容器化平台,用于构建、分发和运行应用程序。其中一个最基本且重要的Docker命令是dockerrun,用于创建和启动容器。本文将详细解析dockerrun命令的用途、参数和示例,帮助您全面掌握创建和启动容器的过程。dockerrun在Docker中,容器是运行应用程序的独立环......
  • 问题记录:vue项目中的babel转化器是否可以转换npm install下来的依赖库,使该依赖库也可
    vue项目中的babel转化器是否可以转换npminstall下来的依赖库,使该依赖库也可以兼容es6语法?是的,Babel转换器可以用于转换通过npminstall安装的依赖库,以使其兼容ES6语法。Babel是一个广泛使用的JavaScript编译器,可以将较新版本的JavaScript代码转换为向后兼容的版本,以便在不支持这......
  • 软件测试|全面解析Docker Start/Stop/Restart命令:管理容器生命周期的必备工具
    简介Docker是一种流行的容器化平台,用于构建、分发和运行应用程序。在使用Docker时,经常需要管理容器的生命周期,包括启动、停止和重启容器。本文将详细介绍Docker中的dockerstart、dockerstop和dockerrestart命令,帮助您全面了解如何管理容器的运行状态。在Docker中,容器是独立......
  • 软件测试|Docker cp命令详解:在Docker容器和主机之间复制文件/文件夹
    简介Docker是一种流行的容器化平台,它允许开发人员在独立、可移植的环境中构建、打包和部署应用程序。在使用Docker时,常常需要在Docker容器和主机之间进行文件的复制和共享。Docker提供了一个名为dockercp的命令,可以轻松地在容器和主机之间复制文件和目录。本文将详细介绍docker......
  • 软件测试|深入学习 Docker Logs
    简介Docker是一种流行的容器化技术,它能够帮助用户将应用程序及其依赖项打包成一个可移植的容器。Dockerlogs是Docker提供的用于管理容器日志的命令,本文将深入学习Dockerlogs的使用和管理,帮助用户更好地监测和解决容器问题。DockerLogs命令dockerlogs命令是Docker......
  • 软件测试|Docker Kill/Pause/Unpause命令详细使用指南
    简介Docker是一种流行的容器化平台,提供了各种命令和功能来管理和操作容器。本文将详细介绍Docker中的三个重要命令:kill、pause和unpause。我们将深入了解它们的作用、用法和示例,帮助您更好地理解和使用这些命令。什么是DockerKill/Pause/Unpause命令?Docker提供了几个与容器生......
  • 软件测试|Docker exec命令详细使用指南
    简介Dockerexec命令是Docker提供的一个强大工具,用于在正在运行的容器中执行命令。本文将详细介绍Dockerexec命令的用法和示例,帮助大家更好地理解和使用这个命令。Docker是一种流行的容器化平台,允许我们在容器中运行应用程序。有时候,在容器内执行命令可以帮助我们调试、排查问......