其它產生映像檔的方法

除了標準的使用 Dockerfile 產生映像檔的方法外,由於各種特殊需求和歷史原因,還提供了一些其它方法用以產生映像檔。

從 rootfs 壓縮包 匯入

格式:docker import [選項] <檔案>|<URL>|- [<倉庫名>[:<標籤>]]

壓縮包可以是本地檔案、遠端 Web 檔案,甚至是從標準輸入中得到。壓縮包將會在映像檔 / 目錄展開,並直接作為映像檔第一層送出。

比如我們想要建立一個 OpenVZ 的 Ubuntu 14.04 範本的映像檔:

$ docker import \
    http://download.openvz.org/template/precreated/ubuntu-14.04-x86_64-minimal.tar.gz \
    openvz/ubuntu:14.04
Downloading from http://download.openvz.org/template/precreated/ubuntu-14.04-x86_64-minimal.tar.gz
sha256:f477a6e18e989839d25223f301ef738b69621c4877600ae6467c4e5289822a79B/78.42 MB

這條指令自動下載了 ubuntu-14.04-x86_64-minimal.tar.gz 檔案,並且作為根檔案系統展開 匯入,並儲存為映像檔 openvz/ubuntu:14.04

匯入成功後,我們可以用 docker ps 看到這個 匯入的映像檔:

$ docker images openvz/ubuntu
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
openvz/ubuntu       14.04               f477a6e18e98        55 seconds ago      214.9 MB

如果我們 檢視其歷史的話,會看到描述中有 匯入的檔案連結:

$ docker history openvz/ubuntu:14.04
IMAGE               CREATED              CREATED BY          SIZE                COMMENT
f477a6e18e98        About a minute ago                       214.9 MB            Imported from http://download.openvz.org/template/precreated/ubuntu-14.04-x86_64-minimal.tar.gz

docker savedocker load

Docker 還提供了 docker loaddocker save 指令,用以將映像檔儲存為一個 tar 檔案,然後傳輸到另一個位置上,在載入進來。這是在沒有 Docker Registry 時的做法,現在已經不推薦,映像檔遷移應該直接使用 Docker Registry,無論是直接使用 Docker Hub 還是使用內網私有 Registry 都可以。

儲存映像檔

使用 docker save 指令可以將映像檔儲存為歸檔檔案。

比如我們希望儲存這個 alpine 映像檔。

$ docker images alpine
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
alpine              latest              baa5d63471ea        5 weeks ago         4.803 MB

儲存映像檔的指令為:

$ docker save alpine | gzip > alpine-latest.tar.gz

然後我們將 alpine-latest.tar.gz 檔案複製到了到了另一個機器上,可以用下面這個指令載入映像檔:

$ docker load -i alpine-latest.tar.gz
Loaded image: alpine:latest

如果我們結合這兩個指令以及 ssh 甚至 pv 的話,利用 Linux 強大的管道,我們可以寫一個指令完成從一個機器將映像檔遷移到另一個機器,並且帶進度列的功能:

docker save <映像檔名> | bzip2 | pv | ssh <使用者名稱>@<主電腦名稱> 'cat | docker load'

results matching ""

    No results matching ""