Где docker mysql файл сохранен в локальной системе - PullRequest
0 голосов
/ 26 апреля 2020

Я создал простое приложение React / spring-boot / mysql, которое теперь портировал в docker, включая данные, сохраняющиеся между удалениями контейнера mysql. Согласно docker -compose.yml, локальное хранилище должно быть в / var / lib / mysql, но я его там не вижу.

Это заставляет меня нервничать - где хранятся данные? Я хочу убедиться, что он находится в локальной файловой системе, а не в каком-либо контейнере, который я мог бы легко удалить.

Вот файл docker -compose.yml:

version: "3"
services:

  # Backend Service

  app-server:
    image: licensing-app
    ports:
      - "8080:8080"
    networks:
      - backend
    depends_on:
      - mysqldb
    environment:
      - "SPRING_PROFILES_ACTIVE=prod"
      - "AWS_ACCESS_KEY_ID=xxxxx"
      - "AWS_SECRET_ACCESS_KEY=xxxxxxx"

  # Frontend Service
  app-client:
    image: license_front_end
    ports:
      - "3000:80" 
    restart: always
    depends_on:
      - app-server
    networks:
      - backend 

  # Database Service (Mysql)

  mysqldb:
    image: mysql:8
    ports:
      - "3307:3306"
    environment:
        MYSQL_ROOT_PASSWORD: mypass
        MYSQL_DATABASE: license_db
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - backend

# Volumes
volumes:
  db-data:

# Networks to be created to facilitate communication between containers
networks:
  backend:

1 Ответ

1 голос
/ 26 апреля 2020

Это в Docker именованном томе. Вы не можете (*) напрямую получить к нему доступ, но он будет сохраняться при каждом запуске. Повтор docker-compose up будет повторно использовать существующий том, даже если контейнер базы данных будет удален и воссоздан; по умолчанию docker-compose down не удалит том (вам явно нужна опция --volumes).

Если вы хотите иметь возможность непосредственно просматривать файлы (и вам проще их резервное копирование) вы можете использовать вместо этого подключенный к хосту каталог хоста. В зависимости от используемой операционной системы они могут иметь различные характеристики производительности и разрешений. (В частности, в MacOS привязка монтируется очень медленно, поэтому, если вы находитесь в настройке разработки и воссоздание базы данных возможно, вы можете предпочесть именованный том, если содержимое базы данных полностью непрозрачно.)

services:
  mysqldb:
    volumes:
      # Relative or absolute path, but not a bare name
      - ./db-data:/var/lib/mysql

(*) Если вы go ковыряетесь в /var/lib/docker на собственном хосте - Linux, вы можете найти содержимое именованного тома, но это деталь реализации, и я не думаю, что на самом деле Docker дает любые гарантии стабильности относительно формата того, что хранится в этом каталоге; использование привязки - гораздо лучшая практика, чем копаться во внутренней памяти Docker.

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