天天看點

Docker 鏡像和容器的導入導出

Docker 鏡像和容器的導入導出

以下都以

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

2.容器導出/導入指令:

docker export

/

docker import

注意:

1.1 使用者既可以使用 docker load 來導入鏡像存儲檔案到本地鏡像庫,也可以 使用 docker import 來導入一個容器快照到本地鏡像庫。

1.2 這兩者的差別在于容 器快照檔案将丢棄所有的曆史記錄和中繼資料資訊(即僅儲存容器當時的快照狀 态),而鏡像存儲檔案将儲存完整記錄,體積也要大。

1.3 此外,從容器快照檔案導入 時可以重新指定标簽等中繼資料資訊。

簡單來說,鏡像導出導入會保留完整的資訊,容器的導出導入不能儲存完整的資訊,即最後将容器導入并運作,也會因為相關檔案資訊缺失出現問題。

具體到底是導出鏡像還是導出容器,根據自己的情況而定。如果是容器的話,感覺把東西都配置好,然後後面的使用會更友善,但是部落客也沒有試出來,留給大家去探索吧。

推薦我的其他文章:Docker | 删除鏡像和容器.