обучение Как работать с постоянным хранилищем (например, базами данных) в Docker



7 Answers

В версии Docker v1.0 привязка монтирования файла или каталога на главной машине может выполняться с помощью данной команды:

$ docker run -v /host:/container ...

Вышеупомянутый том можно использовать как постоянное хранилище на хосте, работающем в Docker.

docker быстрый старт

Как люди справляются с постоянным хранением ваших контейнеров Docker?

В настоящее время я использую этот подход: создайте образ, например, для PostgreSQL, а затем запустите контейнер с помощью

docker run --volumes-from c0dbc34fd631 -d app_name/postgres

ИМХО, у которого есть недостаток, что я никогда не должен (случайно) удалять контейнер «c0dbc34fd631».

Другая идея заключалась бы в том, чтобы монтировать тома хоста «-v» в контейнер, однако идентификатор пользователя в контейнере не обязательно совпадает с идентификатором пользователя с хоста, а затем разрешения могут быть испорчены.

Примечание. Вместо --volumes-from 'cryptic_id' вы также можете использовать --volumes-from my-data-container где my-data-container - это имя, которое вы назначили контейнеру только для данных, например, docker run --name my-data-container ... (см. принятый ответ)




В случае непонятного из 5 обновленного ответа, с Docker 1.9, вы можете создавать тома, которые могут существовать без привязки к определенному контейнеру, что делает шаблон «только для данных» устаревшим.

См. Контейнеры только для данных, устаревшие с docker 1.9.0? # 17798 .

Я думаю, что сторонники Docker поняли, что шаблон данных только для данных был немного конструктивным запахом и решил сделать томами отдельный объект, который может существовать без связанного с ним контейнера.




При использовании Docker Compose просто присоедините именованный том, например,

version: '2'
services:
  db:
    image: mysql:5.6
    volumes:
      - db_data:/var/lib/mysql:rw
    environment:
      MYSQL_ROOT_PASSWORD: root
volumes:
  db_data:



Если вы хотите перемещать тома вокруг, вы также должны посмотреть на Flocker .

Из README:

Flocker - это диспетчер объема данных и многоуровневый инструмент управления кластерами Docker. С его помощью вы можете управлять своими данными, используя те же инструменты, которые вы используете для своих приложений без состояния, используя возможности ZFS в Linux.

Это означает, что вы можете запускать свои базы данных, очереди и хранилища ключей в Docker и перемещать их так же легко, как и остальные приложения.




Это зависит от вашего сценария (это не подходит для производственной среды), но вот один из способов:

Создание контейнера для докеров MySQL

Этот смысл заключается в использовании каталога на вашем хосте для сохранения данных.




Я просто использую предопределенный каталог на хосте для сохранения данных для PostgreSQL. Кроме того, таким образом можно легко перенести существующие установки PostgreSQL в контейнеры Docker: https://crondev.com/persistent-postgresql-inside-docker/




Используйте Persistent Volume Claim (PVC) от Kubernetes, который является инструментом управления и планирования контейнеров Docker:

Стойкие тома

Преимущества использования Kubernetes для этой цели заключаются в следующем:

  • Вы можете использовать любое хранилище, такое как NFS или другое хранилище, и даже если узел не работает, хранилище не должно быть.
  • Более того, данные в таких томах могут быть сконфигурированы для сохранения даже после уничтожения самого контейнера - чтобы его можно было отменить, если необходимо, другим контейнером.



Related