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

斐讯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 <[email protected]>
    
    # Default to UTF-8 file.encoding
    ENV LANG C.UTF-8
    
    ENV JAVA_HOME /usr/local/jdk8
    
    ENV PATH $JAVA_HOME/bin:$PATH
    
    ENV JDK_FILE jdk-8u212-linux-arm64-vfp-hflt.tar.gz
    
    COPY $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 data
     cd /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 <[email protected]>
    # 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

你可能感兴趣的:(Java,单片机)