Упаковка приложения в Docker-образ
Команда cartridge pack docker
создает Docker-образ, позволяющий запускать экземпляры приложения в контейнерах.
Используйте следующие параметры для управления локальной упаковкой Docker-образов. На странице с описанием команды pack вы найдете параметры, применимые к любому типу дистрибутива.
--tag |
Тег или теги Docker-образа, собранного с помощью cartridge pack docker . |
--from |
Путь к базовому файлу Dockerfile итогового образа. По умолчанию это Dockerfile.cartridge в корневой директории приложения. |
--tarantool-version |
Версия Tarantool для установки в итоговом образе. Поддерживаемый формат: «<Major>», «<Major>.<Minor>», «<Major>.<Minor>.<Patch>», «<Major>.<Minor>.<Patch>-<TagSuffix>». По умолчанию это версия Tarantool из окружения пользователя. |
Возможные варианты тегов для итогового образа:
<имя>:<выявленная-версия>[-<суффикс>]
— по умолчанию;<имя>:<версия>[-<суффикс>]
— если был задан параметр--version
;<тег>
— если был задан параметр--tag
.
Чтобы запустить экземпляр instance-1
приложения myapp
, выполните:
docker run -d \
--name instance-1 \
-e TARANTOOL_INSTANCE_NAME=instance-1 \
-e TARANTOOL_ADVERTISE_URI=3302 \
-e TARANTOOL_CLUSTER_COOKIE=secret \
-e TARANTOOL_HTTP_PORT=8082 \
-p 127.0.0.1:8082:8082 \
myapp:1.0.0
Значение переменной TARANTOOL_INSTANCE_NAME
по умолчанию — default
.
Вы можете задать переменные среды CARTRIDGE_RUN_DIR
и CARTRIDGE_DATA_DIR
следующим образом:
docker run -d \
--name instance-1 \
-e CARTRIDGE_RUN_DIR=my-custom-run-dir \
-e CARTRIDGE_DATA_DIR=my-custom-data-dir \
-e TARANTOOL_ADVERTISE_URI=3302 \
-e TARANTOOL_CLUSTER_COOKIE=secret \
-e TARANTOOL_HTTP_PORT=8082 \
-p 127.0.0.1:8082:8082 \
myapp:1.0.0
CARTRIDGE_DATA_DIR
— рабочая директория, в которой хранятся сокет консоли (console socket) и PID-файл экземпляра. По умолчанию это директория /var/lib/tarantool
.
Вы также можете задать TARANTOOL_WORKDIR
, TARANTOOL_PID_FILE
, TARANTOOL_CONSOLE_SOCK
и другие переменные:
docker run -d \
--name instance-1 \
-e TARANTOOL_WORKDIR=custom-workdir \
-e TARANTOOL_PID_FILE=custom-pid-file \
-e TARANTOOL_CONSOLE_SOCK=custom-console-sock \
-e TARANTOOL_ADVERTISE_URI=3302 \
-e TARANTOOL_CLUSTER_COOKIE=secret \
-e TARANTOOL_HTTP_PORT=8082 \
-p 127.0.0.1:8082:8082 \
myapp:1.0.0
Чтобы просмотреть журнал экземпляра, выполните команду:
docker logs instance-1
Образ собирается на основе centos:7
(подробности далее).
Код приложения расположен в /usr/share/tarantool/<имя_приложения>
. Образ уже включает установленную версию Tarantool с открытым исходным кодом.
Директория запуска — /var/run/tarantool/<имя_приложения>
, рабочая директория — /var/lib/tarantool/<имя_приложения>
.
В запускаемом образе также содержится файл /usr/lib/tmpfiles.d/<имя_приложения>.conf
, благодаря которому экземпляр перезапускается после перезагрузки контейнера.
Ответственность за установку правильного параметра advertise_uri
(<host>:<port>
) в ситуации, когда контейнеры развернуты на разных машинах, лежит на пользователе. Убедитесь, что параметр advertise_uri
каждого экземпляра идентичен на всех машинах. Это необходимо, чтобы экземпляры могли друг к другу подключаться. Предположим, вы запустили экземпляр, у которого в качестве advertise_uri
указано значение localhost:3302
. Другие экземпляры не смогут обращаться к нему по URI <instance-host>:3302
, потому что распознают его только как localhost:3302
.
Если указать только порт, cartridge
будет использовать IP, определяемый автоматически. В этом случае необходимо настроить сети Docker, чтобы экземпляры могли подключаться друг к другу.
Вы можете использовать тома Docker (Docker volumes), чтобы хранить на машине-хосте снимки данных экземпляра и его журналы .xlog
. Если вы внесли изменения в код приложения, вы можете создать для него новый Docker-образ, остановить старый контейнер, а затем запустить новый на основе нового образа.
По умолчанию образ основан на centos:7
.
Если приложению требуются для работы какие-либо пакеты, можно задать для итогового образа дополнительные базовые слои (Docker layers).
Разместите файл Dockerfile.cartridge
в корневой директории приложения или передайте путь к другому Dockerfile с помощью параметра --from
. Убедитесь, что Dockerfile начинается со строки FROM centos:7
или FROM centos:8
(не считая комментариев).
Например, если вашему приложению для выполнения требуется zip
, в Dockerfile должны быть следующие строки:
Dockerfile.cartridge
:FROM centos:8 RUN yum install -y zip