Docker部署镜像 发布容器 容器网络互联 前端打包

news2024/9/19 14:31:35

准备工作

 导入相关依赖

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
            <version>3.5.7</version>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.7</version>
        </dependency>

        <!--模板引擎-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.3</version>
        </dependency>

        <!--knife4j-->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
            <version>4.5.0</version>
        </dependency>

配置数据库相关信息(这里注意我直接配虚拟机的ip 192.168.168.168 了)

spring.datasource.url=jdbc:mysql://192.168.168.168:3306/blue?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&connectTimeout=10000&socketTimeout=30000&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

 创建一个表以及它的实体类,控制器,服务类,mapper接口

在控制器中写一个测试接口

@RestController
@RequestMapping("/employee")
public class EmployeeController {
    @Resource
    private EmployeeService employeeService;
    
    @GetMapping("/getAll")
    public Object test01(){
        return employeeService.list();
    }
}

修改pom文件中的skip为false

 先clean再打包

生成我们需要的jar包

配置好docker环境,需要装载好jdk,mysql,nginx的镜像

至此,准备工作完成

docker部署数据库 

虚拟机中执行命令,创建数据库容器

命令格式

docker run -id --name=数据库容器名 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -e TZ=Asia/Shanghai --privileged=true --restart=always mysql的镜像版本

  • -d--detach 的缩写,表示在后台运行容器,并在创建容器完成后打印容器 ID。

  • -i--interactive的缩写,表示提供交互式对话。所谓交互式对话,就是在容器运行时,可以通过terminal输入命令进行对话。

  • -p:表示绑定端口  格式为: 宿主机端口:容器端口   由于mysql的默认端口为3306,所以都填3306即可

  • -e  (environment) 表示配置环境变量   MYSQL_ROOT_PASSWORD=root  指定root用户的密码为root   TZ=Asia/Shanghai  指定时区(timezone)为亚洲上海

  •  --privileged  表示赋予容器额外的权限

  • --restart=always  docker服务重启时自动重启容器

[root@localhost ~]# docker run -id --name=mysql_master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -e TZ=Asia/Shanghai --privileged=true --restart=always mysql:8.0.29
3331c9b871bad3944b68b35762646c33011b134e9a8e508e40bb89c3327eb33e
[root@localhost ~]#

连接远程数据库

配置数据库连接,虚拟机的ip地址为192.168.168.168

 运行sql文件

至此,我们已经成功在mysql_master容器内创建了数据库,并导入了sql文件,生成了数据表 

测试一下控制器的接口

创建一个dockerfile文件,配置相关信息

 

点击run,等待容器运行起来,输入网址,请求接口

结果符合我们的预期

基于docker-compose.yml发布容器

上面是用Dockerfile创建容器,用docker-compose.yml文件创建容器,会更加方便,从鲸鱼图标上的集装箱也可以看出来。

创建容器

# 版本为3
version: '3'
# 服务 即要创建的容器
services:
  db-demo01:
    # 指定容器的镜像
    image: testdockerenv01:0.0.1
    # 指定容器的名字
    container_name: db-demo01
    # 指定容器的端口绑定(可指定多个)    宿主机端口:容器端口
    ports:
      - "8081:8080"
  db-demo02:
    image: testdockerenv01:0.0.1
    container_name: db-demo02
    ports:
      - "8082:8080"
      - "8083:8080"

 run一下,可以看到创建了两个容器

访问一下,发现8082和8083端口都能访问db-demo02容器,符合预期

创建服务(本质上还是创建容器)

准备工作

1.先把前面创建的mysql_master容器删了

2. 虚拟机中创建 /opt/nginx/html  目录

/usr/share/nginx/html 是Nginx容器内默认存放网页文件的目录。

创建 /opt/nginx/html 的目的是为了将两者映射起来  (注意 /opt/nginx/html  是推荐的存放位置,实际是可以改的 。但是不要把页面放到/root,因为这是root用户的根目录,nginx用户权限不够,会报403

现在  /opt/nginx/html  中只有一个index.html(这个index.html目录是我们自己写的),尝试打印它

写docker-compose-base.yml 文件 

# 版本
version: '3'
# 服务(即创建的容器们)
services:
  # mysql服务
  mysql:
    # 指定镜像   (镜像名:版本号)
    image: mysql:8.0.29
    # 容器名
    container_name: mysql_master
    # 环境变量
    environment:
      - MYSQL_ROOT_PASSWORD=root # root账户的密码
      - TZ=Asia/Shanghai  # 时区
      - MYSQL_CHARSET=utf8mb4 # 字符集编码
    # 端口绑定 宿主机端口:容器端口  mysql的默认端口为3306
    ports:
      - "3306:3306"
    # 添加额外的权限
    privileged: true
    # docker服务重启是启动容器
    restart: always
# nginx服务
  nginx:
    image: nginx:latest
    container_name: nginx
    # volumes 允许你将宿主机上的目录或文件挂载到容器内的指定位置,这样就实现了宿主机和容器间目录的双向绑定,容器就可以访问或修改宿主机上的数据了。
    volumes:
    # 将宿主机上的 /opt/nginx/html 目录挂载到容器内的 /usr/share/nginx/html 目录。
    # 这里,/opt/nginx/html 是宿主机上的路径,而 /usr/share/nginx/html 是Nginx容器内默认存放网页文件的目录。
      - /opt/nginx/html:/usr/share/nginx/html
    # nginx的默认端口为80
    ports:
      - "80:80"
    restart: always

注意这里面nginx的数据卷的挂载

 

这里我们把我们刚才创建的 /opt/nginx/html 文件夹 和 nginx容器下的 /usr/share/nginx/html文件夹绑定起来,这样我们就可以通过操作 /opt/nginx/html 里面的文件资源实现 nginx里面绑定的文件夹的同步更新

同样的,也可以通过命令行挂载数据卷

 运行结果

 nginx容器已经跑起来了,现在通过terminal去找我们在虚拟机的index.html文件是否被成功挂载了

 结果符合我们的预期 它果然在/usr/share/nginx/html  目录下

现在去访问网页

为什么会这样呢?

原来访问192.168.168.168,应该是下面这个页面

 但是由于我们进行了挂载,我们的index.html直接覆盖了它原有的html文件

容器网络互联

docker容器操作的命令

案例 

现在我有如下5个可运行的容器,他们都在doc_default网络下

注意这里的ip

现在进入nginx的控制台,试着ping一下nacos

(没有ping命令:apt-get update  然后 apt install iputils-ping)

 发现ping 容器名字或者ip都可以ping通,这是因为他们在同一个网络里面

************************************

现在创建一个db-demo01容器 (操作网络的时候关闭它)

 

通过 docker inspect db-demo01查看网络详情信息  由于在创建容器的文件中没有指定网络,它自动被放到doc_default网络

通过docker network disconnect 让db-demo01容器离开doc_default 

现在我们创建一个名为demo的网络,把他加进来 

创建网络

容器加入网络

 

现在我们重启一下容器 

发现同一个网络里面容器的ip是会变的,我们通过ping 容器名的优势就体现出来了,不需要每次记住容器的ip

现在启动db-demo01 尝试ping一下nacos

发现ping不通,这是因为它们不属于同一网络 

************************************************

用nginx容器 通过容器名ping一下nacos,仍然能ping通,这是因为它们处于同一网络(即doc_default)

ps:一个容器可以隶属于多个网络 

前端打包

我们的前端界面要进行打包,部署到nginx服务器上

两种方式进行打包:

1.

2.

打包的结果放在一个名为dist的文件夹中,里面有一堆js文件(页面的打包结果)

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

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

相关文章

CLIP论文中关键信息记录

由于clip论文过长&#xff0c;一直无法完整的阅读该论文&#xff0c;故而抽取论文中的关键信息进行记录。主要记录clip是如何实现的的&#xff08;提出背景、训练数据、设计模式、训练超参数、prompt的作用&#xff09;&#xff0c;clip的能力&#xff08;clip的模型版本、clip…

【Python机器学习】序列到序列建模——对序列到序列模型的增强

有两种增强训练序列到序列模型的方法&#xff0c;可以提高模型的精确率和可扩展性。 使用装桶法降低训练复杂度 输入序列可以有不同的长度&#xff0c;这使短序列的训练数据添加了大量填充词条。过多的填充会使计算成本高昂&#xff0c;特别是当大多数序列都很短&#xff0c;…

你的绩效是不是常年都是B

原创不易&#xff0c;求赞&#xff0c;求关注&#xff0c;&#x1f64f;&#x1f64f;&#x1f64f;&#x1f64f;&#x1f64f;&#x1f64f;&#x1f64f;&#x1f64f; 目录 原创不易&#xff0c;求赞&#xff0c;求关注&#xff0c;&#x1f64f;&#x1f64f;&#x1f64…

村落检测系统源码分享

村落检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

Chainlit集成Langchain并使用通义千问AI知识库高级检索(多重查询)网页对话应用教程

前言 之前写过几篇利用Chainlit集成Langchain和国内通义千问大模型集成的知识库检索增加的网页对话应用的技术文章。文章中关于Langchain的知识库检索只是入门级别的教学&#xff0c;本篇文章针对Langchain的知识库高级检索技术和之前对话应用的代码进行完善。 本次主要改进的…

月薪14K的网安公司,来做一下笔试题呀~

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 网络安全简介…

leetcode-枚举算法

1.两数之和 题目一&#xff1a;两数之和 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案&#xff0c;并且你不能使用两次相同的元素…

JVM JMM 专题篇 ( 12000 字详解 )

一&#xff1a;JVM 简介 JVM 是 Java Virtual Machine 的简称&#xff0c;意为 Java 虚拟机&#xff0c;虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。 常见的虚拟机&#xff1a;JVM、VMwave、Virtual Box&#xff0c;JVM 和其…

微调大模型不再难:LoRA方法带你轻松节省99%的训练成本!

我们之前说大模型有四种玩家&#xff0c;其中前三种都是要做模型训练的。而大部分公司或个人&#xff0c;都是在第二种开源大模型的基础上来做训练。 而这种训练方式又分为两种。一种要么就是从头训练&#xff0c;要么就Fine-tuning接着开源模型来训练&#xff0c;在基座模型已…

IP 协议分析《实验报告》

目录 一、 实验目的 二、实验设备和环境 三、实验记录 1、实验环境搭建 2、IP 协议分析 1.设置抓包接口 2.IP 报文分析 3.报文长度计算 4.生存时间 TTL 5.分析总结 3、IP分片 1.IP 分片简介 2.捕获分组 3.结果分析 一、 实验目的 1、掌握 IP 协议数据报格式&…

知识图谱与异构图神经网络(7)--1

知识图谱是由实体(节点)和关系( 不同类型的边) 组成的多关系图。作为一种非常重要又特殊的图结构数据&#xff0c;知识图谱被广泛应用在人工智能和自然语言处理领域&#xff0c;从语义解析、命名实体消歧到问答系统、推荐系统中都可以看到来自知识图谱的技术推动。本质上&#…

树和二叉树基本术语、性质

目录 树的相关知识 常见考点1&#xff1a;结点数总度数&#xff0b;1 常见考点2&#xff1a; 度为m的树和m叉树 常见考点3&#xff1a;度为m的树第i层至多有结点数 常见考点4&#xff1a;高度为h的m叉树至多有结点 ​编辑 常见考点5&#xff1a;高度为h的m叉树&#xff0c;高…

可靠性:MSTP 和 VRRP 配置实验

一、拓扑&#xff1a; 说明&#xff1a; 1、交换机 SW1、2、3 分别起 vlan 10、20&#xff0c;都以 trunk 方式连接 2、 PC1、2 分别属于 vlan 10、20 3、SW1、2 起 vlan 100 做为管理段&#xff0c;网关地址分别以 100.1.1.1/24 和 200.1.1.2/24 和 AR1相连 …

监控易监测对象及指标之:全面监控InterSystems Cache数据库

随着企业数字化转型的深入&#xff0c;数据库作为核心的信息资产&#xff0c;其性能和稳定性对于保障业务连续性至关重要。InterSystems Cache作为一款高性能、可扩展的数据库管理系统&#xff0c;广泛应用于医疗、金融、制造等行业。为了确保Cache数据库的高效运行和稳定性能&…

Oracle 启动动态采样 自适应执行计划

为了解决因为统计信息缺失或者统计不够准确而引起的问题&#xff0c;从9iR2的版本开始Oracle推出了动态采样&#xff08;Dynamic Sampling&#xff09;功能&#xff0c;使SQL文在硬解析过程中动态地收集统计信息。 该功能在以后的版本上得到更进一步的增强&#xff0c;从11.2.0…

创建一个Java项目并在项目中新建文件,最后实现程序简单的输出

目录 前言 一、建立项目及新建Java类 二、输入简单代码实现输出 前言 1.本文所讲的是java程序设计语言&#xff0c;其内容是如何在id中新建一个项目&#xff0c;并新建一个Java文件&#xff0c;在其内输入相关代码并对其输出&#xff1b; 2.Java文件的编写以收入到我的专栏…

Docker torchserve 部署模型流程

1.拉取官方镜像 地址: https://hub.docker.com/r/pytorch/torchserve/tags docker pull pytorch/torchserve:0.7.1-gpu2. docker启动指令 CPU docker run --rm -it -d -p 8380:8080 -p 8381:8081 --name torch-server -v /path/model-server/extra-files:/home/model-serve…

计算机毕业设计选题推荐-4S店试驾平台-小程序/App

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

js 如何代码识别Selenium+Webdriver

Python 的 Selenium 可以模拟用户操作打开浏览器&#xff0c;前端如何去识别是人机还是真人&#xff1a; window.navigator.webdriver Selenium 人机下是这样的&#xff1a; 正常使用&#xff1a;

Makefile语法详解

目录 1 Makefile基本常识1.1 基本格式1.2 makefile规则1.3 伪目标1.4 变量的使用1.5 赋值方式1.6 常用函数 2 Makefile整体编译2.1 编译选项2.2三个.c整体编译2.3 静态库编译2.4 动态库编译 1 Makefile基本常识 1.1 基本格式 如下所示为Makefile的基本格式&#xff0c;特别需…