Как "объявить" тома в образе докера?
Я пишу Dockerfile для настройки изображения для тестирования веб-приложения. Я основываю его на изображении пачки / лампы ( https://github.com/tutumcloud/tutum-docker-lamp/blob/master/Dockerfile), потому что это, кажется, хорошая основа для начала.
Как часть моего dockerfile, я хочу создать базу данных mysql и настроить некоторые вещи в ней. Тем не менее, изображение пачки / лампы объявляет VOLUME ["/etc/mysql", "/var/lib/mysql" ]
поэтому, если я правильно понимаю, любые изменения, внесенные в базу данных MySQL в Dockerfile, не будут сохранены.
- Я правильно понимаю?
Если да,
- Есть ли способ "объявить" эти тома так, чтобы эти каталоги были частью файловой системы объединения, как и все остальное?
Спасибо!
3 ответа
Вы не можете действительно объявить том, но вы можете создать свою собственную версию исходного изображения, изменив его dockerfile.
Невозможно изменить существующий контейнер, поэтому у вас есть два варианта:
- Возьми контейнер Tutum и построй свой вариант
- Управляйте сохранением контейнера пачки, используя контейнер данных.
Контейнеры данных
Создайте контейнер, который создает ссылку на том данных:
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 в качестве обходного пути, чтобы " отменить объявление" тома путем редактирования метаданных загруженного изображения.