1.首先制作docker镜像:
根据本项目语言,基础服务为java、算法两大模块分别使用python、C++语言,要求所使用的docker镜像可以运行jar包、python、C++的可执行程序;
预备安装C++可执行文件环境、java环境:由于C++、JAVA环境需要本地文件添加至镜像中,所以需要提前准备;
将算法组给的netcdf-c-4.9.0.tar.gz和算法可执行文件放在同一文件夹下,通过写dockerfile构建镜像,选择基础镜像为python,dockerfile中写FROM pjc-clear:v2;
使用命令docker pull python即可拉取至本地私库,使用python命令查看版本,为python3;
通过dockerfile中写
ADD ./icao_rep /SpaceWeather/yxpg/algorithms
将本机文件拷贝至新镜像中,ADD后第一个参数为相对于dockerfile文件的路径,第二个参数为容器内部路径;
dockerfile中写入ADD jdk-8u333-linux-x64.tar.gz /usr/local/jdk/将准备好的linux环境的jdk压缩包拷贝进镜像中,构建镜像时就会自动解压;
写入ENV JAVA_HOME /usr/local/jdk/jdk1.8.0_333和ENV PATH $JAVA_HOME/bin:$PATH,构建镜像时就会自动配置jdk环境变量;
理论上来说此时容器内可以直接运行python可执行程序,但是由于算法有额外依赖库,执行时会报错因特尔mkl库相关错误,需要安装;
使用pip install numpy安装,安装完成之后会弹出提示一条命令,将此命令执行一遍;
再使用pip install mkl安装mkl库,
安装完成之后,添加命令export LD_PRELOAD=/<option your path>/anaconda2/lib/libmkl_rt.so到~/.bashrc中,使用source ~/.bashrc使其生效;
执行完安装之后尝试调用算法命令,成功失败均有可能,如果失败就重启容器重装一遍,直到成功为止,暂时没有找到成功的规律,成功后再安装C++相关环境;
先执行算法组准备好的安装脚本,./netcdf_install.sh此脚本会自动下载包并解压安装,但是由于脚本编写有问题,下载完三个包后回报错退出,需要手动使用tar -zxvf xxxxx.tar.gz命令将三个包解压,事先准备的netcdf-c-4.9.0.tar.gz不需要解压;解压完成后再次执行安装脚本,将会看到安装完成,并提示配置环境变量,将提示内容写入~/.bashrc并使用source ~/.bashrc使其生效;
至此,jar包、python算法、c++算法可执行文件的运行环境均已具备,使用命令
docker commit -m="add jdk" -a="ztx" e218edb10161 pjc-clear:v2
保存镜像,e218edb10161为用docker ps命令查出的容器id,结尾是镜像名:tag,今后更新jar包、算法文件均在dockerfile中以此文件为基础镜像。