Я пытаюсь создать новый образ Docker из mariadb:10.3.12
, который содержит предопределенную схему базы данных collectives
и некоторые предварительно заполненные таблицы базы данных в этой схеме.
Мой Dockerfile
объявляет два этапа:
- Первый этап - это этап построения, который отвечает за создание схемы
collectives
и импорт данных в эту схему.
- Затем второй этап должен просто скопировать каталог данных первого этапа. Следовательно, это предварительно инициализированное изображение MariaDB Docker.
А вот так выглядит Dockerfile
:
FROM mariadb:10.3.12 as builder
ENV MYSQL_ROOT_PASSWORD=abc
ENV MYSQL_DATABASE=collectives
ENV MYSQL_USER=abc
ENV MYSQL_PASSWORD=abc
ADD server.jar app.jar
ADD openjdk-11.0.2_linux-x64_bin.tar.gz /usr/lib/jvm
ADD import.sh import.sh
RUN chmod +x import.sh && ./import.sh
FROM mariadb:10.3.12
ENV MYSQL_DATABASE=collectives
ENV MYSQL_USER=abc
ENV MYSQL_PASSWORD=abc
COPY --from=builder /var/lib/mysql /var/lib/mysql
EXPOSE 3306
ENTRYPOINT ["./docker-entrypoint.sh", "mysqld", "--collation-server=utf8mb4_unicode_ci", "--character-set-server=utf8mb4", "--innodb-flush-log-at-trx-commit=0"]
Когда я строю Dockerfile
, используя
docker build -t huhu .
все на первом builder
этапе работает должным образом. Значит начинается MariaDB. Затем он создает схему collectives
. Данные импортируются скриптом import.sh
.
В import.sh
я добавил команду отладки tree /var/lib/mysql
, которая выводит содержимое /var/lib/mysql
на консоль. Результат команды:
/var/lib/mysql
|-- aria_log.00000001
|-- aria_log_control
|-- collectives
| |-- collective_partner.frm
| |-- collective_partner.ibd
| |-- db.opt
| |-- flyway_schema_history.frm
| |-- flyway_schema_history.ibd
| |-- price_record.frm
| `-- price_record.ibd
|-- ib_buffer_pool
|-- ib_logfile0
|-- ib_logfile1
|-- ibdata1
|-- multi-master.info
|-- mysql
| |-- column_stats.MYD
| |-- column_stats.MYI
| |-- column_stats.frm
| |-- columns_priv.MYD
| |-- columns_priv.MYI
| |-- columns_priv.frm
| |-- db.MYD
| |-- db.MYI
| |-- db.frm
| |-- event.MYD
| |-- event.MYI
| |-- event.frm
| |-- func.MYD
| |-- func.MYI
| |-- func.frm
| |-- general_log.CSM
| |-- general_log.CSV
| |-- general_log.frm
| |-- gtid_slave_pos.frm
| |-- gtid_slave_pos.ibd
| |-- help_category.MYD
| |-- help_category.MYI
| |-- help_category.frm
| |-- help_keyword.MYD
| |-- help_keyword.MYI
| |-- help_keyword.frm
| |-- help_relation.MYD
| |-- help_relation.MYI
| |-- help_relation.frm
| |-- help_topic.MYD
| |-- help_topic.MYI
| |-- help_topic.frm
| |-- host.MYD
| |-- host.MYI
| |-- host.frm
| |-- index_stats.MYD
| |-- index_stats.MYI
| |-- index_stats.frm
| |-- innodb_index_stats.frm
| |-- innodb_index_stats.ibd
| |-- innodb_table_stats.frm
| |-- innodb_table_stats.ibd
| |-- plugin.MYD
| |-- plugin.MYI
| |-- plugin.frm
| |-- proc.MYD
| |-- proc.MYI
| |-- proc.frm
| |-- procs_priv.MYD
| |-- procs_priv.MYI
| |-- procs_priv.frm
| |-- proxies_priv.MYD
| |-- proxies_priv.MYI
| |-- proxies_priv.frm
| |-- roles_mapping.MYD
| |-- roles_mapping.MYI
| |-- roles_mapping.frm
| |-- servers.MYD
| |-- servers.MYI
| |-- servers.frm
| |-- slow_log.CSM
| |-- slow_log.CSV
| |-- slow_log.frm
| |-- table_stats.MYD
| |-- table_stats.MYI
| |-- table_stats.frm
| |-- tables_priv.MYD
| |-- tables_priv.MYI
| |-- tables_priv.frm
| |-- time_zone.MYD
| |-- time_zone.MYI
| |-- time_zone.frm
| |-- time_zone_leap_second.MYD
| |-- time_zone_leap_second.MYI
| |-- time_zone_leap_second.frm
| |-- time_zone_name.MYD
| |-- time_zone_name.MYI
| |-- time_zone_name.frm
| |-- time_zone_transition.MYD
| |-- time_zone_transition.MYI
| |-- time_zone_transition.frm
| |-- time_zone_transition_type.MYD
| |-- time_zone_transition_type.MYI
| |-- time_zone_transition_type.frm
| |-- transaction_registry.frm
| |-- transaction_registry.ibd
| |-- user.MYD
| |-- user.MYI
| `-- user.frm
`-- performance_schema
`-- db.opt
Итак, как вы можете видеть на первом этапе, все есть. Но похоже, что COPY --from=builder /var/lib/mysql /var/lib/mysql
на втором этапе не находит те же данные в этом каталоге.
Я проверял полученное изображение Docker, используя Dive , и инструкция COPY
, по-видимому, не приводит к выполнению операции.
Может кто-нибудь сказать мне, почему Docker не копирует эти файлы на 2-й этап? Любые советы приветствуются. Спасибо.