建置、標記和發佈映像檔
說明
在本指南中,您將學習以下內容
- 建置映像檔 - 根據
Dockerfile
建置映像檔的過程 - 標記映像檔 - 為映像檔命名,這也決定了映像檔可以發佈到哪裡
- 發佈映像檔 - 使用容器倉庫發佈或分享新建立映像檔的過程
建置映像檔
映像檔通常使用 Dockerfile 建置。最基本的 docker build
指令可能如下所示
docker build .
指令最後的 .
提供了建置上下文
在本指南中,您將學習以下內容
Dockerfile
建置映像檔的過程映像檔通常使用 Dockerfile 建置。最基本的 docker build
指令可能如下所示
docker build .
指令最後的 .
提供了建置上下文
使用先前的輸出,您可以使用參考的映像檔來啟動容器
docker run sha256:9924dfd9350407b3df01d1a0e1033b1e543523ce7d5d5e2c83a724480ebe8f00
這個名稱肯定不容易記住,這就是標記派上用場的地方。
標記映像檔是一種為映像檔提供易記名稱的方法。然而,映像檔的名稱有一定的結構。完整的映像檔名稱具有以下結構
[HOST[:PORT_NUMBER]/]PATH[:TAG]
HOST
:映像檔所在位置的選用倉庫主機名稱。如果未指定主機,則預設使用 Docker 的公開倉庫 docker.io
。PORT_NUMBER
:如果提供了主機名稱,則為倉庫埠號PATH
:映像檔的路徑,由以斜線分隔的元件組成。對於 Docker Hub,格式遵循 [NAMESPACE/]REPOSITORY
,其中命名空間是使用者或組織的名稱。如果未指定命名空間,則使用 library
,這是 Docker 官方映像檔的命名空間。TAG
:自訂、人類可讀的識別碼,通常用於識別映像檔的不同版本或變體。如果未指定標記,則預設使用 latest
。映像檔名稱的一些範例包括
nginx
,等同於 docker.io/library/nginx:latest
:這會從 docker.io
倉庫、library
命名空間、nginx
映像檔倉庫和 latest
標記提取映像檔。docker/welcome-to-docker
,等同於 docker.io/docker/welcome-to-docker:latest
:這會從 docker.io
倉庫、docker
命名空間、welcome-to-docker
映像檔倉庫和 latest
標記提取映像檔ghcr.io/dockersamples/example-voting-app-vote:pr-311
:這會從 GitHub Container Registry、dockersamples
命名空間、example-voting-app-vote
映像檔倉庫和 pr-311
標記提取映像檔要在建置期間標記映像檔,請新增 -t
或 --tag
旗標
docker build -t my-username/my-image .
如果您已經建置了映像檔,您可以使用 docker image tag
docker image tag my-username/my-image another-username/another-image:v1
建置並標記映像檔後,您就可以將它推送至倉庫。您可以使用 幾秒鐘內,映像檔的所有層都將被推送至倉庫。 需要驗證 您必須先通過驗證,才能將映像檔推送至倉庫。只需使用 docker login 在本實作指南中,您將使用提供的 Dockerfile 建置一個簡單的映像檔,並將其推送至 Docker Hub。 取得範例應用程式。 如果您有 Git,您可以複製範例應用程式的倉庫。否則,您可以下載範例應用程式。請選擇下列其中一個選項。 在終端機中使用以下指令來複製範例應用程式倉庫。 下載原始碼並解壓縮。 下載並安裝 現在您在 Docker Hub 上擁有一個儲存庫,接下來您可以建置映像並將其推送至儲存庫。 在範例應用程式儲存庫的根目錄中使用終端機,執行以下指令。將 例如,如果您的使用者名稱是 建置完成後,您可以使用以下指令檢視映像: 該指令將產生類似以下的輸出: 您實際上可以使用 docker image history 指令檢視歷史記錄(或映像是如何建立的)。 然後您會看到類似以下的輸出: 此輸出顯示映像的層級,突顯您新增的層級以及從基礎映像繼承的層級。 現在您已建置好映像,接下來要將映像推送至儲存庫。 使用 docker push 指令推送映像。 如果您收到 稍後片刻,您的映像就會被推送至 Docker Hub。 若要深入瞭解建置、標記和發佈映像,請瀏覽以下資源: 現在您已瞭解如何建置和發佈映像,接下來將學習如何使用 Docker 建置快取來加速建置流程。docker push
docker push my-username/my-image
設定
$ git clone https://github.com/docker/getting-started-todo-app
YOUR_DOCKER_USERNAME
替換為您的 Docker Hub 使用者名稱。$ docker build -t <YOUR_DOCKER_USERNAME>/concepts-build-image-demo .
mobywhale
,您應該執行以下指令:$ docker build -t mobywhale/concepts-build-image-demo .
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
mobywhale/concepts-build-image-demo latest 746c7e06537f 24 seconds ago 354MB
$ docker image history mobywhale/concepts-build-image-demo
IMAGE CREATED CREATED BY SIZE COMMENT
f279389d5f01 8 seconds ago CMD ["node" "./src/index.js"] 0B buildkit.dockerfile.v0
<missing> 8 seconds ago EXPOSE map[3000/tcp:{}] 0B buildkit.dockerfile.v0
<missing> 8 seconds ago WORKDIR /app 8.19kB buildkit.dockerfile.v0
<missing> 4 days ago /bin/sh -c #(nop) CMD ["node"] 0B
<missing> 4 days ago /bin/sh -c #(nop) ENTRYPOINT ["docker-entry… 0B
<missing> 4 days ago /bin/sh -c #(nop) COPY file:4d192565a7220e13… 20.5kB
<missing> 4 days ago /bin/sh -c apk add --no-cache --virtual .bui… 7.92MB
<missing> 4 days ago /bin/sh -c #(nop) ENV YARN_VERSION=1.22.19 0B
<missing> 4 days ago /bin/sh -c addgroup -g 1000 node && addu… 126MB
<missing> 4 days ago /bin/sh -c #(nop) ENV NODE_VERSION=20.12.0 0B
<missing> 2 months ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B
<missing> 2 months ago /bin/sh -c #(nop) ADD file:d0764a717d1e9d0af… 8.42MB
推送映像檔
$ docker push <YOUR_DOCKER_USERNAME>/concepts-build-image-demo
requested access to the resource is denied
(拒絕存取資源的請求)錯誤訊息,請確認您已登入,且您的 Docker 使用者名稱在映像標籤中正確無誤。其他資源
後續步驟