需求:
- 某服务端业务需要调用 matlab
- 为方便迭代发布,需要支持基于 docker 的自动化部署(CD)
方案对比
使用 Matlab 官方 docker 镜像
- 一键安装,使用方便
- 官方镜像仅支持网络验证
- 官方镜像仅支持基础功能版、深度学习版两个版本,功能不全
使用 matlab runtime
- 需要将编写好的 matlab 程序打包成对应框架(如:python、c++ 等)SDK。存在兼容性问题,同时操作较为复杂
使用 matlab server
- 没有用过
- 看文档,貌似用起来成本较大
定制 docker 镜像
使用 ubuntu:20.04 作为基础镜像,在容器中安装 matlab
- 操作简单。需求方仅需要把 matlab 代码交付给开发人员,就可以使用
- 灵活性强。可以根据具体业务安装对应模块
- 兼容性好。理论上,服务端的执行效果和开发时的运行效果一致
使用规范
matlab 代码使用 pcode
工具混淆后部署到服务端
构建镜像
基础镜像
目的:加快实验速度,同时作为后续部署的基础镜像
FROM ubuntu:20.04
COPY . /root
RUN rm -f /etc/apt/sources.list && cp /root/sources.list /etc/apt/sources.list && rm -rf /var/lib/apt/lists/* && apt update && \
apt-get install -y python3 && apt-get install -y python3-pip && \
pip config --global set global.index-url http://mirrors.piprepohost.com/repository/pypi/simple/ && pip config --global set install.trusted-host mirrors.piprepohost.com && \
apt-get install -y libx11-6 && apt-get install -y libxt6 && apt-get install -y libglib2.0-0 && \
apt-get clean && apt-get -y autoremove && rm -rf /var/lib/apt/lists/*
Install
方法一:把容器保存成镜像
这里是把 matlab ISO 安装包映射到 docker 容器中。然后把容器打包成镜像。
// install
// txt 内容详见文章末尾
./install -inputFile inputFile.txt
// run
// 如果没有安装 jre 或其他 java 开发环境,需要携带 -nojvm 参数
/matlabroot/bin/matlab -nodisplay -nojvm
// install python engine allowing call matlab from python
cd /matlabroot/bin/extern//engines/python
python3 setup.py install
# 把容器保存为镜像
docker commit <containerid> <tag>
# 接下来可以通过以下两种方式分发镜像
# 上传到 harbor
docker push <tag>
# 保存成文件
docker save -o <filename>.tar <src-image-tag>
# 通过下面的命令导入镜像
# 导入后,新导入的镜像是没有 tag 的,记得打上 tag
docker load --input <filename>.tar
方法二:通过 Dockerfile 构建镜像
使用这种方法时,不能把 matlab 安装包放到 context 中,因为安装文件太大,会导致发送给 daemon 的时候崩溃或者卡死。
建议使用多阶段构建,在第一个阶段完成安装,第二个阶段保留安装完的数据。
构建时推荐使用 ADD
指令,从远端下载安装文件,然后执行安装 matlab 相关命令。
问题集合
no more space
- matlab.internal.engine.input
outputFile
- no more space
// 查看磁盘占用情况,大概率是 docker 使用的磁盘空间满了
du -h
df -h
// 可以在 /etc/docker/daemon.json 中添加/修改 data-root 字段,选择空间最大的磁盘
// 改完后注意同步数据(把之前磁盘空间的内容拷贝到新磁盘空间,否则之前所有的 docker 内容都看不到)
"data-root"
// 重启 docker
systemctl daemonreload
systemctl restart docker
not found
- matlab 编码问题
- 加密系统自动加密问题
- pcode 混淆
在 dockerfile 使用 apt
当在 dockerfile 使用 apt 的时候,如果出问题,可以考虑设置如下环境变量。该环境变量有很多值,请自行 baidu
DEBIAN_FRONTEND=noninteractive
图形化安装
如果要图形化安装(使用 matlab 的安装 GUI 引导)。最好是注销当前账户,然后使用 root 登录系统。
如果是使用如下方式安装,会出现 GUI 看不到的情况
sudo su
./install
怀疑是此时的 X11 转发不能和当前账户共用导致。文章来源:https://www.toymoban.com/news/detail-531047.html
installer_input.txt
这是 demo 样例,大家注意根据自己情况修改文件中的参数。文章来源地址https://www.toymoban.com/news/detail-531047.html
##################################################################
##
## Use this file to specify parameters required by the installer at runtime.
##
## Instructions for using this file.
##
## 1. Create a copy of this template file and fill in the required
## information.
##
## 2. Uncomment only those lines that start with a single '#'
## and set the desired values. All allowed values for the
## parameters are defined in the comments section for each
## parameter.
##
## 3. Launch the installer from the command line, using the -inputFile option
## to specify the name of your installer initialization file.
##
## (Windows) setup.exe -inputFile <file_name>
## (Linux/macOS) install -inputFile <file_name>
##
##################################################################
##
##
## SPECIFY INSTALLATION FOLDER
##
## Example:
## (Windows) destinationFolder=C:\Program Files\MATLAB\RXXXX
## (Linux) destinationFolder=/usr/local/RXXXX
## (macOS) destinationFolder=/Applications
##
## Set the desired value for destinationFolder and
## uncomment the line.
destinationFolder=/home/jori/matlab
##
## SPECIFY FILE INSTALLATION KEY
##
## Example: fileInstallationKey=xxxxx-xxxxx-xxxxx-xxxxx.....
##
## Set the desired value for fileInstallationKey and
## uncomment the line.
##
fileInstallationKey=09806-07443-53955-64350-21751-41297
##
## ACCEPT LICENSE AGREEMENT
##
## You must agree to the license agreement to install MathWorks products.
## The license agreement can be found in the license_agreement.txt file at the
## root level of the installation DVD.
##
## Example: agreeToLicense=yes
##
## Set agreeToLicense value to yes or no and
## uncomment the line.
agreeToLicense=yes
##
## SPECIFY OUTPUT LOG
##
## Specify full path of file into which you want the results of the
## installation to be recorded.
##
## Example:
## (Windows) outputFile=C:\TEMP\mathworks_<user_name>.log
## (Linux/macOS) outputFile=/tmp/mathworks_<user_name>.log
##
## Set the desired value for outputFile and
## uncomment the line.
outputFile=/tmp/mathworks_jori.log
##
## Enable Login Named User licensing
##
## Set to Yes to enable use of a Login Named User license for all users of this MATLAB installation
## Users must log in to their MathWorks Account when MATLAB starts.
##
## Example: enableLNU=yes
##
## NOTE: This flag is valid in silent installations only.
enableLNU=no
##
## IMPROVE MATLAB
##
## Improve MATLAB by sending user experience information to MathWorks.
## Your participation ensures that you are represented and helps us design
## better products. You can opt in or out of this service either during
## installation or by going to MATLAB preferences.
## https://www.mathworks.com/support/faq/user_experience_information_faq.html
improveMATLAB=no
########## Begin: Options for Network License Types #########
##
## SPECIFY PATH TO LICENSE FILE (Required for network license types only)
##
## This value is required when installing as a Network End-User
## Example:
## (Windows) licensePath=C:\TEMP\license.dat
## (Linux) licensePath=/tmp/license.dat
## Set the desired value for licensePath and
## uncomment the line.
isSilent=true
activateCommand=activateOffline
licensePath=/home/jori/2021acrack/license.lic
licenseFile=/home/jori/2021acrack/license.lic
########## End: Options for Network License Types #########
################# Begin - Windows Only Options ################
##
## CHOOSE TO SET FILE ASSOCIATIONS
##
## Set to true if you want the installer to associate file types used by MathWorks
## products to this version of MATLAB, or false if you do not want the installer to
## associate MathWorks file types with this version of MATLAB.
##
## Default value is true.
##
## Set setFileAssoc value to true or false and
## uncomment the line.
setFileAssoc=false
##
## CHOOSE TO CREATE WINDOWS DESKTOP SHORTCUT
##
## Set to true if you would like the installer to create a desktop shortcut icon
## when MATLAB is installed or false if you don't want the shortcut created.
##
## Default value is false.
##
## Set desktopShortcut value to true or false and
## uncomment the line.
desktopShortcut=false
## CHOOSE TO ADD SHORTCUT TO WINDOWS START MENU
##
## Set to true if you would like the installer to create a Start Menu shortcut
## icon when MATLAB is installed or false if you don't want the shortcut created.
##
## Default value is true.
##
## Set startMenuShortcut value to true or false and
## uncomment the line.
startMenuShortcut=false
## CREATE a MATLAB Startup Accelerator task
##
## The MATLAB Startup Accelerator installer creates a
## system task to preload MATLAB into the system's cache
## for faster startup.
##
## NOTE: By default, a MATLAB Startup Accelerator task will
## automatically be created.
##
## If you want a MATLAB Startup Accelerator task to be created,
## do not edit this section.
##
## Set createAccelTask value to false if you do not want to
## create an Accelerator task and uncomment the line.
createAccelTask=false
################ End - Windows Only Options ################
## SPECIFY PRODUCTS YOU WANT TO INSTALL
##
## By default, the installer installs all the products and
## documentation for which you are licensed. Products you are not licensed for
## are not installed, even if they are listed here.
##
## Note:
## 1. To automatically install all your licensed products, do not edit
## any lines in this section.
##
## 2. To install a specific product or a subset of products for
## which you are licensed, uncomment the line for the product(s) you want
## to install.
#product.5G_Toolbox
#product.AUTOSAR_Blockset
#product.Aerospace_Blockset
#product.Aerospace_Toolbox
#product.Antenna_Toolbox
#product.Audio_Toolbox
#product.Automated_Driving_Toolbox
#product.Bioinformatics_Toolbox
#product.Communications_Toolbox
#product.Computer_Vision_Toolbox
#product.Control_System_Toolbox
#product.Curve_Fitting_Toolbox
#product.DDS_Blockset
#product.DO_Qualification_Kit
#product.DSP_System_Toolbox
#product.Data_Acquisition_Toolbox
#product.Database_Toolbox
#product.Datafeed_Toolbox
#product.Deep_Learning_HDL_Toolbox
#product.Deep_Learning_Toolbox
#product.Econometrics_Toolbox
#product.Embedded_Coder
#product.Filter_Design_HDL_Coder
#product.Financial_Instruments_Toolbox
#product.Financial_Toolbox
#product.Fixed-Point_Designer
#product.Fuzzy_Logic_Toolbox
#product.GPU_Coder
#product.Global_Optimization_Toolbox
#product.HDL_Coder
#product.HDL_Verifier
#product.IEC_Certification_Kit
#product.Image_Acquisition_Toolbox
#product.Image_Processing_Toolbox
#product.Instrument_Control_Toolbox
#product.LTE_Toolbox
#product.Lidar_Toolbox
#product.MATLAB
#product.MATLAB_Coder
#product.MATLAB_Compiler
#product.MATLAB_Compiler_SDK
#product.MATLAB_Parallel_Server
#product.MATLAB_Production_Server
#product.MATLAB_Report_Generator
#product.MATLAB_Web_App_Server
#product.Mapping_Toolbox
#product.Mixed-Signal_Blockset
#product.Model_Predictive_Control_Toolbox
#product.Model-Based_Calibration_Toolbox
#product.Motor_Control_Blockset
#product.Navigation_Toolbox
#product.OPC_Toolbox
#product.Optimization_Toolbox
#product.Parallel_Computing_Toolbox
#product.Partial_Differential_Equation_Toolbox
#product.Phased_Array_System_Toolbox
#product.Polyspace_Bug_Finder
#product.Polyspace_Bug_Finder_Server
#product.Polyspace_Code_Prover
#product.Polyspace_Code_Prover_Server
#product.Powertrain_Blockset
#product.Predictive_Maintenance_Toolbox
#product.RF_Blockset
#product.RF_Toolbox
#product.ROS_Toolbox
#product.Radar_Toolbox
#product.Reinforcement_Learning_Toolbox
#product.Risk_Management_Toolbox
#product.Robotics_System_Toolbox
#product.Robust_Control_Toolbox
#product.Satellite_Communications_Toolbox
#product.Sensor_Fusion_and_Tracking_Toolbox
#product.SerDes_Toolbox
#product.Signal_Processing_Toolbox
#product.SimBiology
#product.SimEvents
#product.Simscape
#product.Simscape_Driveline
#product.Simscape_Electrical
#product.Simscape_Fluids
#product.Simscape_Multibody
#product.Simulink
#product.Simulink_3D_Animation
#product.Simulink_Check
#product.Simulink_Code_Inspector
#product.Simulink_Coder
#product.Simulink_Compiler
#product.Simulink_Control_Design
#product.Simulink_Coverage
#product.Simulink_Design_Optimization
#product.Simulink_Design_Verifier
#product.Simulink_Desktop_Real-Time
#product.Simulink_PLC_Coder
#product.Simulink_Real-Time
#product.Simulink_Report_Generator
#product.Simulink_Requirements
#product.Simulink_Test
#product.SoC_Blockset
#product.Spreadsheet_Link
#product.Stateflow
#product.Statistics_and_Machine_Learning_Toolbox
#product.Symbolic_Math_Toolbox
#product.System_Composer
#product.System_Identification_Toolbox
#product.Text_Analytics_Toolbox
#product.UAV_Toolbox
#product.Vehicle_Dynamics_Blockset
#product.Vehicle_Network_Toolbox
#product.Vision_HDL_Toolbox
#product.WLAN_Toolbox
#product.Wavelet_Toolbox
#product.Wireless_HDL_Toolbox
到了这里,关于在 Ubuntu 20.04 上静默安装matlab 实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!