gpt4 book ai didi

mysql - 为 Dockerized Django 应用程序播种 MySQL 数据库

转载 作者:行者123 更新时间:2023-11-29 06:01:55 24 4
gpt4 key购买 nike

我的任务是为 Django 应用程序的开发人员创建 Docker 的点击按钮样式,以进行本地开发。

我将 docker-compose 与我的 Docker Hub 上的私有(private)存储库结合使用,并且运行良好。

除了应用没有默认数据。开发人员已要求使用完整的产品转储,而不是带有 loaddata 的固定装置。

因此我基于这个Dockerfile构建了一个容器

FROM python:2.7

COPY . /opt/mysite.com
WORKDIR /opt/mysite.com

ENV WAITFORIT_VERSION="v1.3.1"
RUN wget -q -O /usr/local/bin/waitforit https://github.com/maxcnunes/waitforit/releases/download/$WAITFORIT_VERSION/waitforit-linux_amd64 \
&& chmod +x /usr/local/bin/waitforit

RUN curl -sL https://deb.nodesource.com/setup_6.x | bash -
RUN apt-get -y update && apt-get -y install mysql-client nodejs

RUN pip install -r requirements/local.txt

RUN npm install
RUN ./node_modules/.bin/babel-node ./node_modules/.bin/webpack

CMD waitforit -full-connection=tcp://mysql:3306 -timeout=60 -debug && mysql -u root -h mysql --password=**** mysite_develop < prod.sql && /bin/bash -c "source /opt/mysite.com/env.local && python manage.py collectstatic --noinput && python /opt/mysite.com/manage.py runserver 0.0.0.0:5000"

除了在容器启动后需要很长时间才能看到 localhost:5000 之外,一切正常。

因此我开始investigate data-only 容器,但我想知道当我将该容器推送到 Docker hub 时会发生什么?是否可以使用从 docker-compose 烘焙的 mysql 数据提取它?

如果没有,那我该如何修复上面的 Dockerfile

最佳答案

MySQL(以及类似 Percona Server 的变体)提供了一种工具,用于在第一个容器启动时为数据库播种,这在 docker hub page 的“初始化新实例”部分中有所描述。 .

When a container is started for the first time, a new database with the specified name will be created and initialized with the provided configuration variables. Furthermore, it will execute files with extensions .sh, .sql and .sql.gz that are found in /docker-entrypoint-initdb.d. Files will be executed in alphabetical order. You can easily populate your mysql services by mounting a SQL dump into that directory and provide custom images with contributed data. SQL files will be imported by default to the database specified by the MYSQL_DATABASE variable.

使用这种技术的 Dockerfile 看起来像

FROM mysql:8
COPY seed-data.sql /docker-entrypoint-initdb.d/

注意:目录结尾的斜线很重要。

当您docker 运行 这个图像时,docker 将创建容器,docker-entrypoint.sh将执行 sql 脚本,然后容器将准备好提供数据。

数据将在容器重启后持续存在——种子数据和后续修改。

您可以重用容器以缩短启动时间 - 后续容器启动将不需要初始化数据库或播种数据。当您需要原始数据时,删除容器并再次docker run 镜像。

删除容器时,请记住删除包含数据库数据的 docker 卷:docker rm -v $CONTAINER_NAME

我用这个方法提供standard data用于语言/框架 POC 以及 CI/CD。初始化新数据库和植入大量数据可能需要几分钟时间,因此您需要一些逻辑来暂停自动化操作,直到您可以成功建立数据库连接。

希望这对您有所帮助。

关于mysql - 为 Dockerized Django 应用程序播种 MySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44296536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com