• 使用docker部署springboot项目并连接上mysql数据库


    使用docker部署springboot项目并连接上mysql数据库

    预览:http://8.142.6.23/#/screen

    项目开源地址:
    前端vue:https://gitee.com/gaohan888/echarts-learning/tree/master/vision
    后端node.js: https://gitee.com/gaohan888/node-js-learning/tree/master/echarts_server

    需要的知识

    • Linux操作系统
    • docker(了解git的工作方式即可)

    工具

    • xshell(用来连接linux服务器)
    • xftp用来给linux服务器上传文件
    • sqlyog(或者navicat)在服务器上解析.sql脚本
    • maven(idea自带) 用来打包

    接下来我们开始正式操作

    服务器的选择

    我选择的是阿里云的学生机,比较便宜,半年57。想要购买学生机的话直接百度搜索阿里云学生机,支付宝验证即可。我的配置如下

    Docker

    简单介绍一下,docker我理解的就是更方便的部署工具,如果有玩过服务器的同学都知道,在linux服务器上配置mysql是一件挺麻烦的事,而用了docker,只需要几个命令,就可以配置好mysql。

    docker 的三个概念:

    1. 仓库:仓库就类比于github仓库,上面存储着各种各样版本的软件
    2. 镜像,我们从docker上拉取一个软件初始就是个镜像
    3. 容器,容器就是镜像运行时,可以用的软件

    类比一下好理解,镜像就是java中的类,而容器则是由类生成的对象,类无法直接使用,而对象可以。

    接下来开始实操

    我们按照官网来

    在安装docker前,先安装docker的包

    sudo yum install -y yum-utils 
    
    • 1

    device-mapper-persistent-data
    lvm2

    配置docker的仓库,从docker官方仓库下载会太慢,我们就将仓库配置到阿里云(类似于maven的仓库配置)

    sudo yum-config-manager 
    --add-repo 
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    • 1
    • 2
    • 3

    安装docker

    sudo yum install docker-ce docker-ce-cli containerd.io
    
    • 1

    这里有个y要选择

    要继续配置一下阿里云镜像加速,按如下步骤完成即可.

    步骤2,是写配置文件

    1. mkdir -p /etc/docker
    2. vim /etc/docker/daemon.json
    3. systemctl daemon-reload
    4. systemctl restart docker
    
    • 1
    • 2
    • 3
    • 4

    步骤2的配置文件格式,(估计会有人在这有问题,在这有问题的联系我),

    {
      "registry-mirrors": ["https://{自已的编码}.mirror.aliyuncs.com"]
    }
    
    • 1
    • 2
    • 3

    自己的编码如何查看,网址: https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

    开启docker

    sudo systemctl start docker
    
    • 1

    跑一个docker版的helloworld,类似于java的hello,证明安装成功

    sudo docker run hello-world
    
    • 1

    出现下图内容,表示docker运行成功

    服务器的配置

    服务器配置总结为三个,防火墙,端口,和安全组

    1.查看防火墙状态,如未开启要开启防火墙,我的是开启的

    firewall-cmd --state
    
    • 1

    如果没开启,开启防火墙的命令

    systemctl start firewalld.service
    
    • 1

    添加对外开放的端口,我是开了三个端口,一个80(Http端口),一个8080(tomcat),一个2206(mysql)

    1. firewall-cmd --zone=public --add-port=80/tcp --permanent
    2. firewall-cmd --zone=public --add-port=8080/tcp --permanent
    3. firewall-cmd --zone=public --add-port=3306/tcp --permanent
    
    • 1
    • 2
    • 3

    开完端口,要重新加载防火墙

    firewall-cmd --reload
    
    • 1

    查看开放的端口

    firewall-cmd --list-ports
    
    • 1

    配置安全组:百度如何配置进入配安全组的地方,按照下图配置的条件配置即可

    安装mysql

    从docker hub上查找mysql镜像

    docker search mysql
    
    • 1

    从docker hub上拉取mysql,我拉取的mysql版本是mysql5.7

    docker pull mysql:5.7
    
    • 1

    运行mysql,开放的端口是3306,密码是123456, -d是后台运行

    docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
    
    • 1

    docker ps 查看容器创建成功

    有个命令,可以进入容器内部,ctrl+p+q可以以后台运行的方式退出这个软件

    docker exec -it 容器的id /bin/bash
    
    • 1

    此时出现上图内容,表示mysql已经没有问题

    连接服务器上的mysql

    执行我提供的sql脚本就好了

    执行成功

    将springboot项目打成jar包

    将applicayion.yml中的url中的localhost改成你服务器的公网ip,还有将密码改成你服务器上mysql的密码

    打包的命令有两个,mvn clean ,mvn package

    在target文件夹出现jar表示成功

    编写Dockfile文件

    将springboot jar包项目打包成Docker镜像

    在 /home 目录下创建docker文件夹

    mkdir /home/docker 
    
    • 1

    使用xftp上传jar包

    编写Dockerfile文件

    vim Dockerfile
    
    • 1

    完整命令, vim的使用方法:点击i开始编写,编写完后点击esc,点击冒号,输入wq保存

    FROM java:8
    ADD blog-0.0.1-SNAPSHOT.jar /blog.jar
    EXPOSE 8080
    ENTRYPOINT ["java","-jar","/blog.jar"]
    
    • 1
    • 2
    • 3
    • 4

    解释

    #注意,docker命令全部大写,这是规定。
    #   From 关键字表示,jar包依赖的环境。java:8  相当于jdk1.8
    FROM java:8
     
    #ADD命令 
    #   blog-0.0.1-SNAPSHOT.jar:这是你上传jar包的名称。
    #   /blog.jar:这是自定义的名称。但是注意要有之前的/
    ADD blog-0.0.1-SNAPSHOT.jar /blog.jar
     
    #MAINTAINER  作者名称。可以删除不写。
    MAINTAINER zhangxiaosan
     
    #EXPOSE 项目暴露的端口号
    EXPOSE 8080
     
    #/blog.jar此处的名称要和ADD命令后面的一样。
    ENTRYPOINT ["java","-jar","/blog.jar"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在docker文件夹下执行如下命令

    docker build -t blog:1.0 .
    
    • 1

    解释

    说明:
      blog   代表要打包成的镜像名称。按照自己实际情况写。
      :1.0   代表版本号,可以不写则默认为latest
      .    代表为当前目录。这就是为什么一直在步骤一文件夹中进行操作,并且Dockerfile在此文件夹中的原因。
     
    若之前Dockerfile不在步骤一的文件夹中 则需要指定到对应的地址。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    接下来用docker images 就可以查看到这个镜像已经被创建好了,接下来运行这个镜像就可以了

    docker run --name blog -d -p 80:8080 blog:1.0
    
    • 1

    此时就可以用你的公网ip访问了,我绑定了域名,可以用域名访问。

    还有个命令要提下,可以查看容器运行时的日志

    docker logs 容器id
    
    • 1

    访问

  • 相关阅读:
    C++入门(1):命名空间,IO流 输入输出,缺省参数
    springBoot集成websocket实时消息推送
    DO280管理应用部署--pod调度控制
    【目标检测】46、YOLOv4 | AlexeyAB大神接棒 引入其他模块来实现更快更好的 YOLO 网络
    druid 加密数据源:如何拦截 Druid 数据源自动注入完成帐密的解密?
    Dell R720\R720xd\R730\R730xd等iDRAC风扇调速
    《TCP IP网络编程》尹圣雨----2.第一章习题
    【毕业设计】基于单片机的室内环境温湿度检测系统 - 物联网 嵌入式 stm32
    linux crontab 定时任务简单了解
    如何使用ArcGIS Pro制作个性三维地形图
  • 原文地址:https://blog.csdn.net/m0_67392661/article/details/126553686