mysql - 具有现有数据库的 Mariadb 多阶段容器

标签 mysql docker mariadb

我需要使用现有数据库创建一个容器,并在分发它之前对其进行一些操作。
在生产中,我有一些非常大的数据库:

[root]# ls /home/db-backup/test/prepare/26_06_2020/full/
ibdata1        
ib_logfile0    
ib_logfile1    
ibtmp1         
mysql
performance_schema
my_existing_database1
my_existing_database2
my_existing_database3
我只需要发布一个容器 my_existing_database1为我的团队。
我尝试了很多 Dockerfile,但我找不到办法解决它,我不明白为什么。
这是一个简化的 Dockerfile :
FROM mariadb:latest as builder

ENV MYSQL_ALLOW_EMPTY_PASSWORD yes

# for easier debug, i will remove that in prod
RUN sed -i '/\[mysqld\]/a plugin-load-add = auth_socket.so' /etc/mysql/my.cnf

WORKDIR /initialized-db

COPY ibdata1 .
COPY mysql ./mysql
COPY performance_schema ./performance_schema
COPY my_existing_database1 ./my_existing_database1
COPY db-init.sh /docker-entrypoint-initdb.d/

RUN chown mysql:mysql . \
  && chmod 660 ibdata1 \
  && chmod +x /docker-entrypoint-initdb.d/db-init.sh

RUN ["/usr/local/bin/docker-entrypoint.sh", "mysqld", "--datadir", "/initialized-db", "--aria-log-dir-path", "/initialized-db"]

# No file named test
RUN ls /initialized-db/

FROM mariadb:latest
COPY --from=builder /initialized-db /var/lib/mysql
如您所见,我尝试执行我的脚本 db-init.sh .简化版:
#!/bin/bash
set -e -x

mysql -u root -e "CREATE USER 'test'@'%' IDENTIFIED BY 'test';"
touch /initialized-db/test
不幸的是,我的脚本没有作为文件 test 执行。未创建。
我尝试绕过 /usr/local/bin/docker-entrypoint.sh使用我自己的脚本(通过一些编辑复制/粘贴文件)但它也不起作用(用户和文件 test 未创建)。
你能帮我解决这个问题吗?

最佳答案

您最好为数据挂载一个目录,然后再分发它。
如果您必须将它与容器本身一起分发,您应该能够编辑该数据库的配置以使用自定义数据目录并使用 RUN 在其中初始化您的数据库。和 COPY .

关于mysql - 具有现有数据库的 Mariadb 多阶段容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62617982/

相关文章:

python - Django 查询计数分组依据

node.js - 为什么docker镜像太大? NodeJS 应用程序

MySQL/Maria 构建 View 将缩写与完整描述相匹配

mysql - 如何通过用户登录选择*订单?

mysql - 最后一步将 SQL 查询转换为 Rails Active Record 查询

ubuntu - Docker 容器——在旧的 java6 版本上运行新的 java8 代码

sql - mysql 查询检索每种项目类型的前 2 条记录

mysql - 如何在 mariadb 或 mysql 中创建临时表?

mysql - 如何在 Qlik Sense 上加载日期范围内的数据?

docker - 如何使用标记的中间图像进行最终构建?