我可以使用fig来初始化docker中的持久数据库吗?

时间:2015-01-30 01:23:27

标签: mysql docker fig

我正在尝试使用无花果自动安装和运行一组链接的docker容器。配置由运行RStudio的容器组成,该容器链接到运行MySQL的容器,这样我就可以从RStudio查询MySQL数据库。

首次运行时,我想从基础MySQL映像创建MySQL容器,并用用户和数据库填充它。从命令行,如下所示:

#Get the latest database file
wget -P /tmp http://ergast.com/downloads/f1db.sql.gz && gunzip -f /tmp/f1db.sql.gz

#Create the database container with user, password and database
docker run --name ergastdb -e MYSQL_USER=ergast -e MYSQL_ROOT_PASSWORD=mrd -e MYSQL_DATABASE=f1db -d mysql

#Populate the database
docker run -it --link=ergastdb:mysql -v /tmp:/tmp/import --rm mysql sh -c 'exec mysql -h$MYSQL_PORT_3306_TCP_ADDR -P$MYSQL_PORT_3306_TCP_PORT -uergast -pmrd f1db < /tmp/import/f1db.sql'

#Fire up RStudio and link to the MySQL db
docker run --name f1djd -p 8788:8787 --link ergastdb:db -d rocker/hadleyverse

如果我能抓住预先加载数据的数据库图像,我想像下面的fig.yml脚本可以链接这些元素吗?

gdrive:
    command: echo created
    image: busybox
    volumes:
        - "~/Google Drive/shareddata:/gdrive"

dbdata:
    image: mysql_preloaded
    environment:
        MYSQL_USER=ergast
        MYSQL_ROOT_PASSWORD=mrd
        MYSQL_DATABASE=f1db 

rstudio:
    image: rocker/hadleyverse
    links:
        - dbdata:db
    ports:
        - "8788:8787"
    volumes_from:
        - gdrive

我的问题是,我可以使用一次性无花果步骤来创建dbdata容器,然后可能挂载一个持久卷,链接到它并初始化数据库,可能是初始{{1 }}。如果我然后启动和停止容器,我不想再次运行db初始化步骤,只需链接到包含我之前安装的数据的数据卷容器。

我还注意到MySQL docker图像看起来会支持任意fig up定义(Update entrypoints to read DATADIR from the MySQL configuration directly instead of assuming /var/lib/docker)。据我了解,MySQL映像的当前定义可防止在数据库容器中安装(并因此持久化)数据库内容。我想这可能会创建一个datadir图像,但我不认为最新版本的MySQL docker脚本已经被推送到dockerhub了,我不太想到我的方式如何无花果那么可能能够利用这种替代途径吗?

2 个答案:

答案 0 :(得分:0)

一些选项:

  1. 编辑fig.yml以运行与默认图像命令/入口点不同的自定义命令。

    来自http://www.fig.sh/yml.html(示例): command: bundle exec thin -p 3000

  2. 在本地启动容器,修改它,然后将其作为新图像提交。

  3. 修改MySQL镜像docker-entrypoint.sh文件以进行自定义初始化。

    https://github.com/docker-library/mysql/blob/567028d4e177238c58760bcd69a8766a8f026e2a/5.7/docker-entrypoint.sh

答案 1 :(得分:0)

你不能只推出自己版本的MySQL泊坞窗映像吗?来自MySQL&#34;上游&#34;可在https://github.com/mysql/mysql-docker/blob/mysql-server/5.7/Dockerfile获取 如果你只是制作自己的副本,删除VOLUME行(第11行)然后你可以

docker build -t my_mysql .
docker run -d --name=empty_db my_mysql ...
# add data to the database running in the container
docker commit empty_db primed_db
docker rm -v empty_db

docker run -d --name=instance1 primed_db
docker run -d --name=instance2 primed_db

这应该让你有两个跑步&#34;相同&#34;但完全孤立的实例。