Docker на Windows
В этом руководстве описано, как развернуть MyEMS с использованием Docker на операционной системе Windows.
Предварительные требования
- Установленные Docker и npm на хост-машине.
- Установленный сервер MySQL.
- Возможность подключения к базе данных MySQL с хост-машины, на которой запущен Docker Engine.
- Требования к аппаратному обеспечению: как минимум 4 ГБ ОЗУ, 20 ГБ свободного места на диске (для базы данных и Docker-контейнеров).
Клонирование исходного кода:
cd ~
git clone https://github.com/myems/myems
Шаг 1: База данных
См. раздел База данных
Шаг 2: myems-api
В этом разделе вы установите myems-api в Docker.
- Копирование исходного кода в корневой каталог
cp -r myems/myems-api c:\
cd c:\myems-api
- Создание файла .env на основе example.env
Вручную замените 127.0.0.1 на реальный IP-адрес ХОСТА.
cp example.env .env
- Сборка образа из исходного кода
docker build -t myems/myems-api .
Для сборки образа под несколько платформ (а не только для архитектуры и операционной системы, на которой выполняется сборка) можно использовать buildx и указать флаг --platform для задания целевой платформы (например, linux/amd64, linux/arm64 или darwin/amd64):
docker buildx build --platform=linux/amd64 -t myems/myems-api .
- Запуск Docker-контейнера
На хост-машине создайте папку c:\myems-upload, подмонтируйте ее в контейнер, а также подмонтируйте файл .env:
docker run -d -p 8000:8000 -v c:\myems-upload:/var/www/myems-admin/upload -v c:\myems-api\.env:/app/.env:ro --log-opt max-size=1m --log-opt max-file=2 --restart always --name myems-api myems/myems-api
-
-d — запуск контейнера в фоновом режиме и вывод ID контейнера
-
-p — публикация порта контейнера на хост-машину, 8000:8000 (Хост:Контейнер) связывает порт 8000 (справа) контейнера с TCP-портом 8000 (слева) хост-машины.
-
-v — при использовании -v или --volume для подмонтирования файла или директории, которая еще не существует на хост-машине Docker, -v автоматически создает этот конечный точку (всегда как директорию). Опция ro (read-only) делает подмонтированн ый ресурс доступным в контейнере только для чтения. Для версий v4.7.0 и старше используйте путь '/code/.env' вместо '/app/.env'.
-
--log-opt max-size=2m — максимальный размер журнала перед его ротацией. Положительное целое число с модификатором единицы измерения (k, m или g).
-
--log-opt max-file=2 — максимальное количество файлов журналов, которые могут существовать одновременно. При создании нового файла журнала старый файл удаляется. Положительное целое число.
-
--restart — политика перезапуска контейнера при его завершении
-
--name — присвоение имени контейнеру
Абсолютный путь перед двоеточием относится к хост-машине и может отличаться в вашей системе. Абсолютный путь после двоеточия относится к контейнеру и НЕ МОЖЕТ быть изменен. При передаче .env как параметра подмонтирования вы сможете позже изменить значения конфигурации. Если вы изменили файл .env, перезапустите контейнер, чтобы изменения вступили в силу.
Если вам нужно перенести образ на другой компьютер:
- Экспорт образа в tar-архив
docker save --output myems-api.tar myems/myems-api
- Копирование tar-архива на другой компьютер и загрузка образа из архива
docker load --input .\myems-api.tar
Шаг 3: myems-admin
В этом разделе вы установите myems-admin в Docker.
- Копирование исходного кода в корневой каталог
cp -r myems/myems-admin c:\
cd c:\myems-admin
Вручную замените 127.0.0.1:8000 в nginx.conf на реальный IP-адрес и порт myems-api на хост-машине.
notepad nginx.conf
proxy_pass http://127.0.0.1:8000/;
- Сборка образа из исходного кода
docker build -t myems/myems-admin .
Для сборки образа под несколько платформ (а не только для архитектуры и операционной системы, на которой выполняется сборка) можно использовать buildx и указать флаг --platform для задания целевой платформы (например, linux/amd64, linux/arm64 или darwin/amd64):
docker buildx build --platform=linux/amd64 -t myems/myems-admin .
- Запуск Docker-контейнера
На хост-машине создайте папку c:\myems-upload, подмонтируйте ее в контейнер, а также подмонтируйте файл nginx.conf: параметр -v для папки upload должен совпадать с параметром, используемым в myems-api
docker run -d -p 8001:8001 -v c:\myems-upload:/var/www/myems-admin/upload -v c:\myems-admin/nginx.conf:/etc/nginx/nginx.conf:ro --log-opt max-size=1m --log-opt max-file=2 --restart always --name myems-admin myems/myems-admin
-
-d — запуск контейнера в фоновом режиме и вывод ID контейнера
-
-p — публикация порта контейнера на хост-машину, 8001:8001 (Хост:Контейнер) связывает порт 8001 (справа) контейнера с TCP-портом 8001 (слева) хост-машины.
-
-v — при использовании -v или --volume для подмонтирования файла или директории, которая еще не существует на хост-машине Docker, -v автоматически создает этот конечный точку (всегда как директорию). Опция ro (read-only) делает подмонтированный ресурс доступным в контейнере только для чтения. Для версий v4.7.0 и старше используйте путь '/code/.env' вместо '/app/.env'.
-
--log-opt max-size=2m — максимальный размер журнала перед его ротацией. Положительное целое число с модификатором единицы измерения (k, m или g).
-
--log-opt max-file=2 — максимальное ко личество файлов журналов, которые могут существовать одновременно. При создании нового файла журнала старый файл удаляется. Положительное целое число.
-
--restart — политика перезапуска контейнера при его завершении
-
--name — присвоение имени контейнеру
Если вам нужно перенести образ на другой компьютер:
- Экспорт образа в tar-архив
docker save --output myems-admin.tar myems/myems-admin
- Копирование tar-архива на другой компьютер и загрузка образа из архива
docker load --input .\myems-admin.tar