为停靠的Django应用程序植入MySQL数据库
我的任务是为Django应用程序的开发人员创建一个点击按钮风格的Docker应用程序,以便进行本地开发 我正在使用为停靠的Django应用程序植入MySQL数据库,mysql,django,docker,docker-compose,Mysql,Django,Docker,Docker Compose,我的任务是为Django应用程序的开发人员创建一个点击按钮风格的Docker应用程序,以便进行本地开发 我正在使用docker compose与我的docker Hub上的私有回购相结合,它运行良好 除了应用程序没有默认数据。开发人员要求使用完整的产品转储,而不是带有loaddata的fixture 因此,我基于这个Dockerfile构建了一个容器 FROM python:2.7 COPY . /opt/mysite.com WORKDIR /opt/mysite.com ENV WAIT
docker compose
与我的docker Hub上的私有回购相结合,它运行良好
除了应用程序没有默认数据。开发人员要求使用完整的产品转储,而不是带有loaddata
的fixture
因此,我基于这个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"
来自python:2.7的
抄袭/opt/mysite.com
WORKDIR/opt/mysite.com
ENV WAITFORIT_VERSION=“v1.3.1”
运行wget-q-O/usr/local/bin/waitforithttps://github.com/maxcnunes/waitforit/releases/download/$WAITFORIT_VERSION/WAITFORIT-linux_amd64\
&&chmod+x/usr/local/bin/waitforit
运行curl-sLhttps://deb.nodesource.com/setup_6.x |猛击-
运行apt get-y更新和apt get-y安装mysql客户端nodejs
运行pip安装-r requirements/local.txt
运行npm安装
运行./node\u modules/.bin/babel节点./node\u modules/.bin/webpack
CMD waitforit-完全连接=tcp://mysql:3306 -timeout=60-debug&&mysql-u root-h mysql-password=**mysite\u develope
所有这些都可以很好地工作,只是在容器启动后需要很长时间才能看到localhost:5000
因此,我开始只使用数据
容器,但我想知道当我将该容器推到Docker hub时会发生什么?它可以从docker compose中烘焙到mysql数据中吗
如果没有,那么我如何修复上面的Dockerfile
MySQL(以及Percona Server等变体)提供了一种工具,用于在第一个容器启动时播种数据库,如中的“初始化新实例”部分所述
当容器第一次启动时,一个新的数据库
将创建指定的名称,并使用提供的
配置变量。此外,它将使用
中找到的扩展名.sh、.sql和.sql.gz
/docker入口点initdb.d。文件将按字母顺序执行
秩序。通过挂载SQL,您可以轻松地填充mysql服务
转储到该目录中,并提供自定义图像
数据。默认情况下,SQL文件将导入指定的数据库
通过MYSQL_数据库变量
使用此技术的Dockerfile将如下所示
FROM mysql:8
COPY seed-data.sql /docker-entrypoint-initdb.d/
注意:目录尾部斜杠很重要
当您运行docker
此图像时,docker将创建容器,将执行sql脚本,然后容器将准备好提供数据
数据将通过容器重新启动(种子数据和后续修改)保持
您可以重用容器以加快启动时间-后续容器启动不需要初始化数据库或为数据设定种子。
当您需要原始数据时,删除容器并再次运行图像
删除容器时,请记住删除包含db数据的docker卷:docker rm-v$container\u NAME
我使用此方法来提供语言/框架POC以及CI/CD。初始化新数据库和植入大量数据可能需要几分钟的时间,因此您需要一些逻辑来暂停自动操作,直到成功建立数据库连接
希望这对你有所帮助