2016-11-08 206 views
0

我在我的系統上安裝了MySQL Docker鏡像,配置並啓動了一個容器,並將一個2+ GB(bz2壓縮大小)數據庫導入到它。我想打包整個容器並將其轉移到另一個系統上。如何導出/保存整個Docker容器/映像

如果我停止正在運行的容器並執行導出,它將只產生一個118MB tar.bz文件。

如果我提交我的容器到一個圖像並保存它,那也只產生一個118MB tar.bz文件。

如何導出/保存整個容器,包括MySQL數據? MySQL的圖像是383.4MB,我的修改後的圖像也是一樣的。


,我發現了一些線索:How can I backup a Docker-container with its data-volumes?


增加:目前我使用的是Ubuntu Linux操作系統的味道。

+0

您是否使用標準的MySQL映像?如果是這樣,你是否碰巧將卷映射到容器外的任何東西? – R0MANARMY

+0

我從標準的MySQL包開始,只改變了mysqld.cnf中的一個設置,以便導入我保存的數據庫。我沒有對卷映射本身做任何配置,Hy L的答案看起來不錯,我很快就會檢查。 –

+0

我也會看看[cp](https://docs.docker.com/engine/reference/commandline/cp/)命令。我還沒有試過看它是否會將數據複製出主機或不是 – R0MANARMY

回答

1
  1. 尋找到數據存儲符合您的容器(如一個sudo的用戶,您可以訪問的/ var/lib中/泊塢窗/卷/ {CONTAINER_ID},在/ var/lib中/泊塢窗/ VFS/DIR/{container_id})

  2. 將數據和容器一起移動到您想要運行的位置。

  3. 啓動容器時使用卷映射,因此您可以對其進行更多的控制。

下面是知識可以對您有所幫助:

泊塢窗卷證數據啓動卷(但根文件系統內)的外部存儲在一個容器中。

通過提供傳遞給「-v」開關參數(例如,/ dockerdata)的共享名稱,可以使用一個或多個卷創建容器。這具有在Docker配置文件夾(/ var/lib/docker)內創建表示卷內容的實體的作用。

捲上的配置數據存儲在/var/lib/docker /卷文件夾中,每個子目錄代表基於UUID的卷名稱。數據本身存儲在/var/lib/docker/vfs /目錄文件夾中(同樣基於UUID名稱)。

在任何體積的數據可以是自由瀏覽和由主機操作系統編輯和標準的Unix權限適用。

卷的使用有優點和缺點。由於數據存儲在標準文件系統中,因此可以通過操作系統對數據進行備份,複製或移入和移出。

缺點這裏是卷名稱是UUID格式,這使得與容器名稱關聯很棘手。通過提供「docker cp」命令,Docker可以讓事情變得更輕鬆,通過指定容器名稱,可以將文件和文件夾從主機目錄複製到容器目錄路徑。

Docker卷也可以與主機目錄相關聯。這再次在「-v」開關上指定,使用以冒號分隔主機和容器路徑的格式,如下所示:「-v/host:/ container」。該方法允許主機上的持久數據被容器訪問。

因此,通過使用卷選項訪問在外部存儲上創建的主機共享,可以在NFS共享或LUN上提供對外部共享存儲的訪問。此方法也可用於備份容器訪問的數據。