Упаковка приложения в Docker-образ | Tarantool
Документация на русском языке
поддерживается сообществом

Упаковка приложения в Docker-образ

Команда cartridge pack docker создает Docker-образ, позволяющий запускать экземпляры приложения в контейнерах.

Используйте следующие параметры для управления локальной упаковкой Docker-образов. На странице с описанием команды pack вы найдете параметры, применимые к любому типу дистрибутива.

--tag Тег или теги Docker-образа, собранного с помощью cartridge pack docker.
--from Путь к базовому файлу Dockerfile итогового образа. По умолчанию это Dockerfile.cartridge в корневой директории приложения.

Возможные варианты тегов для итогового образа:

  • <имя>:<выявленная-версия>[-<суффикс>] — по умолчанию;
  • <имя>:<версия>[-<суффикс>] — если был задан параметр --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