Как "объявить" тома в образе докера?

Я пишу Dockerfile для настройки изображения для тестирования веб-приложения. Я основываю его на изображении пачки / лампы ( https://github.com/tutumcloud/tutum-docker-lamp/blob/master/Dockerfile), потому что это, кажется, хорошая основа для начала.

Как часть моего dockerfile, я хочу создать базу данных mysql и настроить некоторые вещи в ней. Тем не менее, изображение пачки / лампы объявляет VOLUME ["/etc/mysql", "/var/lib/mysql" ]поэтому, если я правильно понимаю, любые изменения, внесенные в базу данных MySQL в Dockerfile, не будут сохранены.

  • Я правильно понимаю?

Если да,

  • Есть ли способ "объявить" эти тома так, чтобы эти каталоги были частью файловой системы объединения, как и все остальное?

Спасибо!

3 ответа

Решение

Вы не можете действительно объявить том, но вы можете создать свою собственную версию исходного изображения, изменив его dockerfile.

Невозможно изменить существующий контейнер, поэтому у вас есть два варианта:

  1. Возьми контейнер Tutum и построй свой вариант
  2. Управляйте сохранением контейнера пачки, используя контейнер данных.

Контейнеры данных

Создайте контейнер, который создает ссылку на том данных:

docker run -it --name dbvol -v /var/lib/mysql ubuntu env

Это может затем использоваться при запуске базы данных mysql для сохранения данных:

docker run -d --volumes-from dbvol -p 3306:3306 tutum/mysql:5.6

Данные сохраняются до тех пор, пока существует контейнер "dbvol". Его можно удалить на любом этапе:

docker rm dbvol

Ссылка:

В течение многих лет в этой проблемной области не было никаких изменений, поэтому я создал docker-copyedit в качестве обходного пути, чтобы " отменить объявление" тома путем редактирования метаданных загруженного изображения.

Другие вопросы по тегам