docker项目部署流程(Vue+Spingboot)

文章目录

    • 1.docker安装(Ubuntu)
      • 1.卸载原有的docker引擎和旧版本软件包(第一次使用跳过)
      • 2.使用存储库安装apt
    • 2.安装nginx并运行
    • 3.安装Mysql
    • 4.构建jdk镜像
      • 1.准备条件(3样东西)
        • 拉取ubuntu镜像
        • Dockerfile
        • Dockerfile简洁版
      • 2.构建java镜像
      • 3.创建并运行java容器
    • 5.网络配置
      • 1.自定义网络
      • 2.加入网络
      • 3.ping命令
    • 6.注意事项

1.docker安装(Ubuntu)

1.卸载原有的docker引擎和旧版本软件包(第一次使用跳过)

# 卸载 Docker Engine、CLI、containerd 和 Docker Compose 软件包:
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras# 主机上的映像、容器、卷或自定义配置文件 不会自动删除。要删除所有镜像、容器和卷,请执行以下操作:
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd# 删除源列表和密钥环
sudo rm /etc/apt/sources.list.d/docker.list
sudo rm /etc/apt/keyrings/docker.asc# 卸载旧版本
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

2.使用存储库安装apt

#1.设置 Docker 的存储库(一行一行执行)sudo apt-get updatesudo apt-get install ca-certificates curlsudo install -m 0755 -d /etc/apt/keyringssudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.ascsudo chmod a+r /etc/apt/keyrings/docker.ascecho \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullsudo apt-get update# 2.安装 Docker 软件包
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin# 3.启动docker 
systemctl start docker# 4.查看是否运行,该命令为查看镜像
docker images

2.安装nginx并运行

# 拉取nginx镜像
docker pull nginx# 创建nginx容器并且运行,
# -p 做宿主机与容器端口的映射
# -v 做数据挂载
# 注意(-v)后面(:)前面的html目录和nginx.conf文件需要自己创建
# (:)后面是固定的docker nginx容器目录
docker run -d\--name nginxR\-p 18080:18080\-p 18081:18081\-v /root/nginx/html:/usr/share/nginx/html\-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf\nginx

注:nginx.conf配置文件指定的前端目录所在位置要与容器内的位置相对于,不要直接写相对于宿主机的位置,否则服务器访问不到

3.安装Mysql

# 拉取mysql镜像
docker pull mysql# 创建mysql容器并且运行,这里同样也要做数据挂载
# -v 做数据目录、初始化脚本(自己在该目录放置sql)、和配置文件(字符格式等配置)的挂载,
# 同样也要自己创建文件目录
docker run -d\--name mysql1.0\-p 3306:3306\-e TZ=Asia/Shanghai\-e MYSQL_ROOT_PASSWORD=root1234\-v /root/mysql/data:/var/lib/mysql\-v /root/mysql/init:/docker-entrypoint-initdb.d\-v /root/mysql/conf:/etc/mysql/conf.d\mysql

之所以做数据挂载就是防止容器出现问题挂掉,那么数据也随之消失,挂载到宿主机,即使容器挂掉,在创建新容器也能保持原有的数据

注意:实际开发环境中3306端口不对外暴露,容器内自定义网络互相访问

4.构建jdk镜像

1.准备条件(3样东西)

一份 jdk.tar.gz 包

一份自己的 java项目jar 包

一份编写好的 Dockerfile 文件

拉取ubuntu镜像
docker pull ubuntu:24.04
Dockerfile
# 指定基础镜像
FROM ubuntu:24.04#配置环境变量指定到容器内的目录(通过通过这个环境变量来引用/usr/local这个路径)
ENV JAVA_URL=/usr/local# 拷贝jdk到容器内
COPY ./jdk17.tar.gz $JAVA_URL
#拷贝自己的项目的jar包到容器内
COPY musicservice-0.0.1-SNAPSHOT.jar /app.jar#进入到下载了jdk的目录把他解压缩重命名java17
RUN cd $JAVA_URL && tar -zxf ./jdk17.tar.gz#配置jdk环境变量,何在本地配置环境变量是一致的
ENV JAVA_HOME=$JAVA_URL/jdk17
#添加到系统搜索路径
ENV PATH=$PATH:$JAVA_HOME/bin# 入口,java项目的启动命令
ENTRYPOINT ["java","-jar","/app.jar"]

注意:16行的jdk17一定要与jdk17.tar.gz解压出来的文件名一致

不然报错:executable file not found in $PATH: unknown.

Dockerfile简洁版

ubuntu、jdk、jar 三者构成springboot基本运行环境

FROM ubuntu:24.04COPY jdk17.tar.gz /usr/local
COPY my.jar /app.jarRUN cd /usr/local && tar -xf jdk17.tar.gz && rm jdk17.tar.gz && apt-get update && apt-get install -y iputils-pingENV PATH=/usr/local/jdk-17.0.12/bin:$PATHENTRYPOINT ["java","-jar","/app.jar"]

这里RUN多加了一个ping工具

2.构建java镜像

# 构建java镜像
docker build -t javajar .# 注意:末尾的点不要忽略了,javajar是自定义镜像名

3.创建并运行java容器

docker run -d --name javajar1.0 -p 8888:8888 javajar

5.网络配置

docker容器都是相互隔离的,要将三部分加入同一个网络,就能互相访问了

1.自定义网络

docker network create mynet

2.加入网络

docker network connect mynet nginx1.0
docker network connect mynet mysql1.0
docker network connect mynet javajar1.0

3.ping命令

# 如果需要进入到容器内部检查连通性,就需要ping
docker exec -it javajar1.0 bash
# docker中是没有ping命令的,需要自己安装
apt-get update
apt-get install iputils-ping

6.注意事项

1.由于通过自定义网络后就可以通过容器名访问,我们springboot后端访问数据库直接用容器名访问即可

**解决:**为了解决mysql容器ip发生变化而访问不了的问题,javajar是容器名

2.nginx代理访问后端也用容器名访问即可

示例:proxy_pass http://javajar:8888

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《童年-高尔基》阅读笔记

《童年-高尔基》阅读笔记 2024-12-29日读完,在图书馆的书架上,大批的厚厚的外国文学书,只有这本薄薄的,我就拿下来看了一下,发现这本书就是初中就在语文课本中提到的自传体三部曲之一,其他两本是《在人间》…

fpga系列 HDL:ModelSim显示模拟波形以及十进制格式数值

FPGA中使用数字滤波器时,可通过观察模拟波形更好地查看滤波效果。可以通过ModelSim中的波形格式设置来实现更直观的波形显示。 右键波形->Format-> Analog 效果 不同的数值格式显示:右键波形->Radix-> Decimal 效果 示例代码 ver…

AI大模型语音识别转文字

提取音频 本项目作用在于将常见的会议录音文件、各种语种音频文件进行转录成相应的文字,也可从特定视频中提取对应音频进行转录程文字保存在本地。最原始的从所给网址下载对应视频和音频进行处理。下载ffmpeg(https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-…

《计算机组成及汇编语言原理》阅读笔记:p128-p132

《计算机组成及汇编语言原理》学习第 10 天,p128-p132 总结,总计 5 页。 一、技术总结 1.8088 organization and architecture 8088处理器是16位电脑,寄存器是16位,数据总线(data bus)是8位,地址总线是20位。 (1)g…

【ArcGIS Pro】完整的nc文件整理表格模型构建流程及工具练习数据分享

学术科研啥的要用到很多数据,nc文件融合了时间空间数据是科研重要文件。之前分享过怎样将nc文件处理成栅格后整理成表格。小编的读者还是有跑不通整个流程的,再来做一篇总结篇,也分享下练习数据跟工具,如果还是弄不了的&#xff0…

安装了python,环境变量也设置了,但是输入python不报错也没反应是为什么?window的锅!

目录 问题 结论总结 衍生问题 1 第1步:小白python安装,不要埋头一直点下一步!!! 2 第2步:可以选择删了之前的,重新安装python 3 第3步:如果你不想或不能删了重装python&#…

图像处理-Ch7-快速小波变换和小波包

个人博客!无广告观看,因为这节内容太多了,有点放不下,分了三节 文章目录 快速小波变换(The Fast Wavelet Transform)与两频段子带编译码系统的关系例:计算一维小波变换 一维快速小波反变换例:计算一维小波…

【从零开始】11. LLaMA-Factory 微调 Qwen 模型(番外篇)

书接上回,在完成了 RAGChecker 测试后,离 RAG 应用真正发布还差最后一步 - 基础信息指令微调。考虑到模型还是需要具备一定程度的“自我认知”,因此需要将公司信息“嵌入”到模型里面的。为此,我选择了 LLaMA-Factory(…

小程序配置文件 —— 15 页面配置

页面配置 小程序的页面配置,也称为局部配置,每一个小程序页面也可以使用自己的 .json 文件来对页面的窗口表现进行配置; 需要注意的是:页面配置文件的属性和全局配置文件中的 window 属性几乎一致,只不过这里不需要额…

Linux高级--2.4.5 靠协议头保证传输的 MAC/IP/TCP/UDP---协议帧格式

任何网络协议,都必须要用包头里面设置写特殊字段来标识自己,传输越复杂,越稳定,越高性能的协议,包头越复杂。我们理解这些包头中每个字段的作用要站在它们解决什么问题的角度来理解。因为没人愿意让包头那么复杂。 本…

算法基础一:冒泡排序

一、冒泡排序 1、定义 冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。 …

Spring Cloud LoadBalancer (负载均衡)

目录 什么是负载均衡 服务端负载均衡 客户端负载均衡 Spring Cloud LoadBalancer快速上手 启动多个product-service实例 测试负载均衡 负载均衡策略 自定义负载均衡策略 什么是负载均衡 负载均衡(Load Balance,简称 LB) , 是高并发, 高可用系统必不可少的关…

OneNet平台2024版MQTT协议完整开发案例教程【MQTT数据流模式】

一、前言 此篇文章是以智慧路灯项目为例,完整的演示介绍 OneNet平台的开发。 OneNet平台 是2024年的新版本,采用数据流模版为例。 方便大家,腾讯云IOT 转 OneNet平台。 因为目前腾讯云IOT平台无法白嫖了,新用户已经无法免费使用…

一起学Git【第六节:查看版本差异】

git diff是 Git 版本控制系统中用于展示差异的强大工具。他可以用于查看文件在工作区、暂存区和版本库之间的差异、任意两个指定版本之间的差异和两个分支之间的差异等,接下来进行详细的介绍。 1.显示工作区与暂存区之间的差异 # 显示工作区和暂存区之间的差异,后面不加参数…

【小程序】wxss与rpx单位以及全局样式和局部样式

目录 WXSS 1. 什么是 WXSS 2. WXSS 和 CSS 的关系 rpx 1. 什么是 rpx 尺寸单位 2. rpx 的实现原理 3. rpx 与 px 之间的单位换算* 样式导入 1. 什么是样式导入 2. import 的语法格式 全局样式和局部样式 1. 全局样式 2. 局部样式 WXSS 1. 什么是 WXSS WXSS (We…

uniapp-vue3(下)

关联链接:uniapp-vue3(上) 文章目录 七、咸虾米壁纸项目实战7.1.咸虾米壁纸项目概述7.2.项目初始化公共目录和设计稿尺寸测量工具7.3.banner海报swiper轮播器7.4.使用swiper的纵向轮播做公告区域7.5.每日推荐滑动scroll-view布局7.6.组件具名…

大数据技术-Hadoop(一)Hadoop集群的安装与配置

目录 一、准备工作 1、安装jdk(每个节点都执行) 2、修改主机配置 (每个节点都执行) 3、配置ssh无密登录 (每个节点都执行) 二、安装Hadoop(每个节点都执行) 三、集群启动配置&a…

ipad如何直连主机(Moonlight Sunshine)

Windows 被连接主机(Windows) 要使用的话需要固定ip,不然ip会换来换去,固定ip方法本人博客有记载Github下载Sunshine Sunshine下载地址除了安装路径需要改一下,其他一路点安装完成后会打开Sunshine的Web UI&#xff…

【我的 PWN 学习手札】IO_FILE 之 stdout任意地址读

上一篇文章学会了stdin任意地址写【我的 PWN 学习手札】IO_FILE 之 stdin任意地址写-CSDN博客 本篇关注stdout利用手法,和上篇提及的手法有着异曲同工之妙 文章目录 前言 一、_IO_2_1_stdout_输出链,及利用思路 (一)_IO_2_1_std…

部署SenseVoice

依赖 Conda cuda pythor 查看GPU版本-CSDN博客 创建虚拟conda环境 conda create --name deeplearn python3.10 conda activate deeplearn git clone https://github.com/FunAudioLLM/SenseVoice.git cd SenseVoice pip install -r requirements.txt pip install gradio pyth…