Я пытаюсь автоматизировать установку и запуск набора связанных док-контейнеров, используя рис. Конфигурация состоит из контейнера, на котором работает RStudio, связанного с контейнером, на котором работает MySQL, так что я могу запрашивать базу данных MySQL из RStudio.
При первом запуске я хотел бы создать контейнер 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
Мой вопрос в том, могу ли я использовать одноразовый шаг fig для создания контейнера dbdata
, а затем, возможно, смонтировать постоянный том, связать его и инициализировать базу данных, предположительно как часть начального fig up
. Если я затем запускаю и останавливаю контейнеры, я не хочу снова запускать этап инициализации базы данных, просто свяжусь с контейнером тома данных, который содержит данные, которые я ранее установил.
Я также заметил, что образ докера MySQL выглядит так, как будто он поддерживает произвольные определения datadir
(Обновить точки входа для чтения DATADIR напрямую из конфигурации MySQL, а не из /var/lib/docker). Насколько я понимаю, текущее определение образа MySQL предотвращает монтирование (и, следовательно, сохранение) содержимого базы данных в контейнере базы данных. Я предполагаю, что это может позволить создать образ mysql_preloaded
, но я не думаю, что последняя версия сценария docker MySQL еще не была отправлена в dockerhub, и я не могу придумать, как тогда fig сможет использовать этот альтернативный путь?