gpt4 book ai didi

mysql - 如何通过解释 docker-compose.yml 中的卷来定位备份的主机存储?

转载 作者:行者123 更新时间:2023-11-29 15:40:41 26 4
gpt4 key购买 nike

我希望通过解释此 docker-compose.yml 来定位主机存储中的数据:

version: '3'

services:
db:
image: mariadb
container_name: nextcloud-mariadb
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
restart: unless-stopped
volumes:
- db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD={password}
- MYSQL_DATABASE={database}
- MYSQL_USER={user}
- MYSQL_PASSWORD={password}
env_file:
- db.env
networks:
- nextcloud-proxy-tier

app:
image: nextcloud:fpm-alpine
container_name: nextcloud-app
restart: unless-stopped
volumes:
- nextcloud:/var/www/html
environment:
- MYSQL_HOST=db
env_file:
- db.env
depends_on:
- db
networks:
- nextcloud-proxy-tier

web:
build: ./web
container_name: nextcloud-web
restart: unless-stopped
volumes:
- nextcloud:/var/www/html:ro
environment:
- VIRTUAL_HOST={fqdn.url}
depends_on:
- app
networks:
- nextcloud-proxy-tier
- default

proxy:
build: ./proxy
container_name: nextcloud-proxy
restart: unless-stopped
ports:
- 8880:80
volumes:
- certs:/etc/nginx/certs:ro
- vhost.d:/etc/nginx/vhost.d
- html:/usr/share/nginx/html
- /var/run/docker.sock:/tmp/docker.sock:ro
networks:
- nextcloud-proxy-tier
depends_on:
- omgwtfssl

omgwtfssl:
image: paulczar/omgwtfssl
container_name: nextcloud-ssl-cert-gen
restart: "no"
volumes:
- certs:/certs
environment:
- SSL_SUBJECT=servhostname.local
- CA_SUBJECT={me@ema.il}
- SSL_KEY=/certs/servhostname.local.key
- SSL_CSR=/certs/servhostname.local.csr
- SSL_CERT=/certs/servhostname.local.crt
networks:
- nextcloud-proxy-tier

volumes:
db:
nextcloud:
certs:
vhost.d:
html:

networks:
nextcloud-proxy-tier:

当前目标:
1) 学习如何理解 db:/var/lib/mysql 语法
2) 了解此结构是否更适合一种特定的备份解决方案或另一种。

我的总体目标是设置自动备份,但我已经离开该项目太久了,以至于我很难记住我的计划是什么(为什么事情是这样构建的),并且无法找到我正在遵循的教程(这是我的第一个 Docker 项目)。

我的笔记清楚地说明了我预期的备份策略:
docker commit -p {container_id} {target_name},然后
docker save {repo_img_name} > {target_name.tar},然后
使用 Duply & Duplicity 存储异地副本。 (注:Duply 已完成 99% 设置,可以进行测试)不幸的是,根据今天的谷歌搜索,MariaDB 中的数据不会包含在 commit 创建的镜像中。

我的内存是,MariaDB 使用卷来使数据更易于访问和备份。我今天找到的大多数建议都是建议使用一个额外的容器来进行 MySQL 备份,但我很确定我所遵循的教程中规定的解决方案比这更简单/直接。我觉得我一整天都在绕圈子。

最佳答案

在典型的 Docker 设置中,唯一需要备份的重要内容是卷的内容。容器本身应该被删除并从各自的镜像中重新创建。您不需要在这里使用docker commit(或者几乎永远不需要)。

Docker 文档有 a section on backing up named volumes 。这里的基本方法是您需要运行另一个安装这些卷的容器来访问数据。 Docker Compose 通常通过添加“项目名称”(默认为当前目录名称)作为前缀来命名事物,因此您可以运行类似的内容

docker run \
-v project_db:/mnt/db \
-v project_nextcloud:/mnt/nextcloud \
...
-v $PWD:/backup \
-w /mnt \
busybox \
tar cf /backup/volumes.tar db nextcloud ...

如果您愿意打破 Docker 的抽象并且不使用非默认卷存储驱动程序,您也可以 docker volume inspect每个卷及其输出将包括其实际所在的主机路径。命名卷往往有稳定的路径。从技术上讲,这是实现细节,原则上 Docker 可以在未来的版本中更改它。

这里懒惰的、可能有效的路径是将您的备份软件指向/var/lib/docker/volumes

无论您选择哪种备份策略,请务必练习恢复它。对于您展示的项目,只需在虚拟机中的同一系统上执行它可能是一条简单的路径。我怀疑您需要运行 docker-compose up --no-start让它创建卷,然后将备份恢复到正确的路径(其他地方有元数据记录该卷存在)。

关于mysql - 如何通过解释 docker-compose.yml 中的卷来定位备份的主机存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57701156/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com