docker-mysql文件在本地系统中的持久性在哪里



我创建了一个简单的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:

它在一个名为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

(*(如果你在原生Linux主机上的/var/lib/docker中浏览,你可以找到命名的卷内容,但这是一个实现细节,我认为Docker实际上并没有对该目录中存储的内容的格式做出任何稳定性保证;使用绑定挂载比在Docker的内部存储中四处闲逛要好得多。

最新更新