我们有许多硒测试,它们运行在我们的webapp的类似生产的设置上.问题是某些测试会影响数据库的应用程序. 是否可以拥有一个数据量或类似数据,我们可以在每次测试之前“克隆”并附加到容器中? 我们真的只需要一个可以在每次测试之前快速重新创建的MySQL数据库.偶尔我们会将模式迁移运行到该数据库. 还是有另一种方法更适合这个吗? 解决方法: 这是一个很好的问题,对于Docker来说可能是一个非常好的用例.有很多方法可以做到这一点,因为有办法备份MySQL数据库.我将在下面解释其中的一些. 但请注意,您正在进行权衡.这种方法的缺点是你的图像会变得非常大,并且需要更长的时间来拉动. 此外,您将遇到的一个问题是,大多数MySQL容器都使用卷/ var / lib / mysql(存储数据的位置).因此,销毁容器不足以清除数据 – 您还需要清除卷.因此,当您使用docker rm清除旧容器时,请传递-v标志以删除卷. 选项1:将数据构建到容器中 可以将数据构建到容器中.这样做的好处是,您的容器在每次运行时都不会花费任何时间来设置数据.对于需要很长时间设置或拆除的大数据集,这种优势变得更加重要.换句话说,“重置”该数据库几乎是即时的. 在基本层面上,我们想要这样的东西:
这里棘手的部分是创建mysql_data.tar.gz文件(它只是/ var / lib / mysql的tar.gz备份).我们可以这样做: >使用空数据库运行容器(我将使用mysql:latest here).请注意,我们正在使用命名卷,我们正在转发端口3306. $docker run -d –name my-mysql -v my-mysql-data:/ var / lib / mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD = password mysql:latest $cat backup.sql | mysql -u root -ppassword -h 127.0.0.1 $docker stop my-mysql $docker run –rm -v my-mysql-data:/ var / lib / mysql -v $(pwd):/ backup mysql:latest tar czvf /backup/mysql_data.tar.gz / var / lib / mysql 添加mysql_data.tar.gz / 如果您还没有Dockerfile,请使用第一行创建一个 从mysql:5.7 $docker build -t my-data-image:latest. $docker run -d -p 3306:3306 my-data-image:latest Docker将自动提取文件作为构建的一部分.你完成了. Dockerfile中的容器将始终包含您的干净数据.要“重置”容器,只需停止它即可.删除它用于/ var / lib / mysql的卷. 要编辑数据,请重复此过程,但在步骤1中替换现有容器.对于步骤2,进行更改.您将生成一个新的mysql_data.tar.gz,如果您愿意,可以对其进行版本控制.重建Dockerfile后,如果愿意,可以在新标记下发布它. 选项2:使用docker-entrypoint-initdb.d MySQL Docker镜像具有以下功能:当容器第一次运行时,它将在/docker-entrypoint-initdb.d中运行SQL文件.这样做的好处是它可以使用常规的MySQL转储来创建数据.缺点是数据库启动速度较慢,因为它每次都会恢复所有数据. 如果您在./backup.sql中有数据的mysqldump,则可以执行以下操作:
完成后,删除容器及其卷. 来源:https://www./content-2-259751.html
|
|