服务 DockerFile 配置
项目中 arcsoft
目录中存放着算法的三个.so 文件,以下为项目的 DockerFile:
1 2 3 4 5 6 7 8
| FROM centos7_jdk8:1 VOLUME /tmp COPY arcsoft/ /usr/lib/ ADD iot-arcsoft.jar iot-arcsoft.jar ENV LD_LIBRARY_PATH=/usr/lib RUN bash -c 'touch /iot-arcsoft.jar' \ && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-Dfile.encoding=utf-8","-jar","iot-arcsoft.jar"]
|
基础镜像构建
由于 SDK 更新,原先基于 store/oracle/serverjre:8
构建的镜像无法满足要求,
运行报错。
提前准备好三个文件,和 DockerFile 处于同一个目录。
libstdc++.so.6.0.25
文件在服务器中寻找到的
find / -name “libstdc++.so.6*” 查看高版本的 lib 库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| FROM centos:centos7
ADD jdk-8u311-linux-x64.tar.gz /opt ADD glibc-2.18.tar.gz /opt ADD libstdc++.so.6.0.25 /usr/lib64/
RUN cd / && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ && yum makecache \ && yum install -y wget aclocal automake autoconf make gcc gcc-c++ glibc \ && yum clean all
RUN cd /opt/glibc-2.18 && mkdir build && cd build \ && ../configure --prefix=/usr && make -j4 && make install \ && cd /usr/lib64 && ln -sf /usr/lib64/libstdc++.so.6.0.25 /usr/lib64/libstdc++.so.6 WORKDIR /opt
ENV JAVA_HOME=/opt/jdk1.8.0_311 ENV JRE_HOME=${JAVA_HOME}/jre ENV CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar:${JRE_HOME}/lib/dt.jar ENV PATH=${JAVA_HOME}/bin:${PATH}:${JRE_HOME}/bin CMD ["/bin/bash"]
|
升级 GCC
如果服务器中没有高版本的 libstdc++.so.6*
文件,需要安装高版本 gcc-6.5.0(可能需要安装 libstdc++、libstdc++-devel、bzip2),下载并解压到/opt
目录下。在 /opt
目录下按顺序执行
1 2 3 4 5 6 7 8 9
| ./contrib/download_prerequisites
mkdir build && cd build
../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib make -j4
make install
|
然后查找高版本 libstdc++.so.6 文件,找到后回到上一步基础镜像构建
1
| find / -name "libstdc++.so.6*"
|