Рубрики
Uncategorized

Как сохранять данные с Docker Compose

Одна проблема, которую я вижу, когда люди начинают работать с Docker, и Docker Compose — это проблема … Tagged с Docker, контейнером, DEVOPS.

Одна проблема, которую я вижу, когда люди начинают работать с Docker, и Docker Compose — проблема понимания того, какие тома докера есть и что их использование. И во многих случаях вам не нужен их, например, если у вас есть контейнер, который работает в изоляции и не имеет зависимостей, и вы не собираетесь хранить какие-либо данные, или, возможно, он подключается к внешней базе данных, что это на облако. Но в других случаях вам нужно сохранять данные на контейнере, поэтому необходимость докеренных томов. Но давайте попробуем объяснить, как они работают с простым примером.

У вас есть проект, который имеет два сервиса, одно — это приложение, которое вы создаете, например, некоторые ude.js или Python API, которые соединяются с другой службой, базой данных, базу данных, либо MongoDB или MySQL (не имеет значения для нашего примера ). Так что, возможно, ваш Docker-Compose.yml Похоже:

version: '3'
services:
  api:
    build: .
    ports:
      - 9000:9000
    command: npm run dev
    networks:
      - my-network
  mongo:
    image: mongo:4.4
    environment:
      - MONGO_INITDB_ROOT_USERNAME=root
      - MONGO_INITDB_ROOT_PASSWORD=pass
    ports:
      - '27017:27017'
    networks:
      - my-network
networks:
  my-network:
    driver: bridge

Как и оно, как только вы начнете контейнеры, все будет работать нормально, вы можете сохранить данные в базе данных, вы можете прочитать из него, и т.д… Но , самый момент, когда вы делаете Docker-Compose Down Контейнеры будут удалены Docker, и все данные будут ушел !. И это, вероятно, хорошо с вами, как вам не нужно ничего сохранять, но в другом случае, что вам нужно сделать, это использовать тома .

Привязка монтирует VS тома

Есть два способа, где вы можете создать громкость, связывать креплениями и Объемы Отказ Какой бы вы ни выберете, как только вы настроите громкость в папку, где данные хранятся в контейнере, если вы делаете Docker-Compose Down , а затем Docker-Compose up ваши данные не будут стерты, и она станет постоянный Отказ

Связывать креплениями

Крепление привязки — это тома, которые устанавливаются на путь хоста, и они могут быть изменены другими процессами вне докера. По сути, он разделяет папку с вашим хост-компьютером и контейнером, и он определяется синтаксисом : <контейнер-папка> Отказ С креплением Bind наш проект будет выглядеть так:

mongo:
    image: mongo:4.4
    ...other settings
    volumes:
      - ./db:/data/db

Так что вы увидите, что у вашего хозяина, вы увидите .db Папка, которая будет содержать все данные, хранящиеся в базе данных.

Примечание: /data/db Там, где изображение Mongodb хранит данные баз данных, это будет отличаться от других баз данных, таких как Redis, MariaDB, MySQL и т. Д.

Единственная проблема с монтажами связывания, заключается в том, что папка управляется хост-компьютером, поэтому, если вы измените разрешения на файл, или вы удалите файл, например, вы будете повреждать данные в контейнере, что может привести к ошибкам или контейнеру больше не работает.

Тома

Тома с другой стороны, живут под Docker Engine, он ведет себя более или менее, как виртуальный жесткий диск, управляемый Docker, а файлы внутри него не доступен на хост-компьютере.

Добавьте громкость в Docker-Compose довольно просто, оно похоже на крепления связывания, но с разницей, что вам нужно добавить громкость под Объемы Массив в главном Docker-Compose.yml и в конфигурации услуг вы используете синтаксис <Объемное название>: <Контейнер-путь> Например, если мы хотим хранить данные в контейнере под названием Монгодата наше Docker-Compose.yml будет выглядеть что-то вроде этого:

version: '3'
services:
  api:
    ...api configuration
  mongo:
    ...mongo configuration
    volumes:
      - mongodata:/data/db
networks:
  my-network:
    driver: bridge
volumes:
  mongodata:

Примечание, толстая кишка после Монгодата не ошибка.

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

Как я удаляю громкость?

Если вам нужно удалить громкость, для привязать крепления это просто вопрос, чтобы остановить контейнеры и удалить папку. В случае объем Вам нужно использовать команду Docker, чтобы удалить ее, но это довольно легко:

docker volume rm mongodata

Вот и все!

Бонус

Пара общих команд вы можете использовать для управления объемами с Docker:

# create a volume
docker volume create myvolume

# list volums
docker volume ls

# delete a volume
docker volume rm myvolume

Оригинал: «https://dev.to/darkmavis1980/how-to-persist-data-with-docker-compose-ik8»