我有一个以下运行mysql映像的docker文件。
version: '3'
services:
mysql:
image: "mysql:5.7"
container_name: "mysql"
ports:
- "6603:3306"
volumes:
- ./assets/schema.sql:/docker-entrypoint-initdb.d/init.sql
environment:
DATABASE_HOST: mysql
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: mydb
MYSQL_USER: mysql
MYSQL_PASSWORD: pass
我正在本地运行它,但是在投入生产之前我已经担心了。
如何进行数据备份?我应该继续将容器提交到图像吗?
我是docker的新手,所以想知道在通过docker部署数据库时生产中的处理方式。
答案 0 :(得分:3)
我认为您不应该将容器提交给图像。数据是由容器管理的,但不是db容器的“一部分”。如果要在两次容器重启之间存储数据,则应使用卷-这样,您将能够在主机卷上保存数据,并在该卷上运行更多mysql
个硬币容器,共享相同的数据。在其documentation-mysql
部分中介绍了如何对具有Where to Store Data
图像的卷使用。
此外,如果您要转储数据库,请参见Creating database dumps
部分中的文档。
如果您正在运行更多的数据库容器,并且想要进行转储,则应以某种方式使该过程自动化,例如作为可以访问容器的詹金斯作业,或者某些脚本作为docker主机上的cron作业运行-这全都取决于您正在使用什么工具。
答案 1 :(得分:0)
您应该添加卷以包含实际的db文件。由于某种原因,当前您只有模式,当容器崩溃时,数据将丢失。 在将卷添加为永久卷之后,可以使用标准备份方法,例如cron作业。