Cangjie-Openeuler-25基础docker镜像构建
代码示例gitcode地址
https://gitcode.com/yunting/CangjieCjoyWebSocketDemo.git
下载对应平台的相关SDK包
cangjie 标准包
https://cangjie-lang.cn/download/1.0.1
cangjie stdx包
https://gitcode.com/Cangjie/cangjie_stdx/releases
Dockerfile
# 1. 多阶段构建:把“编译/下载”与“运行”彻底分开,最终镜像只留运行态文件
FROM openeuler/openeuler:25.03 AS builder
RUN dnf install -y \
gcc \
git \
unzip \
wget \
zlib-devel \
&& \
# --- OpenSSL 编译和安装 ---
wget -q https://www.openssl.org/source/openssl-1.1.1n.tar.gz && \
tar -zxvf openssl-1.1.1n.tar.gz && \
cd openssl-1.1.1n && \
./config --prefix=/build/usr/local/openssl1.1.1 --openssldir=/build/usr/local/openssl1.1.1/ssl shared zlib && \
make -j$(nproc) && \
make install && \
# --- 清理工作 ---
# 返回上级目录以便删除源码
cd .. && \
# 删除 OpenSSL 源码和压缩包
rm -rf openssl-1.1.1n openssl-1.1.1n.tar.gz && \
# 清理系统包缓存
dnf clean all
# --------------------------------------------------
# 2. 运行时阶段:只拷贝构建产物,不再装编译链
FROM openeuler/openeuler:25.03
# 2.1 安装最小运行时依赖
RUN dnf install -y \
gcc \
git && \
dnf remove -y openssl && \
dnf clean all
# 2.2 把 builder 阶段编译好的 openssl 拷贝进来
COPY --from=builder /build/usr/local/openssl1.1.1 /usr/local/openssl1.1.1
RUN echo '/usr/local/openssl1.1.1/lib' > /etc/ld.so.conf.d/openssl.conf \
&& ldconfig \
&& ln -sf /usr/local/openssl1.1.1/bin/openssl /usr/bin/openssl
# 2.3 拷贝并解压仓颉 SDK + stdx(一条 RUN 完成,减少层)
ENV CANGJIE_HOME=/opt/cangjie
ENV CANGJIE_STDX_PATH=/opt/cangjie/stdx
COPY cangjie-sdk-linux-aarch64-1.0.4.tar.gz \
cangjie-stdx-linux-aarch64-1.0.4.1.zip /tmp/
RUN set -eux; \
mkdir -p ${CANGJIE_HOME}; \
tar -xzf /tmp/cangjie-sdk-linux-aarch64-1.0.4.tar.gz --strip-components=1 -C ${CANGJIE_HOME}; \
unzip -q /tmp/cangjie-stdx-linux-aarch64-1.0.4.1.zip -d /tmp; \
mkdir -p ${CANGJIE_STDX_PATH}; \
mv /tmp/linux_aarch64_llvm ${CANGJIE_STDX_PATH}/; \
rm -f /tmp/*.tar.gz /tmp/*.zip; \
# 注册运行时库路径
echo "${CANGJIE_HOME}/runtime/lib/linux_aarch64_llvm" > /etc/ld.so.conf.d/cangjie.conf; \
ldconfig
# 2.4 环境变量 & PATH
ENV PATH=${CANGJIE_HOME}/bin:${CANGJIE_HOME}/tools/bin:$PATH
ENV LIBRARY_PATH=/usr/lib/gcc/aarch64-openEuler-linux/12:$LIBRARY_PATH
ENV LD_LIBRARY_PATH=/usr/lib/gcc/aarch64-openEuler-linux/12:$LD_LIBRARY_PATH
# 2.5 验证
RUN cjc --version
# 2.6 工作目录 & 默认 shell
WORKDIR /app
CMD ["/bin/bash"]
按图示存放

docker构建
构建基础镜像
docker build -t cangjie-1.0.4-openeuler-25:1.0.0 .
查看构建的镜像
docker images | grep cangjie-1.0.4-openeuler-25
进入容器验证环境
docker run -it cangjie-1.0.4-openeuler-25:1.0.0 /bin/bash
上传镜像
# 登录 测试账号 ting567 登录了,这步可省略
docker login -u ting567
# 打标签
docker tag cangjie-1.0.4-openeuler-25:1.0.0 ting567/cangjie-1.0.4-openeuler-25:1.0.0
# 推送
docker push ting567/cangjie-1.0.4-openeuler-25:1.0.0

浙公网安备 33010602011771号