Skip to content

Commit

Permalink
👷优化Dockerfile,支持真正的跨平台构建镜像
Browse files Browse the repository at this point in the history
  • Loading branch information
wayne-cheng committed Aug 16, 2024
1 parent 77f5adb commit a5edc5f
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 113 deletions.
55 changes: 24 additions & 31 deletions docker/kkfileview-jdk/Dockerfile
Original file line number Diff line number Diff line change
@@ -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.ustc.edu.cn@g' /etc/apt/sources.list.d/ubuntu.sources &&\
sed -i 's@//security.ubuntu.com@//mirrors.ustc.edu.cn@g' /etc/apt/sources.list.d/ubuntu.sources &&\
sed -i 's@//ports.ubuntu.com@//mirrors.ustc.edu.cn@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 &&\
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
77 changes: 0 additions & 77 deletions docker/kkfileview-jdk/Dockerfile_arm64

This file was deleted.

50 changes: 50 additions & 0 deletions docker/kkfileview-jdk/README.cn.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# 构建说明

由于 kkfileview 的基础运行环境很少变动且制作耗时较久,而 kkfileview 本身代码开发会频繁改动,因此把制作其 Docker 镜像的步骤拆分为两次:

首先制作 kkfileview 的基础镜像(kkfileview-jdk)。

然后使用 kkfileview-jdk 作为基础镜像进行构建,加快 kkfileview docker 镜像构建与发布。

执行如下命令即可构建基础镜像:
> 这里镜像 tag4.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/amd64linux/arm64 两种平台架构的镜像
> buildxbuilder driver 可以使用默认的 `docker` 类型, 若使用 `docker-container` 类型可以支持并行构建多种架构, 本文不再赘述, 有兴趣可以自行了解。参考 [Docker Buildx | Docker Documentation](https://docs.docker.com/buildx/working-with-buildx/#build-multi-platform-images)

**前提要求**

以当前机器为 amd64 (x86_64)架构为例。需要开启 dockerbuildx 特性,以及开启 LinuxQEMU 用户模式:

> 使用 WSL2Windows 用户如果安装了最新的 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 .
```
5 changes: 0 additions & 5 deletions docker/kkfileview-jdk/docker build.txt

This file was deleted.

0 comments on commit a5edc5f

Please sign in to comment.