From 63dc58d088eaa89457f127b61c129effd897837e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E5=A8=81?= Date: Fri, 16 Aug 2024 16:17:21 +0800 Subject: [PATCH] =?UTF-8?q?:construction=5Fworker:=E4=BC=98=E5=8C=96Docker?= =?UTF-8?q?file,=E6=94=AF=E6=8C=81=E7=9C=9F=E6=AD=A3=E7=9A=84=E8=B7=A8?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E6=9E=84=E5=BB=BA=E9=95=9C=E5=83=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/kkfileview-jdk/Dockerfile | 55 ++++++++---------- docker/kkfileview-jdk/Dockerfile_arm64 | 77 -------------------------- docker/kkfileview-jdk/README.cn.md | 50 +++++++++++++++++ docker/kkfileview-jdk/README.md | 53 ++++++++++++++++++ docker/kkfileview-jdk/docker build.txt | 5 -- 5 files changed, 127 insertions(+), 113 deletions(-) delete mode 100644 docker/kkfileview-jdk/Dockerfile_arm64 create mode 100644 docker/kkfileview-jdk/README.cn.md create mode 100644 docker/kkfileview-jdk/README.md delete mode 100644 docker/kkfileview-jdk/docker build.txt diff --git a/docker/kkfileview-jdk/Dockerfile b/docker/kkfileview-jdk/Dockerfile index f4e873ca..31022bc3 100644 --- a/docker/kkfileview-jdk/Dockerfile +++ b/docker/kkfileview-jdk/Dockerfile @@ -1,38 +1,31 @@ -FROM ubuntu:20.04 -MAINTAINER chenjh "842761733@qq.com" -# 内置一些常用的中文字体,避免普遍性乱码 -COPY fonts/* /usr/share/fonts/chinese/ -RUN apt-get clean && apt-get update &&\ - sed -i 's/http:\/\/archive.ubuntu.com/https:\/\/mirrors.aliyun.com/g' /etc/apt/sources.list &&\ - sed -i 's/# deb/deb/g' /etc/apt/sources.list &&\ - apt-get install -y --reinstall ca-certificates &&\ - apt-get clean && apt-get update &&\ - apt-get install -y locales language-pack-zh-hans &&\ - localedef -i zh_CN -c -f UTF-8 -A /usr/share/locale/locale.alias zh_CN.UTF-8 && locale-gen zh_CN.UTF-8 &&\ +FROM ubuntu:24.04 + +RUN sed -i 's@//.*archive.ubuntu.com@//mirrors.aliyun.com@g' /etc/apt/sources.list.d/ubuntu.sources &&\ + sed -i 's@//security.ubuntu.com@//mirrors.aliyun.com@g' /etc/apt/sources.list.d/ubuntu.sources &&\ + sed -i 's@//ports.ubuntu.com@//mirrors.aliyun.com@g' /etc/apt/sources.list.d/ubuntu.sources &&\ + apt-get update &&\ export DEBIAN_FRONTEND=noninteractive &&\ - apt-get install -y tzdata && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\ - apt-get install -y fontconfig ttf-mscorefonts-installer ttf-wqy-microhei ttf-wqy-zenhei xfonts-wqy &&\ - apt-get install -y wget &&\ - cd /tmp &&\ - wget https://kkview.cn/resource/server-jre-8u251-linux-x64.tar.gz &&\ - tar -zxf /tmp/server-jre-8u251-linux-x64.tar.gz && mv /tmp/jdk1.8.0_251 /usr/local/ &&\ + apt-get install -y --no-install-recommends openjdk-8-jre tzdata locales xfonts-utils fontconfig libreoffice-nogui &&\ + echo 'Asia/Shanghai' > /etc/timezone &&\ + ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\ + localedef -i zh_CN -c -f UTF-8 -A /usr/share/locale/locale.alias zh_CN.UTF-8 &&\ + locale-gen zh_CN.UTF-8 &&\ +# 安装微软字体 + # apt-get install -y --no-install-recommends ttf-mscorefonts-installer &&\ +# 安装文泉驿字体 + # apt-get install -y --no-install-recommends ttf-wqy-microhei ttf-wqy-zenhei xfonts-wqy &&\ +# 清理临时文件 + apt-get autoremove -y &&\ + apt-get clean &&\ + rm -rf /var/lib/apt/lists/* -# 安装 libreoffice - apt-get install -y libxrender1 libxinerama1 libxt6 libxext-dev libfreetype6-dev libcairo2 libcups2 libx11-xcb1 libnss3 &&\ - wget https://downloadarchive.documentfoundation.org/libreoffice/old/7.5.3.2/deb/x86_64/LibreOffice_7.5.3.2_Linux_x86-64_deb.tar.gz -cO libreoffice_deb.tar.gz &&\ - tar -zxf /tmp/libreoffice_deb.tar.gz && cd /tmp/LibreOffice_7.5.3.2_Linux_x86-64_deb/DEBS &&\ - dpkg -i *.deb &&\ +# 内置一些常用的中文字体,避免普遍性乱码. 建议安装思源字体 https://zh-cn.libreoffice.org/download/fonts/ +ADD fonts/* /usr/share/fonts/chinese/ -# 清理临时文件 - rm -rf /tmp/* && rm -rf /var/lib/apt/lists/* &&\ - cd /usr/share/fonts/chinese &&\ +RUN cd /usr/share/fonts/chinese &&\ + # 安装字体 mkfontscale &&\ mkfontdir &&\ fc-cache -fv -ENV JAVA_HOME /usr/local/jdk1.8.0_251 -ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar -ENV PATH $PATH:$JAVA_HOME/bin -ENV LANG zh_CN.UTF-8 -ENV LC_ALL zh_CN.UTF-8 -CMD ["/bin/bash"] +ENV LANG=zh_CN.UTF-8 LC_ALL=zh_CN.UTF-8 diff --git a/docker/kkfileview-jdk/Dockerfile_arm64 b/docker/kkfileview-jdk/Dockerfile_arm64 deleted file mode 100644 index bf8f97c9..00000000 --- a/docker/kkfileview-jdk/Dockerfile_arm64 +++ /dev/null @@ -1,77 +0,0 @@ -FROM arm64v8/ubuntu:20.04 -MAINTAINER chenjh "842761733@qq.com" -# 内置一些常用的中文字体,避免普遍性乱码 -COPY fonts/* /usr/share/fonts/chinese/ -RUN apt-get clean && apt-get update &&\ - sed -i 's/http:\/\/archive.ubuntu.com/https:\/\/mirrors.aliyun.com/g' /etc/apt/sources.list &&\ - sed -i 's/# deb/deb/g' /etc/apt/sources.list &&\ - apt-get install -y --reinstall ca-certificates &&\ - apt-get clean && apt-get update &&\ - apt-get install -y locales language-pack-zh-hans &&\ - localedef -i zh_CN -c -f UTF-8 -A /usr/share/locale/locale.alias zh_CN.UTF-8 && locale-gen zh_CN.UTF-8 &&\ - export DEBIAN_FRONTEND=noninteractive &&\ - apt-get install -y tzdata && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\ - apt-get install -y fontconfig ttf-mscorefonts-installer ttf-wqy-microhei ttf-wqy-zenhei xfonts-wqy &&\ - apt-get install -y wget -# 安装 arm64-jre8 -RUN apt-get install -y openjdk-8-jre -# 编译 libreoffice -RUN apt-get install -y git build-essential zip ccache junit4 libkrb5-dev nasm graphviz python3 python3-dev qtbase5-dev libkf5coreaddons-dev libkf5i18n-dev libkf5config-dev libkf5windowsystem-dev libkf5kio-dev autoconf libcups2-dev libfontconfig1-dev gperf default-jdk doxygen libxslt1-dev xsltproc libxml2-utils libxrandr-dev libx11-dev bison flex libgtk-3-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev ant ant-optional libnss3-dev libavahi-client-dev libxt-dev &&\ - # 安装 ccache(重复编译时加快速度) - apt-get install ccache &&\ - ccache -M 10G &&\ - # clone主代码 - mkdir /opt/libreoffice -WORKDIR /opt/libreoffice -RUN git clone --depth=1 --branch libreoffice-7-5 git://go.suokunlong.cn/lo/core ./libreoffice-7-5 - # 配置&抓取子模块 -WORKDIR /opt/libreoffice/libreoffice-7-5 -RUN git submodule init &&\ - git config --unset-all submodule.dictionaries.active &&\ - git config --unset-all submodule.dictionaries.url &&\ - git config --unset-all submodule.helpcontent2.active &&\ - git config --unset-all submodule.helpcontent2.url &&\ - git submodule update --progress --depth=1 &&\ - # 下载第三方依赖 - mkdir -p /opt/libreoffice/ext &&\ - wget --recursive --no-parent --no-check-certificate -P /opt/libreoffice/ext https://go.suokunlong.cn:88/dl/libreoffice/external_tarballs/ -RUN mv /opt/libreoffice/ext/go.suokunlong.cn:88/dl/libreoffice/external_tarballs/* /opt/libreoffice/ext - # 配置编译选项 -RUN cat << EOF > autogen.input \ - && echo "--without-help" >> autogen.input \ - && echo "--without-helppack-integration" >> autogen.input \ - && echo "--with-lang=zh-CN zh-TW" >> autogen.input \ - && echo "--disable-online-update" >> autogen.input \ - && echo "--disable-breakpad" >> autogen.input \ - && echo "--disable-odk" >> autogen.input \ - && echo "--without-doxygen" >> autogen.input \ - && echo "--with-external-tar=/opt/libreoffice/ext" >> autogen.input \ - && echo "--without-java" >> autogen.input \ - && echo "--enable-firebird-sdbc" >> autogen.input \ - && echo "--without-system-firebird" >> autogen.input \ - && echo "--enable-python=internal" >> autogen.input - # 预编译 -RUN ./autogen.sh - # 因为libreoffice的安全策略,不允许root用户执行编译操作(可以改Makefile文件解决),所以新建用户 -RUN useradd libreoffice - # 切换用户 -RUN su libreoffice - # 在普通用户下编译 -RUN make || true - # !!!编译40分钟左右会报错,此时需要执行以下操作重新编译 -RUN cp ./workdir/UnpackedTarball/python3/build/lib.linux-aarch64-3.8/_sysconfigdata__linux_aarch64-linux-gnu.py ./workdir/UnpackedTarball/python3/build/lib.linux-aarch64-3.8/_sysconfigdata__linux_aarch64-unknown-linux-gnu.py - # 重新编译 -RUN make &&\ - make install - -RUN ln -s /usr/local/lib/libreoffice/program/soffice /usr/bin/libreoffice - -# 清理临时文件 -RUN rm -rf /tmp/* && rm -rf /var/lib/apt/lists/* &&\ -cd /usr/share/fonts/chinese &&\ -mkfontscale &&\ -mkfontdir &&\ -fc-cache -fv -ENV LANG zh_CN.UTF-8 -ENV LC_ALL zh_CN.UTF-8 -CMD ["/bin/bash"] diff --git a/docker/kkfileview-jdk/README.cn.md b/docker/kkfileview-jdk/README.cn.md new file mode 100644 index 00000000..bd037b37 --- /dev/null +++ b/docker/kkfileview-jdk/README.cn.md @@ -0,0 +1,50 @@ +# 构建说明 + +由于 kkfileview 的基础运行环境很少变动且制作耗时较久,而 kkfileview 本身代码开发会频繁改动,因此把制作其 Docker 镜像的步骤拆分为两次: + +首先制作 kkfileview 的基础镜像(kkfileview-jdk)。 + +然后使用 kkfileview-jdk 作为基础镜像进行构建,加快 kkfileview docker 镜像构建与发布。 + +执行如下命令即可构建基础镜像: +> 这里镜像 tag 以 4.4.0 为例,本项目所维护的 Dockerfile 文件考虑了跨平台兼容性。 如果你需要用到 arm64 架构镜像, 则在arm64 架构机器上同样执行下面的构建命令即可 + +```shell +docker build --tag keking/kkfileview-jdk:4.4.0 . +``` + + + +## 跨平台构建 + +`docker buildx` 支持在一台机器上构建出多种平台架构的镜像。推荐使用该能力进行跨平台的镜像构建。 +例如,执行 `docker buildx build` 命令时加上 `--platform=linux/arm64` 参数即可构建出 arm64 架构镜像。这极大方便了那些没有arm64 架构机器却想构建 arm64 架构镜像的用户。 + +> 当前本项目仅支持构建 linux/amd64 和 linux/arm64 两种平台架构的镜像 +> buildx 的 builder driver 可以使用默认的 `docker` 类型, 若使用 `docker-container` 类型可以支持并行构建多种架构, 本文不再赘述, 有兴趣可以自行了解。参考 [Docker Buildx | Docker Documentation](https://docs.docker.com/buildx/working-with-buildx/#build-multi-platform-images) + +**前提要求** + +以当前机器为 amd64 (x86_64)架构为例。需要开启 docker 的 buildx 特性,以及开启 Linux 的 QEMU 用户模式: + +> 使用 WSL2 的 Windows 用户如果安装了最新的 DockerDesktop, 则这些前提要求已满足, 无需额外下述设置。 + +1. 安装 docker buildx 客户端插件: + > docker 版本要求 >=19.03 + + 若已安装, 则跳过。详情参考 https://github.com/docker/buildx + +2. 开启 QEMU 的用户模式功能, 并安装其它平台的模拟器: + > Linux 内核要求 >=4.8 + + 使用 `tonistiigi/binfmt` 镜像可快速开启并安装模拟器,执行下面命令: + + ```shell + docker run --privileged --rm tonistiigi/binfmt --install all + ``` + +现在就可以愉快地开始构建了,构建命令示例: + +```shell +docker buildx build --platform=linux/amd64,linux/arm64 -t keking/kkfileview-jdk:4.4.0 --push . +``` diff --git a/docker/kkfileview-jdk/README.md b/docker/kkfileview-jdk/README.md new file mode 100644 index 00000000..2e9f2481 --- /dev/null +++ b/docker/kkfileview-jdk/README.md @@ -0,0 +1,53 @@ +# Build Instructions + +Since the base runtime environment for kkfileview rarely changes and takes a long time to build, while the kkfileview code itself is frequently updated, the process of building its Docker image is split into two steps: + +First, create the base image for kkfileview (kkfileview-jdk). + +Then, use kkfileview-jdk as the base image to build and speed up the kkfileview Docker image build and release process. + +To build the base image, run the following command: + +> In this example, the image tag is 4.4.0. The Dockerfile maintained in this project considers cross-platform compatibility. If you need an arm64 architecture image, run the same build command on an arm64 architecture machine. + +```shell +docker build --tag keking/kkfileview-jdk:4.4.0 . +``` + + + +## Cross-Platform Build + +`docker buildx` supports building images for multiple platform architectures on a single machine. It is recommended to use this capability for cross-platform image builds. +For example, adding the `--platform=linux/arm64` parameter when executing the `docker buildx build` command will allow you to build an arm64 architecture image. This is particularly convenient for users who want to build arm64 images but don't have an arm64 machine. + +> Currently, this project only supports building images for the linux/amd64 and linux/arm64 architectures. +> The buildx builder driver can use the default `docker` type, but if you use the `docker-container` type, you can build multiple architectures in parallel. This README will not cover that in detail, you can learn more on your own. Refer to [Docker Buildx | Docker Documentation](https://docs.docker.com/buildx/working-with-buildx/#build-multi-platform-images) + +**Prerequisites** + +Assuming the current machine is amd64 (x86_64) architecture, you'll need to enable the docker buildx feature and enable Linux QEMU user mode: + +> Windows users with WSL2 who have installed a recent version of Docker Desktop will already meet these prerequisites, so no additional setup is required. + +1. Install the docker buildx client plugin: + + > Docker version >=19.03 is required. + + If it's already installed, you can skip this step. For more details, refer to https://github.com/docker/buildx. + +2. Enable QEMU user mode and install emulators for other platforms: + + > Linux kernel version >=4.8 is required. + + You can quickly enable and install emulators using the tonistiigi/binfmt image by running the following command: + + ```shell + docker run --privileged --rm tonistiigi/binfmt --install all + ``` + +Now you can enjoy the building. Here’s an example build command: + +```shell +docker buildx build --platform=linux/amd64,linux/arm64 -t keking/kkfileview-jdk:4.4.0 --push . +``` diff --git a/docker/kkfileview-jdk/docker build.txt b/docker/kkfileview-jdk/docker build.txt deleted file mode 100644 index d774f328..00000000 --- a/docker/kkfileview-jdk/docker build.txt +++ /dev/null @@ -1,5 +0,0 @@ -# 执行如下命令构建基础镜像,加快kkfileview docker镜像构建与发布 -docker build --tag keking/kkfileview-jdk:4.3.0 . - -# arm64架构执行如下命令 -docker build -f Dockerfile_arm64 --tag keking/kkfileview-jdk:4.3.0 . \ No newline at end of file