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

本文章全部阅读大约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

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

3 再次查看是否成功 

docker images;

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

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

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

8 查询卷挂载目录列表

docker volume ls

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

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

docker volume inspect mysql_data

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

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

11上传文件(略)

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

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

12 将sql文件暂存docker

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

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

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

13 将数据导入数据库

进入docker容器

docker exec -it mysql01 /bin/bash

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

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

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

15 登陆数据库系统

mysql -u root -p

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

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

16 创建数据库

create database 数据库名;

17 查看是否创建成功

show databases;

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

18 选定数据库

use yyy

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

19 运行刚刚暂存的sql文件

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

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

20 查看数据库中的表格


show tables

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

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

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

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

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

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

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

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

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

24 刷新权限

flush privileges;

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

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

 exit

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

25 (可不用)

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

1 选用mysql数据库

user mysql;

2 查询所有用户名和host 

select user,host from user;

3 .修改root用户的host字段

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

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

4 立即刷新权限

flush privileges

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

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

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

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

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

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

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

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

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

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

sudo ufw allow 端口号/tcp

2.3 在宝塔面板中放行

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

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'

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

 2 进入修改即可

vim 路径

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

本机

mysql -u root -p

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

 远程

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

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

2 查看是否下载成功

docker images

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

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

3.1新建映射文件夹

建立以下目录

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

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

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

6 查看日志

docker logs redis的id

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


 

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

 

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

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

如图第二个

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

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 自己随便起的名字:自己随便起的便签 .

(注意最后的 .)

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

5)查看是否成功

docker images 

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

6) 启动容器

7)查看是否成功

8)查看运行日志

docker logs 容器id

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

 

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。

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

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

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

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

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

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

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

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

8 其他的疑惑解答

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

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

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

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

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

你可能感兴趣的:(服务器,java,Vue,spring,boot,docker,java)