系统相关
首页 > 系统相关> > Docker 构建 nginxWebUI 容器实战

Docker 构建 nginxWebUI 容器实战

作者:互联网

前言

nginxWebUI 项目并非本人所写,其国内国内项目地址: Gitee nginxWebUI ,官网:nginxWebUI.cn

由于源项目并未提供 ARM 平台的适配,但是该项目提供了 Dockerfile 文件,我们可以根据 Dockerfile 的说明和项目的源码,进行 ARM 平台下的重编译和 Docker 容器构建。

非 ARM 平台的,也可以按照本文进行本平台的实战测试。

Java

对于源项目的源码来说,已经打包好了 x86_64 平台的 jar.tar.gz 包,该包内包含的 java 可执行程序是无法被用于 ARM 平台下运行。所以,虽然 arm64 系统的 Docker 可以下载源项目的镜像并保持容器的运行,但是实际上, ADD 到镜像内部的 jre 和 jar 包都是不能顺利执行的。

我们需要重新将 AArch64 的 jre 重新打包并用于容器构建。

下载

可以通过访问甲骨文(Oracle)的 jdk 下载官网,下载 AArch64 的 jdk 进行过滤打包: Oracle Java 8

实际上,Oracle 提供了 Java 8 和 Java 11 两个稳定版本的 AArch64 的 rpm 和 tar.gz (Compressed Archive)。但是为了使容器尽量的精简,推荐使用 Java 8 来进行过滤打包。

jre https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

解压 https://blog.csdn.net/laobai1015/article/details/89405905

简化过滤压缩

  1. 对下载得到的 jdk-8u291-linux-aarch64.tar.gz 进行解压。

    tar -zxvf jdk-8u291-linux-aarch64.tar.gz
    
  2. 提取出要用的两部分,复制 ./jdk1.8.0_291/jre/ 文件夹到新建目录 ./jre1.8.0_291/ 下,并删除无用的、全是 .md 文件 legal 目录。

    mkdir jre1.8.0_291
    cp -r ./jdk1.8.0_291/jre/ ./jre1.8.0_291/
    rm -r legal
    
  3. 重新压缩打包为 jre1.8.0_291.tar.gz

    tar -zcvf jre1.8.0_291.tar.gz jre1.8.0_291
    

    这时打包好的文件 40.13 MB ,解压后文件大小 106 MB 。注意这个数字,方便后面理解。

重新编译打包

由于源项目是基于 SpringBoot 的,对于 ARM 环境下的 jar 要重新进行编译。这是使用 Docker 搭建 ARM 下 Maven 环境 来进行编译打包。

Dockerfile

原 Dockerfile 分析

FROM ubuntu:20.04
LABEL maintainer="cym1102@qq.com"
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Shanghai
RUN apt-get clean && apt-get update &&\
	apt-get install -y nginx &&\
	#apt-get install -y openjdk-11-jre &&\
	apt-get install -y net-tools &&\
	apt-get install -y curl &&\
	apt-get install -y wget &&\
	ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone &&\
	apt-get install tzdata
ENV LANG C.UTF-8
ADD jre.tar.gz /home/
RUN chmod 777 /home/jre/bin/java
ADD nginxWebUI.sh /home/
RUN chmod 777 /home/nginxWebUI.sh
COPY target/nginxWebUI-*.jar /home/nginxWebUI.jar
ENTRYPOINT ["sh","-c", "/home/nginxWebUI.sh ${BOOT_OPTIONS} && tail -f /dev/null"]

修改 Dockerfile

回顾下在本小节之前,本文中做了哪些工作:简化压缩了 的 jre 包;重编译了 AArch64 的 jar 包。

接下来需要就修改了的文件对 Dockerfile 进行修改。

FROM ubuntu:20.04
LABEL author="cym1102@qq.com" date="2021-7-11" maintainer="xxxxxxxs@qq.com"
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Shanghai
RUN apt-get clean && apt-get update &&\
	apt-get install -y nginx &&\
	apt-get install -y net-tools &&\
	apt-get install -y curl &&\
	apt-get install -y wget &&\
	ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone &&\
	apt-get install tzdata
ENV LANG C.UTF-8
ADD jre1.8.0_291.tar.gz /home/
RUN chmod 777 /home/jre1.8.0_291/bin/java
ADD nginxWebUI.sh /home/
RUN chmod 777 /home/nginxWebUI.sh
COPY target/nginxWebUI-*.jar /home/nginxWebUI.jar
ENTRYPOINT ["sh","-c", "/home/nginxWebUI.sh ${BOOT_OPTIONS} && tail -f /dev/null"]

脚本

若查看 nginxWebUI.sh 脚本的内容,会发现脚本中调用了导入的 java 可执行程序,所以也必须对脚本的内容进行修改。

构建镜像

docker build -t [ACCOUNT]/nginxwebui:2.6.4 .

容器测试

启动容器

Docker 启动:

docker run -itd -v /home/nginxWebUI:/home/nginxWebUI -e BOOT_OPTIONS="--server.port=8080" --privileged=true --net=host --name nginxwebui-aarch64 yogile/nginxwebui-aarch64:latest /bin/bash

docker-compose 启动:

version: "3.2"
services:
  nginxWebUi-server:
    image: yogile/nginxwebui-aarch64:2.6.4
    volumes:
      - type: bind
        source: "/home/nginxWebUI"
        target: "/home/nginxWebUI"
    environment:
      BOOT_OPTIONS: "--server.port=8080"
    privileged: true
    network_mode: "host"

注意

由于目前市场上主流的大部分 ARM 平台处理器的性能并比不上 x86_64 的主流处理器性能,容器内 SpringBoot 项目的运行启动需要时间

在本人的树莓派 4B 上初始化运行时,从创建容器到正式提供服务至少需要大约一分钟的时间,还请耐心等待。

标签:容器,jre,get,apt,&&,home,Docker,nginxWebUI
来源: https://www.cnblogs.com/Yogile/p/15002756.html