我正在尝试使用图自动安装和运行一组链接的 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
容器,然后挂载一个持久卷,链接到它并初始化数据库,大概是作为初始fig up
. 如果我随后启动和停止容器,我不想再次运行数据库初始化步骤,只需链接到包含我之前安装的数据的数据卷容器。
我还注意到 MySQL docker 映像看起来将支持任意datadir
定义(更新入口点以直接从 MySQL 配置中读取 DATADIR 而不是假设 /var/lib/docker)。据我了解,MySQL 映像的当前定义阻止了在数据库容器中安装(并因此持久化)数据库内容。我想这可能使创建mysql_preloaded
图像成为可能,但我认为最新版本的 MySQL docker 脚本尚未被推送到 dockerhub,我不太想知道 fig 可能如何能够做到利用这种替代途径?