在Docker 上完成对Springboot+Mysql+Redis的前后端分离项目的部署(全流程,全截图)

news2024/10/2 14:26:49

本文章全部阅读大约2小时,包含一个完整的springboot + vue +mysql+redis前后端分离项目的部署在docker上的全流程,比较复杂,请做好心理准备,遇到问题可留言或则私信

目录

1 安装Docker,以及简单使用参照

2 Docker部署mysql

如何配置docker中的mysql为,外界可远程访问那?

如何修改mysql的配置文件? 

如何在本机和远程登陆mysql?

本机

 远程

3 部署Redis

4 重新打包springboot项目

5 在宿主机上部署前端项目

6 Docker 的命令

关于重启

常用的

7 快速入门

8 其他的疑惑解答

文件挂载与文件夹的挂载?

为什么挂载的文件变成文件夹了?


1 安装Docker,以及简单使用参照

(14条消息) ubuntu安装、使用docker超级详细的入门教程_ubuntu 安装docker_v奶油爆米花的博客-CSDN博客

2 Docker部署mysql

看不懂的先看本文件的1和8

1 查看下已有的镜像

docker images

2 下载Mysql的镜像(这里已5.7版本为例)

docker pull mysql:5.7

3 再次查看是否成功 

docker images;

 

4 运行镜像

docker run -d -p 3307:3306 -v mysql_conf:/etc/mysql/conf.d -v mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=自己设置的密码 --name mysql01 mysql:5.7

        注意这里第一个端口为宿主主机的端口,第二个为docker的端口,两者互相独立而不干扰,在外界访问时服务器时,先通过宿主机的端口访问,然后docker会监听对应的端口从而将宿主机的端口映射为容器的端口

5 查看运行的容器

docker ps;

7 查看mysql的IP地址,需要先记下来,待会要用到的

docker inspect 容器的id

8 查询卷挂载目录列表

docker volume ls

9 根据指定列查出此列的文件地址

docker volume inspect mysql_data

10 将Mountpoint复制下来,去此目录下上传sql文件

11上传文件(略)

我这边已经上传好了(yyy.sql)

12 将sql文件暂存docker

sudo docker cp sql文件路径 mysql容器id:/

注意 linux命令后面中后面要加上:/

13 将数据导入数据库

进入docker容器

docker exec -it mysql01 /bin/bash

14 创建数据库....报错了! 

额额额额额额,哈哈,其实 不是别忘了我们还没有登陆数据库那!!!

15 登陆数据库系统

mysql -u root -p

密码就是刚昂运行时的密码

16 创建数据库

create database 数据库名;

17 查看是否创建成功

show databases;

18 选定数据库

use yyy

19 运行刚刚暂存的sql文件

source yyy.sql(这个名字就是上传sql文件的名字)

20 查看数据库中的表格


show tables

21 修改mysql的密码(可不用)

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';

修改用户权限为可远程访问

22 新建用户用户并设置可远程访问(可不用)

CREATE USER 'username'@'%' IDENTIFIED BY 'password';

23 授予用户所有表的权限(可不用)

grant all on *.* to 'username'@'%';

24 刷新权限

flush privileges;

25 退出数据库系统,退出bash使用

 exit

25 (可不用)

如何直观的修改远程访问权限?

1 选用mysql数据库

user mysql;

2 查询所有用户名和host 

select user,host from user;

3 .修改root用户的host字段

update user set host="%" where user="root"

4 立即刷新权限

flush privileges

OK!额,如果想配置可远程访问mysql看下面的

如何配置docker中的mysql为,外界可远程访问那?

1 进入数据库修改用户权限为可远程访问

方法看上面的···如何直观的修改远程访问权限?··· 

2 放行层层的防火墙下的端口

2.1 打开服务器安全组的特定端口

 2.2 在操作系统(utuntu)内部放行

#允许所有的外部IP访问本机的22/tcp端口(ssh)

sudo ufw allow 端口号/tcp

2.3 在宝塔面板中放行

3 直接远程访问命令即可访问

注意这里的端口号是宿主机器的不是docker的

mysql -h 服务器的IP地址 -P 端口 -u 用户名 -p

eg:

mysql -h 192.168.5.116 -P 3306 -u root -p

如何修改mysql的配置文件? 

1 查看当前mysql使用的配置文件

mysql --help | grep 'my.cnf'

 2 进入修改即可

vim 路径

如何在本机和远程登陆mysql?

本机

mysql -u root -p

 远程

mysql -h 服务器的IP地址 -P 端口 -u 用户名 -p

eg:

mysql -h 192.168.5.116 -P 3306 -u root -p

3 部署Redis

1 拉取redis的镜像

docker pull redis

2 查看是否下载成功

docker images

3 运行redis(最重要的步骤)

3.1新建映射文件夹

建立以下目录

3.2 把redis的配置文件放到conf中

redis.conf下载链接

http://download.redis.io/redis-stable/redis.conf

3.3 修改下载的配置文件

bind 127.0.0.1 #注释掉这部分,这是限制redis只能本地访问

protected-mode no #默认yes,开启保护模式,限制为本地访问

daemonize no#默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败

databases 16 #数据库个数(可选),我修改了这个只是查看是否生效。。

dir ./ #输入本地redis数据库存放文件夹(可选)

appendonly yes #redis持久化(可选)

requirepass foobared #设置密码 把foobared改为自己设置密码

3.4 运行命令

docker run --name myredis01 -p 6380:6379 -v /mydockerconf/redis/data:/redis/data -v /mydockerconf/redis/conf:/redis/conf/redis.conf -d redis redis-server /redis/conf/redis.conf

 

4 查看是否成功

docker ps

5 查看Redis的ip,并记住

docker inspect redis的id

6 查看日志

docker logs redis的id


 

4 重新打包springboot项目

1)重新在springboot项目中编写配置文件/新建一个配置文件 

刚刚的mysql 的ip地址,以及端口号(在docker容器的端口号)

172.17.0.2:3306

刚刚的redis 的ip地址,以及端口号

172.17.0.3:6379

实例如下

spring:
  redis:
    host: 172.17.0.3
    port: 6379
    password:
    database: 0
    jedis:
      pool:
        max-active: 10
        max-wait: 5000
        max-idle: 500
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://172.17.0.2:3306/yyy?useUnicode=true&characterEncoding=UTF-8&useSSL=false
    username: yyy
    password: xx
    type: com.alibaba.druid.pool.DruidDataSource

 

2)打包成jar包上传给服务器的指定目录

如图第二个

3)编写Dockerfile

# Docker image for springboot file run
# VERSION 0.0.1
# Author: 
# 基础镜像使用java
FROM openjdk:8
# 作者
MAINTAINER mydockerscm
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp 
# 将MyBlogscm-0.0.1-SNAPSHOT.jar包添加到容器中并更名为app.jar
ADD MyBlogscm-0.0.1-SNAPSHOT.jar app.jar
# 运行jar包
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

4)构建镜像

回到我们新建好的目录

docker build  -t 自己随便起的名字:自己随便起的便签 .

(注意最后的 .)

5)查看是否成功

docker images 

6) 启动容器

7)查看是否成功

8)查看运行日志

docker logs 容器id

 

5 在宿主机上部署前端项目

可参考这篇文章的前端部分的部署

(11条消息) 宝塔部署前后端分离项目(Vue+SpringBoot)_宝塔面板部署前后端分离项目_桂亭亭的博客-CSDN博客

6 Docker 的命令

关于重启

守护进程重启   sudo systemctl daemon-reload

重启docker服务   systemctl restart  docker

重启docker服务  sudo service docker restart

关闭docker service docker stop

关闭docker systemctl stop docker

常用的

docker ps 查看当前运行中的容器
docker images 查看镜像列表
docker rm container-id 删除指定 id 的容器
docker stop/start container-id 停止/启动指定 id 的容器
docker rmi image-id 删除指定 id 的镜像
docker volume ls 查看 volume 列表
docker network ls 查看网络列表

7 快速入门

Docker 是一个应用打包、分发、部署的工具
你也可以把它理解为一个轻量的虚拟机,它只虚拟你软件需要的运行环境,多余的一点都不要,
而普通虚拟机则是一个完整而庞大的系统,包含各种不管你要不要的软件。

本文档课件配套 视频教程

特性普通虚拟机Docker
跨平台通常只能在桌面级系统运行,例如 Windows/Mac,无法在不带图形界面的服务器上运行支持的系统非常多,各类 windows 和 Linux 都支持
性能性能损耗大,内存占用高,因为是把整个完整系统都虚拟出来了性能好,只虚拟软件所需运行环境,最大化减少没用的配置
自动化需要手动安装所有东西一个命令就可以自动部署好所需环境
稳定性稳定性不高,不同系统差异大稳定性好,不同系统都一样部署方式

目前我们只使用到了,打包和部署

打包:就是把你软件运行所需的依赖、第三方库、软件打包到一起,变成一个安装包
分发:你可以把你打包好的“安装包”上传到一个镜像仓库,其他人可以非常方便的获取和安装
部署:拿着“安装包”就可以一个命令运行起来你的应用,自动模拟出一摸一样的运行环境,不管是在 Windows/Mac/Linux。

常规应用开发部署方式:自己在 Windows 上开发、测试 --> 到 Linux 服务器配置运行环境部署。

问题:我机器上跑都没问题,怎么到服务器就各种问题了

用 Docker 开发部署流程:自己在 Windows 上开发、测试 --> 打包为 Docker 镜像(可以理解为软件安装包) --> 各种服务器上只需要一个命令部署好

优点:确保了不同机器上跑都是一致的运行环境,不会出现我机器上跑正常,你机器跑就有问题的情况。

例如 易文档,SVNBucket 的私有化部署就是用 Docker,轻松应对客户的各种服务器。

  • 应用分发、部署,方便传播给他人安装。特别是开源软件和提供私有部署的应用
  • 快速安装测试/学习软件,用完就丢(类似小程序),不把时间浪费在安装软件上。例如 Redis
  • 多个版本软件共存,不污染系统,例如 Python2、Python3,Redis4.0,Redis5.0
  • Windows 上体验/学习各种 Linux 系统

镜像:可以理解为软件安装包,可以方便的进行传播和安装。
容器:软件安装后的状态,每个软件运行环境都是独立的、隔离的,称之为容器。

8 其他的疑惑解答

文件挂载与文件夹的挂载?

文件夹挂载
若文件夹不存在,则docker会先创建出文件夹(若为多层文件夹,则递归创建)

文件挂载
docker 禁止用主机上不存在的文件挂载到容器中,所以我们在想挂载文件时直接挂载整个文件夹即可

为什么挂载的文件变成文件夹了?

因为docker默认会直接挂载文件夹,如果不存在也会创建文件夹而不是文件

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

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

相关文章

HOT100--(3)无重复字符的最长子串

点击查看题目详情 大思路&#xff1a; 创建哈希表&#xff0c;元素类型为<char, int>&#xff0c;分别是字符与其对应下标 用哈希表来存储未重复的子串&#xff0c;若有重复则记录下当前子串最大值maxhashsize 并且开始以相同方法记录下一子串 遍历完成以后&#xff0c…

Android OpenCV(七十三):吊打高斯模糊的StackBlur Android 实践

前言 OpenCV 4.7.0 2022年12月28日Release,ChangeLog中提到 Stackblur algorithm implementation. Stackblur是一种高斯模糊的快速近似,由Mario Klingemann发明。其计算耗时不会随着kernel size的增大而增加,专为大kernel size的模糊滤波场景量身定制。 使用建议:当kerne…

[RDMA-高级计算机网络report] Congestion Control for Large-Scale RDMA Departments

本文主要解决的问题是在RoCEv2体系中&#xff0c;基于优先级的拥塞控制PFC是一种粗粒度的机制。 它在端口&#xff08;或端口加优先级&#xff09;级别上运行&#xff0c;并且不区分流。PAUSE机制是基于每个端口&#xff08;和优先级&#xff09;的&#xff0c;而不是基于每个流…

mysql数据库之索引使用原则

一、最左前缀法则。 1、如果索引使用了多列&#xff08;联合索引&#xff09;&#xff0c;要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始&#xff0c;并且不跳过索引中的列。 如果跳跃到某一列&#xff0c;索引将部分失效&#xff08;后面的字段索引失效&am…

springboot启动时遇见的版本不同、无法启动、自动停止问题解决方案

Springboot项目启动失败初来乍到&#xff0c;听说springboot很好用&#xff0c;很简便&#xff0c;于是爱搞事情的我就打算试试&#xff0c;因为最近在找工作&#xff0c;很多软件开发的也要求springboot的使用&#xff0c;于是我就开启了springboot的学习之旅&#xff0c;打算…

Vue3 企业级项目实战:认识 Spring Boot

Vue3 企业级项目实战 - 程序员十三 - 掘金小册Vue3 Element Plus Spring Boot 企业级项目开发&#xff0c;升职加薪&#xff0c;快人一步。。「Vue3 企业级项目实战」由程序员十三撰写&#xff0c;2744人购买https://s.juejin.cn/ds/S2RkR9F/ 越来越流行的 Spring Boot Spr…

人工智能及其应用(蔡自兴)期末复习

人工智能及其应用&#xff08;蔡自兴&#xff09;期末复习 相关资料&#xff1a; 人工智能期末复习 人工智能复习题 人工智能模拟卷 人工智能期末练习题 1 ⭐️绪论 人工智能&#xff1a;人工智能就是用人工的方法在机器&#xff08;计算机&#xff09;上实现的智能&#xff0…

攻不下dfs不参加比赛(八)

标题 为什么练dfs题目重点为什么练dfs 相信学过数据结构的朋友都知道dfs(深度优先搜索)是里面相当重要的一种搜索算法,可能直接说大家感受不到有条件的大家可以去看看一些算法比赛。这些比赛中每一届或多或少都会牵扯到dfs,可能提到dfs大家都知道但是我们为了避免眼高手低有…

2.2 数据库的常用操作

文章目录1.分类2.创建数据库3.删除数据库4.查看所有数据库5.备份数据库6.数据库维护7.数据库使用与结构7.1 数据库的使用7.2 数据库结构虽然我们已经安装了可视化视图软件&#xff0c;但前期为了熟悉管理命令行的操作&#xff0c;我们暂时先在管理命令窗口进行操作&#xff1a;…

关于.bashrc和setup.bash的理解

在创建了ROS的workspace后&#xff0c;需要将workspace中的setup.bash文件写入~/.bashrc 文件中&#xff0c;让其启动&#xff1a; source /opt/ros/melodic/setup.bash这句话的目的就是在开新的terminal的时候&#xff0c;运行这个setup.bash&#xff0c;而这个setup.bash的作…

【2373. 矩阵中的局部最大值】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一个大小为 n x n 的整数矩阵 grid 。 生成一个大小为 (n - 2) x (n - 2) 的整数矩阵 maxLocal &#xff0c;并满足&#xff1a; maxLocal[i][j] 等于 grid 中以 i 1 行和 j 1 列为中心的 3 …

搭建私人《我的世界》服务器,使用Cpolar内网穿透更简单

文章目录1.前言2.本地服务器搭建2.1 设置环境变量2.2 进行《我的世界》服务器端设置2.3 测试和使用3.本地MC服务器的内网穿透3.1.Cpolar云端设置3.2.Cpolar本地设置3.3.测试和使用4.结语1.前言 要说去年游戏圈的重磅大瓜&#xff0c;想必网易和暴雪的分家必能上榜。虽然两家大…

元宇宙对体育运动意味着什么?

欢迎来到Hubbleverse &#x1f30d; 关注我们 关注宇宙新鲜事 &#x1f4cc; 预计阅读时长&#xff1a;8分钟 本文仅代表作者个人观点&#xff0c;不代表平台意见&#xff0c;不构成投资建议。 Facebook将其品牌重塑为“Meta”&#xff0c;“元”的概念推向了主流&#xff…

如何退出PPT文件的“只读模式”?

PPT文件设置了“只读模式”&#xff0c;打开文件就会弹出对话框&#xff0c;提示【输入密码以修改或以只读方式打开】。 如果有密码&#xff0c;输入密码后可以正常修改编辑PPT&#xff0c;但下次再打开时仍旧会出现提示框&#xff1b;如果没有密码&#xff0c;选择【只读】可…

第十五届(2022年)山东省职业院校技能大赛高职组信息安全管理与评估竞赛试题

第十五届&#xff08;2022年&#xff09;山东省职业院校技能大赛高职组信息安全管理与评估 竞赛试题 第一阶段竞赛项目试题 根据信息安全管理与评估技术文件要求&#xff0c;第一阶段为网络平台搭建与网络安全设备配置与防护。本文件为信息安全管理与评估项目竞赛-第一阶段试题…

【正点原子FPGA连载】第二十一章AXI DMA环路测试 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第二十一章AXI D…

全网资料最全Java数据结构与算法-----算法分析

算法分析 研究算法的最终目的就是如何花更少的时间&#xff0c;如何占用更少的内存去完成相同的需求&#xff0c;并且也通过案例演示了不同算法之间时间耗费和空间耗费上的差异&#xff0c;但我们并不能将时间占用和空间占用量化&#xff0c;因此&#xff0c;接下来我们要学习…

Keil新建一个国民32位MCU工程

1.打开Keil软件&#xff0c;点击Project→New uVision→Project 2.将工程保存到自己的工程文件夹&#xff0c;并给项目命名&#xff0c;点击保存 3.选择自己需要开发的芯片&#xff0c;点击OK 4.点击OK 5.出现上图所示&#xff0c;工程已经建好了&#xff0c;点击配置工程。 6.…

用Python实现九九乘法表的几种方式,最简单只需一行代码

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 我们在学习Python的过程中需要不断的积累和练习&#xff0c;这样才能够走的更远&#xff0c; 今天一起来学习怎么用Python写九九乘法表~ 更多教程源码资料电子书: 点击此处跳转文末名片获取 第一种方法、for-for 代码&…

大数据处理学习笔记1.6 Scala数据结构

文章目录零、本讲学习目标一、数组 (Array)&#xff08;一&#xff09;定长数组1、数组定义&#xff08;1&#xff09;定义数组时初始化数据&#xff08;2&#xff09;定义时指定数组长度&#xff0c;后赋值2、数组遍历&#xff08;1&#xff09;传统for循环方式&#xff08;2&…