使用docker部署 java web项目完整记录

news2024/12/27 12:26:48

概述:基于java及vue开发的前后端web应用, 整套系统由 一个后端服务+一个管理端前端vue+一个用户端前端vue项目组, 涉及的中间件及第三方应用有 mysql、redis、nginx, 采用docker方式部署整套系统

一、docker 安装

1、参考文档:https://docs.docker.com/engine/install/centos/

2、安装步骤详细说明:

1)、清理或卸载旧的或已安装的docker版本
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
2)、设置仓库
sudo yum install -y yum-utils
			sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3)、安装docker 其中需要输入命令 一直输 y
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
4)、启动docker 至此 docker已安装完成
sudo systemctl start docker

二、mysql安装

基于docker容器安装mysql;注意:启动容器时需要把mysql的数据存储及配置文件挂载到宿主机

1、拉取mysql镜像 这里使用的mysql版本为5.7.+ 所以拉取时 指定版本为5.7

docker pull mysql:5.7

2、使用docker iamges 命令可以查看刚拉下来的mysql镜像

mysql镜像

3、处理需挂载的目录

使用挂载卷的方式 将mysql的 conf data log 文件夹挂载到宿主机
# 创建需要挂载的目录
mkdir -p /opt/docker/mysql5.7/data
mkdir -p /opt/docker/mysql5.7/log

4、运行mysql镜像

docker run -p 3306:3306 --name mysql5.7 --restart=always --privileged=true  -v /opt/docker/mysql5.7/log:/var/log/ -v /opt/docker/mysql5.7/data:/var/lib/mysql -v /etc/localtime:/etc/localtime:ro -e MYSQL_ROOT_PASSWORD=BYHZ-2019@root.inc -d mysql:5.7
上述运行命令详解
参数说明
-p 3306:3306指定宿主机端口与容器端口映射关系
–name mysql创建的容器名称
–restart=always总是跟随docker启动
–privileged=true获取宿主机root权限
-v /opt/docker/mysql5.7/log:/var/log/映射日志目录,宿主机:容器
-v /opt/docker/mysql5.7/data:/var/lib/mysql映射数据目录,宿主机:容器
/opt/docker/mysql5.7/conf:/etc/mysql/mysql.conf.d映射配置目录,宿主机:容器
-v /etc/localtime:/etc/localtime:ro让容器的时钟与宿主机时钟同步,避免时区的问题,ro是read only的意思,就是只读
-e MYSQL_ROOT_PASSWORD=BYHZ-2019@root.inc指定mysql环境变量,root用户的密码为BYHZ-2019@root.inc
-d mysql:5.7后台运行mysql容器,版本是5.7

5、通过 docker ps 查看容器是否启动成功

三、redis安装

1、拉取redis镜像

docker pull reids

2、处理redis挂载文件

	mkdir -p /opt/docker/redis
	mkdir -p /opt/docker/redis/data
根据redis版本去官网下载对应的redis.conf文件 官网地址:https://redis.io/docs/management/config/

3、启动redis容器

docker run --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6379:6379 --name redis -v /opt/docker/redis/redis.conf:/etc/redis/redis.conf -v /opt/docker/redis/data:/data -d redis redis-server /etc/redis/redis.conf  --appendonly yes  --requirepass 123456

上述命令详解

命令说明
–restart=always总是开机启动
–log-opt max-size=100m --log-opt max-file=2日志方面配置
-p 6379:63796379端口挂载
–name容器名称
-v /opt/docker/redis/redis.conf:/etc/redis/redis.confredis配置文件挂载到宿主机
-v /opt/docker/redis/data:/dataredis数据文件
-d redis后台启协redis
redis-server /etc/redis/redis.conf以配置文件启动redis,加载容器内的conf文件
–appendonly yes开启redis 持久化
–requirepass 123456设置redis密码

四、后端应用服务部署

1、创建后端服务包后所在目录

mkdir -p /opt/yunxiao/yx-projcet-server

2、在/opt/yunxiao/yx-projcet-server目录下 创建Dockerfile,dockerfile内容如下

FROM maven:3.8.4-openjdk-11 AS builder
COPY settings.xml /usr/share/maven/conf/settings.xml

# jdk 是一个已有的包含 jdk 的镜像
FROM openjdk:8-jdk-alpine

#  作者签名
MAINTAINER sgs
LABEL yx-server=1.0

#  简化 jar 的名字路径 (#:表示注释掉)
COPY  ./yx-server.jar /yx-server.jar

#  执行 java -jar 命令 (CMD:在启动容器时才执行此行。RUN:构建镜像时就执行此行)
CMD java  -Xms256m -Xmx512m -jar yx-server.jar

3、通过命令查看mysql 及 redis的内网ip 修改 项目的yml文件中mysql 及redis的ip,

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器id

查看容器ip

然后将打成yx-server.jar包 上传至 /opt/yunxiao/yx-projcet-server目录下

4、在/opt/yunxiao/yx-projcet-server目录下 执行构建镜像命令

docker build -t yx-server .	

5、因为存上文件上传功能 需把上传的文件挂臷到宿主机

mkdir -p /home/adds/uploadPath

6、启动后端服务容器

docker run -p 9888:9888 -v /home/adds/uploadPath:/home/adds/uploadPath --name yx-server -d yx-server

7、查看日志相关命令

	a、查看容器实时日志   
		docker logs -f 容器id
	b、查看历史日志  
		进入容器
		docker exec -it 容器id /bin/sh
		然后进入logback配置的日志路径
			cd /logs/yx-server

8、后续更新部署时 只需将打的jar包上传至/opt/yunxiao/yx-projcet-server目录下 然后执行以下命令重启 后端服务容器

docker restart 容器id

五、前端部署

1、docker 拉取nginx镜像

docker pull nginx 

2、创建前端包路径 及nginx配置文件路径及日志路径

mkdir /opt/yunxiao/yx-front
		mkdir -p /opt/docker/nginx/conf.d
		mkdir -p /opt/docker/nginx/log
注意: 需要先使用docker run -itd --name testnginx nginx 命启动一个nginx容器 然后将对应文件夹的内容复制到宿主机挂载卷下
docker cp 容器id:/etc/nginx/conf.d /opt/docker/nginx
然后再删除之前前面的nginx

3、 启动nginx容器

docker run -itd --name yx-nginx -v /opt/docker/nginx/conf.d:/etc/nginx/conf.d -v /opt/yunxiao/yx-front:/etc/nginx/html -v /opt/docker/nginx/log:/usr/log/nginx -p 8900:8900 -p 8901:8901 nginx

4、修改/opt/docker/nginx/conf.d 下的配置文件 将请求代理到正确的后端服务 及前端资源路径

5、上传打包好的前端资源至对应的路径下 重启nginx容器即可

6、后续更新部署前端资源时 只需将打包好的前端资源替换掉对应路径下的前端资源即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/596764.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jira中issue状态的改变触发jenkins job构建

背景:想通过监控jira中 issue状态的变化去触发jenkins job的构建 在jenkins中安装插件:JIRA Trigger plugin. 下载地址:https://plugins.jenkins.io/jira-trigger/ 在Jenkins-> Manage Jenkins -> Configure System -> JIRA Trigg…

UnityVR--EventManager--事件中心2

目录 前言 事件中心的结构 EventManager事件管理器 EventType事件类型 EventListener监听及回调 EventDataBase回调时需要传递的参数 总结 前言 上一篇(事件中心1)中,简单解释了委托、事件、监听者,是用于管理项目运行过程…

深度学习进阶篇[9]:对抗生成网络GANs综述、代表变体模型、训练策略、GAN在计算机视觉应用和常见数据集介绍,以及前沿问题解决

【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍:【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化…

多线程-*同步代码块*解决两种线程创建方式的线程安全问题

线程安全问题及解决 当我们使用多个线程访问同一资源(可以是同一个变量、同一个文件、同一条记录等)的时候,若多个线程只有读操作,那么不会发生线程安全问题。但是多个线程中对资源有读和写的操作。就容易出现线程安全问题。 举…

PyTorch 深度学习 || 专题三:PyTorch 数据的准备

PyTorch 数据的准备 1. 生成数据的准备工作 import torch import torch.utils.data as Data#准备建模数据 x torch.unsqueeze(torch.linspace(-1, 1, 500), dim1) # 生成列向量 y x.pow(3) # yx^3#设置超参数 batch_size 15 # 分块大小 torch.manual_seed(10) # 设置种子点…

国自然发文:这种行为将永久取消基金申请资格

函评阶段这些行为被基金委禁止 国家自然科学基金委重拳出击打击"打招呼"现象,出台《国家自然科学基金项目评审请托行为禁止清单》,禁止科研人员、依托单位、评审专家和基金委工作人员24种违规行为。 主要内容如下: 一、科研人员禁止清单(7项) 主要包括…

初阶数据结构——二叉树

目录 树的概念及结构树的概念树的相关概念树的表示树在实际中的运用 二叉树概念及结构特殊的二叉树二叉树的性质二叉树的存储结构 二叉树的顺序结构及实现二叉树的顺序结构堆的概念及结构堆的实现堆的结构:初始化堆:销毁堆:插入数据&#xff…

通过maven配置不同的开发环境

前言 项目有开发、测试、生产至少有这三个环境, 所需要的配置信息肯定不一样, 比如需要开发环境的时候,注解掉测试和生产的配置信息,打开开发的配置信息。 后来工作接触到新项目,发现是通过maven来控制加载不同的配置…

第55讲:Python函数形参、实参的语法格式汇总以及应用小案例

文章目录 1.Python函数中各种参数的汇总1.1.常规参数1.2.参数设置默认值1.3.强制传参时使用关键字传参1.4.个数可变的形参1.5.将序列中的每个元素都转换为位置实参1.6.将字典中的每个元素都转换为关键字实参 2.小案例练习Python中的各种函数参数2.1.案例一2.2.案例二 1.Python函…

React-reacte-app项目实现antD按需加载(2023)

出现的问题: 项目打包后,由于引入了antD,所以打包后的mani.js体积会非常大。相当于引入了全部的antD的代码。所以可以做一个优化:通过script标签引入antD,将其挂载在window上。使用antD组件的使用,直接从w…

2.矢量分析

目录 一.标量函数和矢量函数 二.矢端曲线 三.矢量函数导数和微分 1.导数 2.导数的几何意义 3.微分 4.矢量导数性质 5.例题 四.矢量导数的应用 1.几何应用 1.曲线的切线和法平面 2.曲面的法线和法平面 2.物理应用 3.两大典型问题 五.矢量函数的积分 如果第一章我…

WOT全球技术创新大会开幕倒计时——好内容才是永远的底气

距离6月16日-17日召开的WOT全球技术创新大会还有半个月时间,所有讲师、议题均已就位。本届WOT不仅囊括2023年最火的技术——AIGC、大模型、大算力,也有被技术人永恒关注的热点话题——多云实践、业务架构演进、效能提升。 筹备数月之久,50来…

Intel® 以太网800 系列网络适配器 – DPDK上的性能演进

1. 介绍 Intel以太网800系列网络适配器提供卓越的性能,以满足各种工作负载的要求。800系列提供了数据包分类和排序优化、硬件增强的定时能力以及完全可编程的流水线。Intel的以太网产品组合始终提供可靠的体验和经过验证的互操作性。 在DPDK中,ICE轮询模…

CDN控制平台操作指引之账号注册及添加域名

一、注册账户及登录 (一)请确认您已经注册了火伞云账号并完成账号实名认证。如果未注册,请先完成账号注册和实名认证。 (二)登录火伞云融合CDN管理平台。 二、添加加速域名 使用火伞云融合CDN加速指定网站&#xff…

NodeJs之Ajax技术

1. 初识Ajax ./public/Ajax.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content&qu…

ArcGIS Pro地图和场景

目录 1 地图和场景 1.1 地图 1.2 场景 2 图层 2.1 图层类型 2.1.1 要素图层&#xff08;Feature layers&#xff09; 2.1.2 栅格图层&#xff08;Raster layers&#xff09; 2.1.3 场景图层&#xff08;Scene layers&#xff09; 2.1.4 服务图层&#xff08;Service la…

机器视觉怎么对陶瓷板的外观尺寸进行自动检测?

随着工业自动化的不断发展&#xff0c;机器视觉技术在制造业中的应用越来越广泛。在陶瓷板行业中&#xff0c;机器视觉技术可以用于自动检测陶瓷板的外观尺寸&#xff0c;提高生产效率和产品质量。下面我们来介绍机器视觉如何对陶瓷板的外观尺寸进行自动检测。 一、检测原理 …

第2关:socket编程

第2关&#xff1a;socket编程 任务描述相关知识1、Socket2、socket函数3、bind函数4、listen、connetct函数5、accept函数6、read、write函数7、close、shutdown函数8、三次握手9、数据传输10、四次挥手 编程要求及注意事项测试说明参考代码 任务描述 本关任务&#xff1a; 编…

轻松掌握,板对板连接器选型指南

一、什么是板对板连接器&#xff1f; 板对板连接器(简称BTB)&#xff0c;是精密电路中电源和信号耦合连接必不可少的器件。随着产品复杂度和电路设计规模的不断提升&#xff0c;板对板连接器也沿着市场需求向着高速率&#xff0c;高功率密度&#xff0c;轻薄化几个方向发展。 …

chatgpt赋能python:为什么Python不适合做SEO?——解析

为什么Python不适合做SEO&#xff1f;——解析 Python作为一种非常方便的编程语言&#xff0c;在数据处理、人工智能等方面有着广泛的应用。然而&#xff0c;在SEO领域&#xff0c;Python似乎并不受欢迎。本文将从Python不适用于SEO的几个方面做出详细的介绍&#xff0c;并为读…