编译最新的kkFileView并使用docker打包

kkFileView 是一个开源的文件预览服务,支持多种文件格式的在线预览。本文将详细介绍如何编译 kkFileView 的最新版本,并将其打包成 Docker 镜像。

1. 环境准备

在开始之前,确保你已经安装了以下工具:

  • Git: 用于克隆 kkFileView 的代码仓库。
  • JDK 1.8+: kkFileView 需要 Java 环境来编译和运行。
  • Maven: 用于构建项目。
  • Docker: 用于打包和运行 Docker 镜像。

2. 克隆 kkFileView 代码仓库

首先,从 GitHub 上克隆 kkFileView 的最新代码:

git clone https://github.com/kekingcn/kkFileView.git
cd kkFileView

3. 编译 kkFileView

进入项目目录后,使用 Maven 进行编译:

mvn clean package -DskipTests

编译成功后,你会在 server/target/ 目录下看到生成的 kkFileView-4.4.0-beta.tar.gz 文件(版本号可能不同)

好了,现在我们手工将 这个gz包拷到一个空目录下,然后我们将kkFileView目录下的Dockerfile文件拷过来,内容如下

FROM keking/kkfileview-base:4.4.0
ADD server/target/kkFileView-*.tar.gz /opt/
ENV KKFILEVIEW_BIN_FOLDER=/opt/kkFileView-4.4.0-beta/bin
ENTRYPOINT ["java","-Dfile.encoding=UTF-8","-Dspring.config.location=/opt/kkFileView-4.4.0-beta/config/application.properties","-jar","/opt/kkFileView-4.4.0-beta/bin/kkFileView-4.4.0-beta.jar"]

当然你有可能会拉不下来这个kkfileview-base,反正我是没有拉下来,所以我又根据kkFileView -> docker -> kkfileview-base 中的 Dockerfile自己打包了一个 kkfileview-base , 然后自己写了一个新的Dockerfile,编译的时候,因为是用的ubuntu的底层,所以这儿的有个拷贝字体的操作,你记得下载字体 然后解压后再编译base环境,编译好后就可以留着用了,毕竟它的修改不多,除非修改liboffice或增加字体啥的,等这一切做好了,适当改下对应的FROM参数,及对应的版本号,就可以了

FROM ccr.ccs.tencentyun.com/lvtao/kk-base 
ADD kkFileView-*.tar.gz /opt/
ENV KKFILEVIEW_BIN_FOLDER=/opt/kkFileView-4.4.0-beta/bin
ENTRYPOINT ["java","-Dfile.encoding=UTF-8","-Dspring.config.location=/opt/kkFileView-4.4.0-beta/config/application.properties","-jar","/opt/kkFileView-4.4.0-beta/bin/kkFileView-4.4.0-beta.jar"]

编译它

docker build -t ccr.ccs.tencentyun.com/lvtao/kk-file:4.4.0-beta .

好了,这样就可以愉快的使用了...当然你要是想其它人一起用,可以将它docker push一下,分享给朋友即可

为了方便,写个Makefile

# 定义变量
IMAGE_NAME := ccr.ccs.tencentyun.com/lvtao/kk-fileview
TAR_FILE := $(shell ls kkFileView-*.tar.gz 2>/dev/null)
VERSION := $(shell echo $(TAR_FILE) | sed -E 's/.*kkFileView-(.*).tar.gz/\1/')

# 检查文件是否存在
ifeq ($(TAR_FILE),)
$(error "No tar.gz file found in the current directory.")
endif

# 动态生成Dockerfile
dockerfile:
    @echo "Generating Dockerfile with version: $(VERSION)"
    @echo "FROM ccr.ccs.tencentyun.com/lvtao/kk-base" > Dockerfile
    @echo "ADD $(TAR_FILE) /opt/" >> Dockerfile
    @echo "ENV KKFILEVIEW_BIN_FOLDER=/opt/kkFileView-$(VERSION)/bin" >> Dockerfile
    @echo 'ENTRYPOINT ["java","-Dfile.encoding=UTF-8","-Dspring.config.location=/opt/kkFileView-$(VERSION)/config/application.properties","-jar","/opt/kkFileView-$(VERSION)/bin/kkFileView-$(VERSION).jar"]' >> Dockerfile

# 构建镜像的目标
build: dockerfile
    @echo "Building Docker image with version: $(VERSION)"
    docker build -t $(IMAGE_NAME):$(VERSION) .

# 推送镜像的目标
push: build
    @echo "Pushing Docker image to registry: $(IMAGE_NAME):$(VERSION)"
    docker push $(IMAGE_NAME):$(VERSION)

# 清理镜像的目标
clean:
    @echo "Removing Docker image: $(IMAGE_NAME):$(VERSION)"
    docker rmi $(IMAGE_NAME):$(VERSION)
    @echo "Cleaning up Dockerfile"
    rm -f Dockerfile

# 默认目标,执行构建和推送
all: build push

如果你有兴趣,甚至可以将java打包的这块儿也写到makefile里面去,当然我这儿没有写
我将打包好的tar.gz拷到这个位置,使用这个脚本make all它就能自动的根据我的版本号,生成对应的Dockerfile内容并打包镜像啦...

标签: Java, Docker

相关文章

Java中线程池遇到父子任务示例及避坑

在Java中使用线程池可以有效地管理和调度线程,提高系统的并发处理能力。然而,当涉及到父子任务时,可能会遇到一些常见的Bug,特别是在子线程中查询数据并行处理时。本文将通过示例代码展示这些常见问...

java中异步任务的实现详解

在Java中实现异步任务是一种提高应用程序性能和响应性的常用技术。异步编程允许某些任务在等待其他任务完成时继续执行,从而避免了阻塞。本文将介绍几种在Java中实现异步任务的方法,并讨论它们的解决...

在1Panel中解决Docker内PHP网络请求超时问题

在1Panel管理面板中,我们可能会遇到在使用Docker运行的PHP环境中发起网络请求时出现的超时问题。最近给博客写了一个远程请求插件,之前还是正常,这两天突然请求500错误了...问题分析当...

解密 ClassFinal 加密的 Java Jar包

ClassFinal 是一款java class文件安全加密工具,支持直接加密jar包或war包,无需修改任何项目代码,兼容spring-framework;可避免源码泄漏或字节码被反编译。要点...

图片Base64编码

CSR生成

图片无损放大

图片占位符

Excel拆分文件