2016-02-21 55 views
0

我想創建帶有MySQL數據庫和轉儲加載集成測試的容器。每個測試應連接到一個新的容器,數據庫處於相同的狀態。它應該能夠讀取和寫入,但是當測試結束並且容器被銷燬時,所有更改都應該丟失。我正在使用官方碼頭回購的「mysql」圖片。如何使用填充數據庫爲自動化測試製作docker映像?

1)image's docs建議利用「入口點」腳本來導入您在特定文件夾上提供的任何.sql文件。據我所知,這將每次創建一個新的容器時再次導入轉儲,所以不是一個好的選擇。那是對的嗎?

2)SO answer建議使用RUN語句擴展該映像以啓動mysql服務並導入所有轉儲。這似乎是要走的路,但我不斷收到

mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

其次

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

當我運行構建,即使我可以連接到MySQL上的容器罰款原始圖像。我試着sleep 5等待mysqld服務啓動,並用'localhost'或docker-machine ip添加-h。

我該如何解決「2)」?或者,有沒有更好的方法?

回答

0

如何我以前解決這是在使用數據庫遷移工具,特別是遷飛:http://flywaydb.org/documentation/database/mysql.html

遷飛則多爲遷移而不是將數據放入它的數據庫模式,但你可以用它無論哪種方式。每當你啓動你的容器時,只需對它進行遷移,並且你的數據庫將被設置爲你想要的。它很容易使用,你也可以只使用默認的MySQL docker容器,而不用搞亂任何設置。 Flyway也有很多其他原因,比如有一種方法可以對數據庫模式進行版本控制,並且可以輕鬆地在生產數據庫上執行遷移。

使用乾淨的數據庫運行集成測試我只需要在測試之前插入一個初始數據集,然後再截斷所有表。我不確定你的數據集有多大,但我認爲這通常比每次重新啓動一個mysql容器都快。

1

如果重新播種數據是昂貴的操作的另一種選擇將被啓動/停止一Docker容器(先前與DB和種子數據建立)。幾個月前我在這篇博文中提到Integration Testing using Spring Boot, Postgres and Docker,雖然博客的重點是Postgres,但這個想法是一樣的,可以翻譯成MySQL