最近几天,我一直在使用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数据库的卷?
答案 0 :(得分:2)
在docker容器中使用mariadb时,该图像支持运行.sql
文件作为该容器首次启动的一部分。这样,您就可以在将数据访问数据库之前将其推入数据库。
初始化一个新实例
首次启动容器时,将创建一个具有指定名称的新数据库,并 使用提供的配置变量进行初始化。此外,它 将执行扩展名为
.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
然后是您要如何管理数据库存储的问题。您基本上在这里有两个选择:
使用docker run的示例:
docker run -e MYSQL_DATABASE=mydb mariadb
docker run -v /my/own/datadir:/var/lib/mysql mariadb
docs for the mariadb泊坞镜映像中也包含该内容。如果您要使用此图片,我建议您从上至下阅读。