- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望通过解释此 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/
我是一名优秀的程序员,十分优秀!