суббота, 1 июля 2017 г.

Импорт дампа базы MariaDB в Docker при сборке образа

Предположим нам нужно собрать образ на основе Fedora с MariaDB на борту (не самый правильный способ, так как есть куча готовых mysql-образов).
Примерно вот так выглядит мой Dockerfile:
# cat Dockerfile 
FROM fedora

RUN dnf install -y mariadb mariadb-server 
ADD dump/devdb.sql /tmp
ADD dump/initdb.sh /tmp

RUN /tmp/initdb.bash
RUN chown mysql:mysql -R /var/lib/mysql/

CMD ["/usr/bin/mysqld_safe --datadir=/var/lib/mysql"]

В этом докерфайле я описал базовый образ Fedora, установил MariaDB, скопировал дамп базы и скрипт инициализации в образ, выставил права на каталог с данными и описал строку запуска MariaDB.

Во время сборки образа, после копирования файлов в контейнер запускается скрипт initdb.bash вот с таким содержимым:
# cat dump/initdb.bash 
#!/bin/bash

set -e
set -x

mysql_install_db
mysqld_safe --datadir='/var/lib/mysql' --user=root &
until mysqladmin ping >/dev/null 2>&1; do
   sleep 0.2
done

mysql_upgrade && \
mysql -e 'drop database test;' && \
mysql -e 'create database devdb;' && \
mysql devdb < /tmp/devdb.sql && \
echo "Successfully imported" && exit 0

Скрипт инициализирует базы MySQL, запускает MariaDB-server и проверяет запустился ли он (mysqladmin ping), после того, как сервер работает запускается то что нам нужно, а именно удаление базы test, создание чистой базы devdb и импорт дампа в эту базу.

Комментариев нет: