Docker 鏡像和容器的導入導出
以下都以 mysql鏡像
和 mysql容器
為例
mysql鏡像
mysql容器
一、鏡像
已經拉取好
mysql:5.6
的鏡像
root@ubuntu-VirtualBox:/# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.6 732765f8c7d2 3 days ago 257MB
導出:docker save
指令:
或
-
和-o
都表示輸出到具體檔案>
-
:表示導出的目标檔案,也可以指定到具體的目錄下,自己定就行,這裡表示目前目錄下mysql-5.6.tar
-
:表示鏡像的名稱和版本号,即上面拉取的鏡像mysql:5.6
導出成功,結果如下:
root@ubuntu-VirtualBox:/# ll
total 255452
drwxr-xr-x 4 root root 4096 8月 17 15:00 ./
drwxr-xr-x 26 root root 4096 8月 15 15:18 ../
-rw-r--r-- 1 root root 261564928 8月 17 15:00 mysql-5.6.tar
可以将tar包拷貝下來,到各個支援docker的環境運作,用以下的導入方式即可
導入:docker load
指令:
docker load < mysql-5.6.tar
或
docker load -i mysql-5.6.tar
-
和-i
都表示檔案的輸入,會将鏡像及相關中繼資料,包括tag資訊導入到新生成的鏡像中<
-
:表示要導入的目标檔案,也可以指定具體目錄下的某個檔案,這裡表示目前目錄下mysql-5.6.tar
導入成功,結果如下:
root@ubuntu-VirtualBox:/# docker load < mysql-5.6.tar
8fa655db5360: Loading layer [==================================================>] 58.48MB/58.48MB
f5741d086b76: Loading layer [==================================================>] 338.4kB/338.4kB
9f77b78f01a7: Loading layer [==================================================>] 10.44MB/10.44MB
7f33ce1066af: Loading layer [==================================================>] 4.472MB/4.472MB
1dd5f3e365cf: Loading layer [==================================================>] 1.536kB/1.536kB
e414da892acb: Loading layer [==================================================>] 41.24MB/41.24MB
2e98364e9176: Loading layer [==================================================>] 32.77kB/32.77kB
7ca570926bcb: Loading layer [==================================================>] 3.584kB/3.584kB
0a260f19ebfc: Loading layer [==================================================>] 146.5MB/146.5MB
7f2ea9fb03d6: Loading layer [==================================================>] 9.728kB/9.728kB
f0f88667dee9: Loading layer [==================================================>] 1.536kB/1.536kB
Loaded image: mysql:5.6
二、容器:容器導出之後再導入,是一個鏡像
上面的第一步我們已經拉取了鏡像,使用下面的指令運作:(設定挂載目錄和
root使用者
的密碼:
[email protected]
)
docker run -d \
-p 3306:3306 \
--name mysql \
-v /data/mysql:/data/mysql \
-v /data/mysql/conf:/etc/mysql/conf.d \
-v /data/mysql/logs:/logs \
-v /data/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=huangtuL@123 \
mysql:5.6
可以看到
root@ubuntu-VirtualBox:/# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
30abdab7b36f mysql:5.6 "docker-entrypoint.s…" 28 minutes ago Up 28 minutes 0.0.0.0:3306->3306/tcp mysql
導出:docker export
指令:
docker export mysql > mysql-container.tar
-
docker export 容器名稱或容器ID 導出的容器tar包名稱
- 将上面名稱為
的容器,導出為mysql
mysql-container.tar
-
号左邊可以是>
或容器名稱
,容器ID
号右邊是自己定義導出到哪個目錄下的那個>
tar檔案
導出成功,結果如下:
root@ubuntu-VirtualBox:/# ll
total 245516
drwxr-xr-x 4 root root 4096 8月 17 15:44 ./
drwxr-xr-x 26 root root 4096 8月 15 15:18 ../
-rw-r--r-- 1 root root 256061952 8月 17 15:45 mysql-container.tar
導入:docker import
指令:
-
docker import 導出的容器tar包 鏡像名稱:版本
導入成功,結果如下:(導入成功是一個鏡像,但是并不能完整的運作成容器,後面總結說)
root@ubuntu-VirtualBox:/# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql/container 1.0 650e8860a40c 8 seconds ago 251MB
總結:
1.鏡像導出/導入指令: docker save
/ docker load
docker save
docker load
2.容器導出/導入指令: docker export
/ docker import
docker export
docker import
注意:
1.1 使用者既可以使用 docker load 來導入鏡像存儲檔案到本地鏡像庫,也可以 使用 docker import 來導入一個容器快照到本地鏡像庫。
1.2 這兩者的差別在于容 器快照檔案将丢棄所有的曆史記錄和中繼資料資訊(即僅儲存容器當時的快照狀 态),而鏡像存儲檔案将儲存完整記錄,體積也要大。
1.3 此外,從容器快照檔案導入 時可以重新指定标簽等中繼資料資訊。
簡單來說,鏡像導出導入會保留完整的資訊,容器的導出導入不能儲存完整的資訊,即最後将容器導入并運作,也會因為相關檔案資訊缺失出現問題。
具體到底是導出鏡像還是導出容器,根據自己的情況而定。如果是容器的話,感覺把東西都配置好,然後後面的使用會更友善,但是部落客也沒有試出來,留給大家去探索吧。