斐讯N1-小钢炮Docker中运行SpringBoot应用

介绍

  • 硬件:斐讯N1

  • 系统:小钢炮(Linux)

  • 容器:Docker

  • 依赖环境:JDK、MySQL

  • 目标:运行springboot web应用

安装JDK

因为在Docker中没有找到合适的Jdk,因此需要先安装一个Jdk。考虑到N1是ARM架构,所以需要找一个匹配的JDK版本,我选择的是jdk-8u212-linux-arm64-vfp-hflt.tar.gz

下载地址:https://github.com/frekele/oracle-java/releases

  1. 将JDK包下载后并使用XFtp工具上传到小钢炮Linux系统中(一般我会放在用户目录)。

  2. 将JDK文件解压,执行命令:

    tar -zxvf jdk-8u212-linux-arm64-vfp-hflt.tar.gz
    
  3. 解压后是个名为jdk1.8.0_212的文件夹,将此文件夹移到在ARM电脑的/usr/lib/jvm目录下,执行命令:

    mv ./jdk1.8.0_212 /usr/lib/jvm/
    

    如果/usr/lib下没有jvm目录,则自己创建。

  4. 编辑/etc/profile环境配置文件,执行命令:

    vi /etc/profile
    

    在文件底部追加以下内容并保存:

    export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_212
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=${JAVA_HOME}/bin:$PATH
    
  5. 激活环境配置,执行命令:

    source /etc/profile
    
  6. 进入/usr/lib/jvm/jdk1.8.0_212/bin目录,为文件增加权限,执行命令:

    cd /usr/lib/jvm/jdk1.8.0_212/bin & chmod +x *
    
  7. 验证JDK是否已经可用,执行命令:

    java -version
    
  8. 此时已经可以运行Java应用,命令:

    java -jar xxx.jar
    

构建Docker镜像-JDK

上面安装JDK的方式与X86环境一致,原则上不利于重复使用。为了以后偷懒,这部分内容会将JDK构建成Docker镜像。

  1. 在小钢炮Linux系统上新建一个文件夹,里面新建名为Dockerfile的文件(没有文件后缀),内容如下:

    # Docker image of JDK8 in ARM64
    # VERSION 8#基础镜像使用的是OpenJDK官方镜像公用的
    FROM buildpack-deps:stretch-scm#作者
    MAINTAINER xxx <xxx@qq.com># Default to UTF-8 file.encoding
    ENV LANG C.UTF-8ENV JAVA_HOME /usr/local/jdk8ENV PATH $JAVA_HOME/bin:$PATHENV JDK_FILE jdk-8u212-linux-arm64-vfp-hflt.tar.gzCOPY $JDK_FILE /usr/local/RUN mkdir -p "$JAVA_HOME"; \tar --extract \--file /usr/local/$JDK_FILE \--directory "$JAVA_HOME" \--strip-components 1 \--no-same-owner; \rm /usr/local/$JDK_FILE
    
  2. 将前面下载的jdk-8u212-linux-arm64-vfp-hflt.tar.gz文件复制到Dockerfile文件所在目录;

  3. Dockerfile文件所在目录进行构建,执行命令:

    docker build -t xxx/arm64jdk:8 .(注意命令的末尾有个小数点,表示当前目录。xxx/arm64jdk:8为image的名称和版本号)
    
  4. 验证效果,执行命令:

    docker run --rm xxx/arm64jdk:8 java -version
    
  5. 根据自己的需要,将此镜像上传到仓库中;

可选安装Maven

  1. 安装包解压之后是个名为apache-maven-3.6.2的文件夹,将此文件夹放在ARM电脑的/usr/local目录下;

  2. 编辑/etc/profile文件,增加以下内容:

    export MAVEN_HOME=/usr/local/apache-maven-3.6.2
    export PATH=$MAVEN_HOME/bin:$PATH
    
  3. 激活配置,执行命令:

    source /etc/profile
    
  4. 进入/usr/local/apache-maven-3.6.2/bin目录,执行命令:

    chmod +x ./mvn
    
  5. 验证maven是否已经可用,执行命令:

    mvn -version
    

安装MySQL

  1. 安装镜像:

    docker pull ibex/debian-mysql-server-5.7
    
  2. 创建本地目录文件(根据具体情况来定,我挂载了移动硬盘):

     cd /media/other/mysql/ & mkdir datacd /media/other/mysql/ & vi my.cnf
    
  3. 运行容器:

    docker run --name mysql \-d \--restart unless-stopped \-p 3306:3306 \-v /media/其它/mysql/data:/var/lib/mysql \-v /media/其它/mysql/my.cnf:/etc/mysql/conf.d/my.cnf \-e MYSQL_ALLOW_EMPTY_PASSWORD=yes \ibex/debian-mysql-server-5.7:latest
    

    #–restart 重启策略,unless-stoppedalways 基本一样,只有一个场景 unless-stopped有点特殊,如果容器正常stopped,然后机器重启或docker服务重启,这种情况下容器将不会被restart

    #–name 容器名字
    #-p 端口映射, 左边为主机端口,右边为docker容器端口
    #-d 后台运行
    #-v 文件映射

  4. 从protainer-ui,进入MySQL容器的控制台窗口,执行命令:

    看个人习惯,当然也可以用docker exec 命令执行

    mysql -uroot
    

    进入MySQL控制台,再执行以下命令

    use mysql;
    update user set authentication_string = password('12345678') where user = 'root';
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '12345678' WITH GRANT OPTION;
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY '12345678' WITH GRANT OPTION;
    
  5. 验证MySQL是否配置成功,打开Navicat客户端连接MySQL;

打包SpringBoot 镜像

  1. 使用maven将SpringBoot应用打成jar包(主意区分运行环境,如dev、prod),执行命令:

    mvn clean;
    mvn package;
    
  2. 编写Dockerfile,内容如下:

    # Docker image for springboot file run
    # VERSION 0.0.1
    # Author: zos
    # 基础镜像使用java
    FROM xxx/arm64jdk:8
    # 作者
    MAINTAINER xxx <xxx@qq.com>
    # VOLUME 指定了临时文件目录为/tmp。
    # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
    VOLUME /tmp
    # 将jar包添加到容器中并更名为app.jar(myapp.jar为步骤一打的jar包)
    ADD myapp.jar app.jar
    # 运行jar包
    RUN bash -c 'touch /app.jar'
    ENTRYPOINT ["java","-jar","/app.jar"]
    
  3. 上传到小钢炮Linux系统任意目录,需要将Dckerfile和jar包放置在同一目录下;

  4. 将jar包构建成docker镜像,执行命令:

    docker build -t myapp:v1.0 . (注意命令的末尾有个小数点,表示当前目录。myapp:v1.0为image的名称和版本号)
    
  5. 运行Springboot容器,执行命令:

    docker run -p 10086:10086 -d --restart=always --name myapp -v /etc/timezone:/etc/timezone myapp:v1.0
    

    #–restart 重启策略,always
    #–name 容器名字
    #-p 端口映射, 左边为主机端口,右边为docker容器端口
    #-d 后台运行
    #-v /etc/timezone:/etc/timezone 同步系统时间

  6. 验证SpringBoot是否部署成功,通过访问小钢炮Linux系统的ip+步骤5中的端口即可访问。

补充,如果你的SpringBoot应用需要连接MqSQL,可以在SpringBoot应用配置文件中

参考文章:ARM架构下的Docker环境,OpenJDK官方没有8版本镜像,如何完美解决?https://blog.csdn.net/boling_cavalry/article/details/101855126#tt_daymode=1&tt_font=m?tt_from=weixin&utm_source=weixin&utm_medium=toutiao_ios&utm_campaign=client_share&wxshare_count=1

斐讯N1-小钢炮Docker中运行SpringBoot应用相关推荐

  1. n1运行linux,斐讯N1折腾记:运行 Linux 及优化

    此教程同样适用于斐讯 P1 咳咳咳,上篇教程教大家给斐讯 N1 降级并且刷了官改系统,可以当作一个电视盒子和下载机来使用. 有些小伙伴可能不想把它当作电视盒子,就想把它当作 NAS 或者是服务器,但是 ...

  2. armbian n1 桌面_斐讯N1折腾记:运行 Linux 及优化 | 米V米

    最后更新时间:2019年03月25日 此教程同样适用于斐讯 P1 咳咳咳,上篇教程教大家给斐讯 N1 降级并且刷了官改系统,可以当作一个电视盒子和下载机来使用. 有些小伙伴可能不想把它当作电视盒子,就 ...

  3. 在Docker中运行SpringBoot程序

    原文地址: itweknow.cn/detail?id=4- 微服务现在在互联网公司可谓非常流行了,之前找工作的的时候很多HR电话约面试的时候都会问对微服务是否有过接触.而微服务和Docker可以非常 ...

  4. Docker中运行Springboot jar时的变量传递

    Docker可以把我们的运行环境打包,然后我们只要run就可以了.大部分hello world都是这么写的.但都缺少了实际应用环节.以springboot为例,hello world的Dockerfi ...

  5. 【折腾】斐讯N1 安装 Docker + GUI

      Docker 安装 apt update# 自动安装 1 curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh - ...

  6. 斐讯n1 linux连接wifi,斐讯 N1 部署 Docker 和 OpenWRT,并利用 Hostapd 开启 Wi-Fi 热点

    刷入 Armbian 的 N1 可以通过安装 Docker 做很多事情,部署 OpenWRT 路由系统就是其中之一,同时利用 Hostapd 更可以开启 Wi-Fi 热点,方便作为一台便携路由使用. ...

  7. 斐讯N1 小钢炮系统配置 FRP 内网穿透

    尝试做一个私人图书馆,需要外网访问,因此选择系统自带frp. 找到了免费FRP服务,https://freefrp.net,良心网站给出了几个地址,我选择第一个. 永久免费服务器 frp.freefr ...

  8. n1运行linux,斐讯 N1 运行 ArchLinuxARM

    酷酷之前教大家斐讯 N1 如何运行 Linux,当时用的发行版是 Armbian,由于它有镜像文件,操作起来也比较简单. 不过 Armbian 只有 Debian 和 Ubuntu 两个版本可以选择, ...

  9. 斐讯n1安装centos7+docker openwrt

    斐讯n1安装centos7+docker openwrt 首先声明,我的n1是降级过的,系统默认usb启动优先级大于emmc,所以可以直接将镜像写入u盘,通过u盘启动系统,同时通过脚本将系统写入emm ...

最新文章

  1. .Net程序员学用Oracle系列(10):系统函数(中)
  2. Problem 64 如何设置Linux系统内存回收的阀值?
  3. 【转帖】漫话C++0x(四) —- function, bind和lambda
  4. net 快速打印日志
  5. 计算机辅助分析及应用论文,故障树计算机辅助分析及应用研究-机械制造及自动化专业论文.docx...
  6. linux下编译httpd,Linux下编译安装Apache httpd 2.4
  7. eclipse索引4超出范围_Python内置的4个重要基本数据结构:列表、元组、字典和集合
  8. PHP 会话 线程 进程,php进程后台调用(多线程/进程)
  9. 申通快递:1月快递服务业务收入25.65亿元 同比增长21.27%
  10. java join字符串_Java字符串join()
  11. mysql2005错误码_SQL Server2005 常见错误及解决方案
  12. 你的计算机无法连接到远程计算机,因为远程桌面网关服务器暂时不可用。
  13. 中国工业管道过滤器市场深度研究分析报告
  14. Gson踩坑笔记:为什么对象的构造方法没有被执行?
  15. 对XP系统中Autorun.inf Autorun.exe以及RECYCLER文件夹的认识
  16. 性能优化:Android App启动速度优化
  17. 笔记本电脑购买指南与建议-知识点介绍
  18. 《学会提问》02| 论题和论证
  19. antd-mobile InfiniteScroll 无限滚动
  20. mysql tcmalloc_tcmalloc优化mysql性能测试

热门文章

  1. 室内定位:智能手机定位 BLE-3
  2. git 合并 fast-forward
  3. 02——HTML基础标签学习
  4. 华为手机内存卡的照片音乐误删除还能恢复么
  5. spring cloud分布式微服务-大话Spring Cloud
  6. 自定义控件 - 流式布局(FlowLayout)
  7. 欧特克的一些网站收藏
  8. 中职学校计算机应用基础试卷,(完整版)中职计算机应用基础试卷.(答案)doc
  9. 正常健康人组织也有癌基因和抑癌基因突变
  10. Python-批量修改图片全部颜色,批量修改图片的指定颜色,马甲包一键换主题UI