创建,填充和使用Docker Volumes

问题描述 投票:0回答:1

我最近几天一直在使用Docker,我希望很快就能将我的Python-MySQL webapp转移到Docker。

结果是我需要使用Docker卷并且最近被遗忘了。我可以直接创建一个卷

$ docker volume create my-vol

或者通过在docker运行调用中引用不存在的卷来间接,但我无法弄清楚如何使用我的.sql数据库文件填充这些卷,而无需通过Dockerfile中的COPY调用复制文件。

我已经尝试在包含.sql文件的目录中直接创建卷(上面提到的第一种方法),并在我的'docker run'调用中挂载包含.sql文件的目录,这会将.sql文件移动到容器中(我通过导航容器内的bash shell看到了它但是当运行连接到包含数据库的mariadb容器的mariadb容器时(如mariadb docker自述文件中所建议的那样),它只有标准数据库(information_schema,mysql, performance_schema)

如何创建包含预先存在的.sql数据库的卷?

mysql docker mariadb docker-volume
1个回答
2
投票

在docker容器中使用mariadb时,映像支持在容器的第一次启动时运行.sql文件。这允许您在数据可访问之前将数据推送到数据库中。

来自the mariadb documentation

Initializing a fresh instance

当容器第一次启动时,将创建具有指定名称的新数据库,并使用提供的配置变量进行初始化。此外,它将执行在.sh中找到的扩展名为.sql.sql.gz/docker-entrypoint-initdb.d的文件。文件将按字母顺序执行。您可以通过将SQL转储装入该目录并使用提供的数据提供自定义映像,轻松填充mariadb服务。默认情况下,SQL文件将导入到MYSQL_DATABASE变量指定的数据库中。

这意味着如果要将数据注入容器,则首次启动时。在你的Dockerfile中,COPY.sql文件放入路径/docker-entrypoint-initdb.d/myscript.sql的容器中 - 它将在您在环境变量MYSQL_DATABASE中指定的数据库上调用。

像这样:

FROM mariadb
COPY ./myscript.sql /docker-entrypoint-initdb.d/myscript.sql

然后:

docker run -e MYSQL_DATABASE=mydb mariadb

那么就存在如何管理数据库存储的问题。你基本上有两个选择:

  1. 创建与主机的卷绑定,其中mariadb存储数据库。这使您可以轻松地从主机访问数据库存储文件。

docker run的一个例子:

docker run -v /my/own/datadir:/var/lib/mysql mariadb
  1. 创建一个docker卷并将其绑定到容器中的存储位置。这将是由docker管理的卷。此卷将在重新启动容器之间保留数据。
docker volume create my_mariadb_volume
docker run -v my_mariadb_volume:/var/lib/mysql mariadb

这也包括在docs for the mariadb码头图像中。如果您打算使用此图像,我建议您从上到下阅读。

© www.soinside.com 2019 - 2024. All rights reserved.