创建,填充和使用Docker卷

时间:2019-03-07 00:05:59

标签: mysql docker mariadb docker-volume

最近几天,我一直在使用Docker,并希望很快将我的Python-MySQL Webapp移至Docker。

必然的结果是,我需要使用Docker卷,并且最近陷入困境。我可以直接通过

创建一个卷

$ docker volume create my-vol

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

我尝试直接在包含.sql文件的目录中创建卷(上述第一种方法),并在我的“ docker run”调用中装入包含.sql文件的目录,该调用确实将.sql文件移至容器(通过浏览容器内部的bash外壳已看到它),但是当运行mariadb容器连接到包含数据库的mariadb容器(如mariadb docker自述文件中所建议)时,它只有标准数据库(information_schema ,mysql,performance_schema)

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

1 个答案:

答案 0 :(得分:2)

在docker容器中使用mariadb时,该图像支持运行.sql文件作为该容器首次启动的一部分。这样,您就可以在将数据访问数据库之前将其推入数据库。

来自the mariadb documentation

  

初始化一个新实例

     

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

这意味着如果要将数据注入到容器中,则在其首次启动时。在您的Dockerfile中,将COPY文件.sql放入路径/docker-entrypoint-initdb.d/myscript.sql的容器中-它将在您在环境变量{{1 }}。

赞:

MYSQL_DATABASE

然后:

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

然后是您要如何管理数据库存储的问题。您基本上在这里有两个选择:

  1. 创建与主机的卷绑定,mariadb将其存储在主机上。这将使您能够轻松地从主机访问数据库存储文件。

使用docker run的示例:

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

docs for the mariadb泊坞镜映像中也包含该内容。如果您要使用此图片,我建议您从上至下阅读。