halo Docker & Self-Hosted Deployment

GitHub

Halo 是一款强大易用的开源建站工具,从个人博客、知识库,到企业官网、在线商城,Halo 都能助您轻松实现,一站式满足您的多样化建站需求。

1. Pull Image (DOCKERHUB) docker pull halo-dev/halo:latest
2. Docker Run (1-Click Launch) docker run -d --name halo -p 8090:8090 --restart always halo-dev/halo:latest
3. Podman Run podman run -d --name halo -p 8090:8090 --restart always halo-dev/halo:latest
4. Skopeo Inspect (Zero-Pull Manifest) skopeo inspect docker://docker.io/halo-dev/halo:latest
5. ORAS Pull (OCI Artifact) oras pull halo-dev/halo:latest
Dockerfile
FROM eclipse-temurin:21-jre AS builder

WORKDIR /application
ARG JAR_FILE=/application/build/libs/*.jar
COPY ${JAR_FILE} application.jar
RUN java -Djarmode=tools -jar application.jar extract --layers --destination extracted

FROM eclipse-temurin:21-jre
LABEL maintainer="johnniang <[email protected]>"
WORKDIR /application
COPY --from=builder /application/extracted/dependencies/ ./
COPY --from=builder /application/extracted/spring-boot-loader/ ./
COPY --from=builder /application/extracted/snapshot-dependencies/ ./
COPY --from=builder /application/extracted/application/ ./

ENV JVM_OPTS="" \
    HALO_WORK_DIR="/root/.halo2" \
    SPRING_CONFIG_LOCATION="optional:classpath:/;optional:file:/root/.halo2/" \
    TZ=Asia/Shanghai

RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime \
    && echo $TZ > /etc/timezone

RUN java -XX:ArchiveClassesAtExit=application.jsa -Dspring.context.exit=onRefresh -jar application.jar --halo.work-dir=/tmp/halo2 \
    && rm -rf /tmp/halo2

EXPOSE 8090

ENTRYPOINT ["sh", "-c", "exec java ${JVM_OPTS} -XX:SharedArchiveFile=application.jsa -jar application.jar \"$@\"", "--"]