出于测试目的,我想构建一个 MySQL 容器,其中包含一个数据集。我知道挂载是可能的,并且您可以将 sql 脚本放入 init 目录以在开始时运行导入,但这不是我们想要的。所以我尝试自己构建一个,只将数据文件复制到 docker 容器中。
我使用以下 dockerfile 来构建我的容器。
FROM mysql:8.0.21
EXPOSE 3306
ARG BUILD_ID
LABEL stage=builder
LABEL build=$BUILD_ID
ENV TZ=Europe/Amsterdam
RUN apt-get update && apt-get install -y tzdata
ADD http://server.example.com/data/datafiles_2020_11_02.tar.gz /var/lib/datafile.tar.gz
RUN tar -xvzf /var/lib/datafile.tar.gz -C /var/lib/mysql && chown -R mysql.root /var/lib/mysql
#ADD initieel/* /docker-entrypoint-initdb.d/
ADD cnf/* /etc/mysql/mysql.conf.d/
这运行成功,所以之后我启动了我新构建的容器,并且在启动过程中,容器中的某些东西只会初始化一个新的数据库并将我放入 /var/lib/mysql 的所有内容都扔掉。我检查了 mysql 容器附带的自述文件,但我找不到与此相关的任何内容。
提前感谢您花时间阅读。如果我的帖子缺少任何信息,我会更新。
常见的方法是仅在需要时指定初始化。
不要
RUN tar -xvzf /var/lib/datafile.tar.gz
直接放入您的 Dockerfile,而是将其放入您添加到容器中的 shell 脚本中,例如/opt/mysql-bootstrap.sh
.然后,当您第一次在主机上创建容器时,使用该脚本运行 docker。
--rm
初始化脚本运行后将删除容器。之后,创建保持不变的容器: