什麼是映象?

解釋

既然容器是一個隔離的程序,那麼它的檔案和配置是從哪裡來的呢?您如何共享這些環境?

這就是容器映象的作用所在。容器映象是一個標準化的軟體包,它包含執行一個容器所需的所有檔案、二進位制檔案、庫和配置。

對於PostgreSQL映象,該映象將打包資料庫二進位制檔案、配置檔案和其他依賴項。對於Python Web應用程式,它將包括Python執行時、您的應用程式碼及其所有依賴項。

映象有兩個重要的原則:

  1. 映象是不可變的。一旦映象被建立,就不能被修改。您只能建立一個新映象或在其之上新增更改。

  2. 容器映象由多個層組成。每一層都代表一組檔案系統的更改,用於新增、刪除或修改檔案。

這兩個原則允許您擴充套件或新增到現有映象。例如,如果您正在構建一個 Python 應用程式,您可以從Python 映象開始,並新增額外的層來安裝您應用程式的依賴項和新增您的程式碼。這讓您能夠專注於您的應用程式,而不是 Python 本身。

查詢映象

Docker Hub 是用於儲存和分發映象的預設全球市場。它擁有超過100,000個由開發者建立的映象,您可以在本地執行它們。您可以在 Docker Desktop 中直接搜尋 Docker Hub 映象並執行它們。

Docker Hub 提供了多種 Docker 支援和認可的映象,稱為 Docker 可信內容。這些提供了完全託管的服務,或者是您構建自己映象的絕佳起點。這些包括:

例如,RedisMemcached 是一些流行的即用型 Docker 官方映象。您可以下載這些映象,並在幾秒鐘內啟動並執行這些服務。還有一些基礎映象,比如 Node.js Docker 映象,您可以將其用作起點,並新增您自己的檔案和配置。

試一試

在這個實踐中,您將學習如何使用 Docker Desktop GUI 搜尋和拉取容器映象。

搜尋並下載映象

  1. 開啟 Docker Desktop 儀表板,並在左側導航選單中選擇 Images 檢視。

    A screenshot of the Docker Desktop Dashboard showing the image view on the left sidebar
  2. 選擇 Search images to run 按鈕。如果您沒有看到它,請選擇螢幕頂部的全域性搜尋欄

    A screenshot of the Docker Desktop Dashboard showing the search ta
  3. 搜尋欄位中,輸入“welcome-to-docker”。搜尋完成後,選擇 docker/welcome-to-docker 映象。

    A screenshot of the Docker Desktop Dashboard showing the search results for the docker/welcome-to-docker image
  4. 選擇 Pull 下載映象。

瞭解映象資訊

一旦您下載了映象,您就可以透過 GUI 或 CLI 瞭解關於該映象的許多詳細資訊。

  1. 在 Docker Desktop 儀表板中,選擇 Images 檢視。

  2. 選擇 docker/welcome-to-docker 映象以開啟有關該映象的詳細資訊。

    A screenshot of the Docker Desktop Dashboard showing the images view with an arrow pointing to the docker/welcome-to-docker image
  3. 映象詳情頁面會向您展示有關映象層、映象中安裝的軟體包和庫,以及任何已發現的漏洞的資訊。

    A screenshot of the image details view for the docker/welcome-to-docker image

按照說明使用 CLI 搜尋並拉取一個 Docker 映象以檢視其層。

搜尋並下載映象

  1. 開啟一個終端,並使用 docker search 命令搜尋映象

    docker search docker/welcome-to-docker
    

    你將看到類似以下的輸出:

    NAME                       DESCRIPTION                                     STARS     OFFICIAL
    docker/welcome-to-docker   Docker image for new users getting started w…   20
    

    此輸出顯示了有關 Docker Hub 上可用相關映象的資訊。

  2. 使用 docker pull 命令拉取映象。

    docker pull docker/welcome-to-docker
    

    你將看到類似以下的輸出:

    Using default tag: latest
    latest: Pulling from docker/welcome-to-docker
    579b34f0a95b: Download complete
    d11a451e6399: Download complete
    1c2214f9937c: Download complete
    b42a2f288f4d: Download complete
    54b19e12c655: Download complete
    1fb28e078240: Download complete
    94be7e780731: Download complete
    89578ce72c35: Download complete
    Digest: sha256:eedaff45e3c78538087bdd9dc7afafac7e110061bbdd836af4104b10f10ab693
    Status: Downloaded newer image for docker/welcome-to-docker:latest
    docker.io/docker/welcome-to-docker:latest
    

    每一行代表映象中一個不同的已下載層。請記住,每一層都是一組檔案系統更改,並提供映象的功能。

瞭解映象資訊

  1. 使用 docker image ls 命令列出您已下載的映象。

    docker image ls
    

    你將看到類似以下的輸出:

    REPOSITORY                 TAG       IMAGE ID       CREATED        SIZE
    docker/welcome-to-docker   latest    eedaff45e3c7   4 months ago   29.7MB
    

    該命令顯示了您系統上當前可用的 Docker 映象列表。docker/welcome-to-docker 的總大小約為 29.7MB。

    映象大小

    這裡顯示的映象大小反映了映象的未壓縮大小,而不是層的下載大小。

  2. 使用 docker image history 命令列出映象的層

    docker image history docker/welcome-to-docker
    

    你將看到類似以下的輸出:

    IMAGE          CREATED        CREATED BY                                      SIZE      COMMENT
    648f93a1ba7d   4 months ago   COPY /app/build /usr/share/nginx/html # buil…   1.6MB     buildkit.dockerfile.v0
    <missing>      5 months ago   /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon…   0B
    <missing>      5 months ago   /bin/sh -c #(nop)  STOPSIGNAL SIGQUIT           0B
    <missing>      5 months ago   /bin/sh -c #(nop)  EXPOSE 80                    0B
    <missing>      5 months ago   /bin/sh -c #(nop)  ENTRYPOINT ["/docker-entr…   0B
    <missing>      5 months ago   /bin/sh -c #(nop) COPY file:9e3b2b63db9f8fc7…   4.62kB
    <missing>      5 months ago   /bin/sh -c #(nop) COPY file:57846632accc8975…   3.02kB
    <missing>      5 months ago   /bin/sh -c #(nop) COPY file:3b1b9915b7dd898a…   298B
    <missing>      5 months ago   /bin/sh -c #(nop) COPY file:caec368f5a54f70a…   2.12kB
    <missing>      5 months ago   /bin/sh -c #(nop) COPY file:01e75c6dd0ce317d…   1.62kB
    <missing>      5 months ago   /bin/sh -c set -x     && addgroup -g 101 -S …   9.7MB
    <missing>      5 months ago   /bin/sh -c #(nop)  ENV PKG_RELEASE=1            0B
    <missing>      5 months ago   /bin/sh -c #(nop)  ENV NGINX_VERSION=1.25.3     0B
    <missing>      5 months ago   /bin/sh -c #(nop)  LABEL maintainer=NGINX Do…   0B
    <missing>      5 months ago   /bin/sh -c #(nop)  CMD ["/bin/sh"]              0B
    <missing>      5 months ago   /bin/sh -c #(nop) ADD file:ff3112828967e8004…   7.66MB
    

    此輸出向您顯示了所有層、它們的大小以及用於建立該層的命令。

    檢視完整命令

    如果您在命令中新增 --no-trunc 標誌,您將看到完整的命令。請注意,由於輸出是表格格式,較長的命令會導致輸出變得非常難以瀏覽。

在本演練中,您搜尋並拉取了一個 Docker 映象。除了拉取 Docker 映象之外,您還了解了 Docker 映象的層。

其他資源

以下資源將幫助您瞭解更多關於探索、查詢和構建映象的資訊:

後續步驟

既然您已經瞭解了映象的基礎知識,是時候學習如何透過註冊中心分發映象了。

什麼是註冊中心?