Мне не нравится монтировать тома как ссылку на каталог хоста, поэтому я придумал шаблон для обновления докерских контейнеров с полностью управляемыми докерами контейнерами. Создание нового док-контейнера с--volumes-from <container>
предоставит новому контейнеру с обновленными изображениями общее владение управляемыми томами Docker.
docker pull mysql
docker create --volumes-from my_mysql_container [...] --name my_mysql_container_tmp mysql
my_mysql_container
Еще не сразу удалив оригинал , у вас есть возможность вернуться обратно к известному рабочему контейнеру, если в обновленном контейнере нет нужных данных или он не прошел проверку работоспособности.
На этом этапе я обычно запускаю любые скрипты резервного копирования, которые у меня есть, для контейнера, чтобы обеспечить себе сеть безопасности на случай, если что-то пойдет не так
docker stop my_mysql_container
docker start my_mysql_container_tmp
Теперь у вас есть возможность убедиться, что данные, которые вы ожидаете в новом контейнере, есть, и выполнить проверку работоспособности.
docker rm my_mysql_container
docker rename my_mysql_container_tmp my_mysql_container
Тома докеров будут храниться, пока их использует любой контейнер, поэтому вы можете безопасно удалить исходный контейнер. Как только оригинальный контейнер удален, новый контейнер может принять тезку оригинала, чтобы сделать все так же красиво, как и должно было начаться.
Есть два основных преимущества использования этого шаблона для обновления док-контейнеров. Во-первых, это устраняет необходимость монтировать тома в каталоги хостов, позволяя напрямую переносить тома в обновленные контейнеры. Во-вторых, вы никогда не окажетесь в положении, когда нет рабочего док-контейнера; поэтому, если обновление завершится неудачно, вы можете легко вернуться к тому, как оно работало раньше, снова раскрутив исходный док-контейнер.