Нет глупых вопросов .... Действительно !!
Ваша стратегия разумна.
На самом деле, вы можете сделать еще один шаг, автоматизировав подготовку Droplet, например, для использования контейнерно-ориентированная ОС и доступ к вашему файлу Compose. Но это не тот вопрос; -)
Я думаю, что не имеет значения, что вы используете Windows и, вероятно, не имеет большого значения; может потребоваться некоторая настройка ответа, но это все.
Проблема в том, что вам нужно переместить (или воссоздать) состояние базы данных на удаленной машине. Существует несколько способов сохранения состояния БД: в контейнере (не идеально); использование томов монтирования (хорошо), другое.
Каждый из них «подвижный», но было бы полезно, если бы вы могли добавить свой файл Compose к своему вопросу, чтобы мы могли увидеть, какой подход используется.
В полном раскрытии я не знаком с подходом, на который вы ссылались, но это не значит, что он неточен; Я просто не знаком с этим.
Обновление: docker-entrypoint-initdb.d
См .: "Инициализация экземпляра fre sh" на MySQL
Итак, любые файлы в этом каталоге запускаются для инициализации контейнера базы данных при его создании из образа.
В вашем Compose-файле вы монтируете каталог ./data
вашего хоста в этот файл. Предположительно, этот каталог содержит> = 1 файл, который выполняет запланированную инициализацию.
NB Раздел volumes: data:
в конце файла Compose представляется избыточным. Вы на самом деле используете смонтированный на хосте каталог ./data
, а не этот том.
Когда вы запускаете файл Compose в Droplet, этих файлов нет, и вам нужно будет их скопировать .
Самый простой способ сделать это - использовать scp, что дает 2 альтернативы:
Либо сохраняет каталог data
:
IP=[DROPLET-IP]
scp -r ./data root@${IP}:/data
NB Удаленное назначение /data
, а не ./data
. Вам также необходимо изменить файл Compose в Droplet (!): volumes:
- /data:/docker-entrypoint-initdb.d
Или переместите файлы прямо в /docker-entrypoint-initdb.d
scp -r ./data root@${IP}/docker-entrypointy-initdb.d
NB Now нет необходимости в отображении объема. Вы можете удалить: volumes:
- ./data:/docker-entrypoint-initdb.d
HTH!
Обновление: repro (работает)
Я использовал настройку docker-compose.yaml
, но по сути это то же самое:
version: "3.4"
services:
db:
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: mypass
MYSQL_DATABASE: mydb
ports:
- "3306:3306"
volumes:
- ${PWD}/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
restart: always
adminer:
image: adminer
restart: always
ports:
- 8080:8080
Затем mkdir ${PWD}/docker-entrypoint-initdb.d
и создал в нем файл с именем freddie.sql
:
create database if not exists frederik;
use frederik;
create table treats (
TreatID INT NOT NULL AUTO_INCREMENT,
TreatName VARCHAR(255) NOT NULL,
PRIMARY KEY (TreatId));
insert into treats (TreatName)
values
("Dried Salmon"),
("Meatballs");
Затем docker-compose rm --force && docker-compose up
Мне удалось просмотреть пользовательский интерфейс администратора (:8080
), войдите (root
| mypass
) и просмотрите базу данных frederik
: