Предположим нам нужно собрать образ на основе 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 и импорт дампа в эту базу.