#docker #docker-compose #bluespice
Вопрос:
Я пытаюсь установить bluespice wiki и хотел сохранить данные за пределами контейнера. https://hub.docker.com/r/bluespice/bluespice-free
Чтобы сэкономить место на моем хосте, я хотел поместить некоторые данные в хранилище S3. Насколько я понял, у разработчика вики есть все сервисы непосредственно в контейнере (веб-сервер и т.д.)
Поэтому моя идея состояла бы в том, чтобы иметь важные данные (например, веб-сервер) на хосте и фактические файлы (фотографии, видео, сообщения) на S3. Является ли это чем-то, чего можно достичь? Если да, то как бы я лучше всего подошел к этому? В настоящее время я не понимаю, как я знаю правильные пути.
в настоящее время мой файл docker-compose выглядит следующим образом:
services:
bluespice:
container_name: Bluespice-Wiki
image: bluespice/bluespice-free:3.2
command: -H unix:///var/run/docker.sock
restart: always
volumes:
- /mnt/s3fs:/data
Это поместит все данные в хранилище 3s, а это действительно медленно и, вероятно, также не самый умный ход.
Поэтому, как я понимаю, нужно было бы создать что-то подобное:
volumes:
- <localshare>:/data/webserver
- <s3share>:/data/www/datafiles
Надеюсь, кто-нибудь поймет мою проблему 🙂
Ответ №1:
Вот демонстрация для вашего лучшего понимания:
Один раз после :
# docker-compose up -d
Вы можете использовать любой из приведенных ниже способов, чтобы узнать доступные объемы контейнеров:
# docker inspect -f '{{ .Mounts }}' <your-container-id-or-name>
# docker inspect <your-container-id-or-name> | jq --raw-output .[].Mounts
Например, у меня есть контейнер mariadb:
root@sys:/home/akshay/Documents/test2# docker inspect 00f70198a466 | jq --raw-output .[].Mounts
[
{
"Type": "volume",
"Name": "2a583fc243a9a2bb80cf45a80e5befbdc88db3b14026ff2349f80345f58c9562",
"Source": "/var/lib/docker/volumes/2a583fc243a9a2bb80cf45a80e5befbdc88db3b14026ff2349f80345f58c9562/_data",
"Destination": "/var/lib/mysql",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
]
Здесь вы можете увидеть Source:
, какой путь является фактическим на вашем хосте и Destination:
является абсолютным путем внутри вашего контейнера.
Теперь скажите, например, если вы хотите хранить в облаке, сначала остановите свой контейнер, смонтируйте внешнее хранилище на хосте, переместите/скопируйте содержимое, Source:
если это необходимо.
затем в объемах вам просто нужно указать путь, например
# creating local directory
# mkdir mysql-data
# copying contents whatever in volume
# cp -r /var/lib/docker/volumes/2a583fc243a9a2bb80cf45a80e5befbdc88db3b14026ff2349f80345f58c9562/_data mysql-data
# we copied data to directory of our interest
# instead of keeping in /var/lib/docker/volumes/...../_data
docker-compose down
внутри вашего докера-compose.yml
volumes:
# local mount
- "./mysql-data:/var/lib/mysql"
# path to your remote storage ex: upload directory
- "/path/where/s3-bucket/mounted:/var/www/somesite/uploads/"
и затем
# now we refer volumes in local directory
docker-compose up -d
Если тома недоступны, просто введите свой контейнер, как показано ниже, и узнайте абсолютный путь к каталогу, в котором вы хотели сохранить данные за пределами контейнера.
# with bash
# docker exec -it <your-container-id-or-name> bash
# or with shell
# docker exec -it <your-container-id-or-name> sh
# and then browser folders
# for example
root@sys:~# docker exec -it 00f70198a466 bash
root@00f70198a466:/# pwd
/
root@00f70198a466:/# ls
bin boot dev docker-entrypoint-initdb.d etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
root@00f70198a466:/# cd /var/lib/mysql/
root@00f70198a466:/var/lib/mysql# pwd
/var/lib/mysql
Комментарии:
1. большое вам спасибо за ваш ответ! Один, вероятно, очень простой вопрос. Мой текущий том: /mnt/s3fs:/данные -> :/данные это именованная переменная? Потому что в контейнере docker нет /данных.
2.
Absolute-path-on-host:Absolute-path-on-container
первая часть перед двоеточием предназначена для стороны хоста, а вторая часть-для стороны контейнера, это зависит от того, в каком месте вы хотите сохранить данные за пределами контейнера.:/data
не является переменной его путь3. ладно, все равно не поймешь, мой докер файл выглядит следующим образом: объемы: — /каталог локальный_диск/Вики/сведения:/данные после запуска контейнера на файлообменники это выглядит так: _ /каталог локальный_диск/Вики/данные для MySQL -> ВСП _ как же докер знаю, что в данных должны быть эти две папки?
4. Вы должны использовать каждый путь внутри томов для переопределения, вы можете проверить, что все смонтировано внутри docker, используя
df -h
после входа в docker chroot. Сначалаdocker exec -it your-container bash
, а затем внутри контейнераdf -h