Поддерживаемая платформа: только Linux ®.
В этом примере показано, как упаковывать автономное приложение MATLAB ® в образ Docker ®.
Убедитесь, что на компьютере с Linux установлен Docker, введя docker в консоли. Если Docker не установлен, можно следовать инструкциям на веб-сайте Docker для установки и настройки Docker.
Убедитесь, что программа установки среды выполнения MATLAB доступна на компьютере. Можно проверить его существование, выполнив команду compiler.runtime.download в командной строке MATLAB. Если на компьютере существует установщик, функция возвращает сообщение о том, что установщик среды выполнения MATLAB существует и указывает его местоположение. В противном случае загружается установщик среды выполнения MATLAB, соответствующий версии и уровню обновления MATLAB, откуда выполняется команда.
Если используемый компьютер не подключен к Интернету, необходимо загрузить программу установки MATLAB Runtime с компьютера, подключенного к Интернету. После загрузки программы установки MATLAB Runtime необходимо перенести программу установки на компьютер, не подключенный к Интернету. Программу установки можно загрузить с веб-сайта MathWorks.
https://www.mathworks.com/products/compiler/matlab-runtime.html
Запись функции MATLAB с именем mymagic и сохраните его с именем файла mymagic.m.
function mymagic(x)
y = magic(x);
disp(y)
Проверьте функцию в командной строке MATLAB.
mymagic(5)
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9Сделать mymagic в автономное приложение с использованием compiler.build.standaloneApplication функция.
res = compiler.build.standaloneApplication('mymagic.m', 'TreatInputsAsNumeric', true)
res =
Results with properties:
BuildType: 'standaloneApplication'
Files: {3×1 cell}
Options: [1×1 compiler.build.StandaloneApplicationOptions]После завершения построения функция создает папку с именем mymagicstandaloneApplication в текущей папке для хранения автономного приложения. Results объект res в командной строке MATLAB содержится информация о построении.
DockerOptions ОбъектПеред созданием образа Docker создайте DockerOptions с использованием compiler.package.DockerOptions и передать Results объект res и имя изображения mymagic-standalone-app в качестве входных аргументов. compiler.package.DockerOptions функция позволяет настроить упаковку изображений Docker.
opts = compiler.package.DockerOptions(res,'ImageName','mymagic-standalone-app')
opts =
DockerOptions with properties:
EntryPoint: 'mymagic'
ExecuteDockerBuild: on
ImageName: 'mymagic-standalone-app'
DockerContext: './mymagic-standalone-appdocker'Создание образа Docker с помощью compiler.package.docker и передать Results объект res и DockerOptions объект opts в качестве входных аргументов.
compiler.package.docker(res, 'Options', opts)Generating Runtime Image Cleaning MATLAB Runtime installer location. It may take several minutes... Copying MATLAB Runtime installer. It may take several minutes... ... ... ... Successfully built 6501fa2bc057 Successfully tagged mymagic-standalone-app:latest DOCKER CONTEXT LOCATION: /home/user/MATLAB/work/mymagic-standalone-appdocker SAMPLE DOCKER RUN COMMAND: docker run --rm -e "DISPLAY=:0" -v /tmp/.X11-unix:/tmp/.X11-unix mymagic-standalone-app
После завершения упаковки функция создает папку с именем mymagic-standalone-appdocker в текущем каталоге. Эта папка является контекстом Docker и содержит файл Dockerfile. compiler.package.docker функция также возвращает местоположение контекста Docker и пример команды выполнения Docker. Для проверки правильности выполнения образа можно использовать пример команды Docker run.
В процессе упаковки необходимые биты для среды выполнения MATLAB упаковываются как родительское изображение Docker, а автономное приложение упаковывается как дочернее изображение Docker.
Откройте консоль Linux и перейдите в папку контекста Docker. Убедитесь, что mymagic-standalone-app Образ Docker указан в списке изображений Docker.
$ docker images |
REPOSITORY TAG IMAGE ID CREATED SIZE mymagic-standalone-app latest 6501fa2bc057 23 seconds ago 1.03GB matlabruntime/r2020b/update0/4000000000000000 latest c6eb5ba4ae69 24 hours ago 1.03GB
После проверки, что mymagic-standalone-app Образ Docker указан в списке изображений Docker, выполните команду sample run с входным аргументом 5:
$ docker run --rm -e "DISPLAY=:0" -v /tmp/.X11-unix:/tmp/.X11-unix mymagic-standalone-app 5 |
No protocol specified
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9Автономное приложение упаковано и теперь может быть запущено как образ Docker.
Примечание
При запуске приложений, генерирующих графики или графики, выполните команду xhost программы с + перед запуском образа Docker.
xhost +
xhost программа управляет доступом к серверу X-дисплея, тем самым позволяя отображать графики и графику. + указывает, что каждый имеет доступ к экранному серверу X. Если запустить xhost программы с + перед запуском приложений, не генерирующих графики или графики, сообщение No protocol specified больше не отображается.Изображение Docker можно совместно использовать различными способами.
Поместите изображение в центральный реестр DocureHub или в частный реестр Docker. Это наиболее распространенный рабочий процесс.
Сохраните изображение как архив смол и поделитесь им с другими пользователями. Этот поток операций подходит для немедленного тестирования.
Дополнительные сведения о перемещении образа в центральный реестр Docker или частный реестр см. в документации Docker.
Чтобы сохранить образ Docker как архив дегтей, откройте консоль Linux, перейдите в папку контекста Docker и введите следующее.
$ docker save mymagic-standalone-app -o mymagic-standalone-app.tar |
Файл с именем mymagic-standalone-app.tar создается в текущей папке. Задайте соответствующие разрешения с помощью chmod до совместного использования тарбола с другими пользователями.
Загрузите изображение, содержащееся в тарболе, на компьютер конечного пользователя и запустите его.
$ docker load --input mymagic-standalone-app.tar |
Убедитесь, что изображение загружено.
$ docker images |
$ xhost + $ docker run --rm -e "DISPLAY=:0" -v /tmp/.X11-unix:/tmp/.X11-unix mymagic-standalone-app 5 |
compiler.build.standaloneApplication | compiler.package.docker | compiler.package.DockerOptions | compiler.runtime.download