Website logo

Robert Chang

技術部落格

Docker - 推送映像檔到 DockerHub

昨天在最後推送映像檔時遇到了權限的問題,今天就來手把手帶大家把映像檔推到 DockerHub 吧!

用終端機登入 DockerHub

接著我們使用 docker login 這個指令,並輸入你的使用者名稱以及 DockerHub 的密碼

$ docker login
Username: robeeerto
Password: 輸入 DockerHub 的密碼

Login Succeeded

也有可能你會遇到下面的問題,若是沒有遇到的人可以直接跳到推送映像檔的部分。

$ docker login
Username: robeeerto
Password: 輸入 DockerHub 的密碼

Error response from daemon: Get "https://registry-1.docker.io/v2/": unauthorized: please use personal access token to login

叫你去申請個人的 Token 來進行登入,這時候我們打開 DockerHub 點擊大頭貼並進入 Account Setting。

screen shot

接著點擊左手邊的 Security 的選項,會看到畫面中有 New Access Token 的按鈕,點擊下去。

screen shot

接著填入對於這個 Token 的描述,這邊我填入的是 MyMacBook。

screen shot

點擊下 Generate 之後,畫面會有順序的告知你該如何在終端機登入 DockerHub。

screen shot

接著照著步驟在終端機依序輸入:

$ docker login -u robeeerto
Password: # 貼上產生的 Token
Login Succeeded

Logging in with your password grants your terminal complete access to your account.
For better security, log in with a limited-privilege personal access token. Learn more at https://docs.docker.com/go/access-tokens/

這時候我們就成功利用 CLI 登入了 DockerHub,終於可以來試試看推送映像檔了。

$ docker image push robeeerto/nginx:latest
The push refers to repository [docker.io/robeeerto/nginx]
b539cf60d7bb: Mounted from library/nginx
bdc7a32279cc: Mounted from library/nginx
f91d0987b144: Mounted from library/nginx
3a89c8160a43: Mounted from library/nginx
e3257a399753: Mounted from library/nginx
92a4e8a3140f: Mounted from library/postgres
latest: digest: sha256:f26fbadb0acab4a21ecb4e337a326907e61fbec3... size: 1570

這邊可以注意到 Mounted from library/nginx 這段訊息,這個意思代表的是我們現在推上去的這個映像檔,雖然不存在 robeeerto 的儲存庫中,但在整個 DockerHub 內是有一模一樣的映像檔存在。

所以從 DockerHub 從另一個儲存庫 library/nginx 分享了映像檔給我們,這樣做可以大幅度的減少 DockerHub 在儲存映像檔的容量問題,同時也能加快推送的速度。

還透露了另外一個訊息就是官方映像檔並非沒有前綴,而是不顯示而已,這邊我們不就清楚的看到前綴是 library 了嗎?也代表它們隸屬於 library 這個儲存庫。

接著回到自己 DockerHub 的個人頁面,應該會看到剛剛推送上來的映像檔。

screen shot

大功告成拉!成功地出現在 DockerHub 了!

結語

今天我們把映像檔成功地推送到了 DockerHub,明天我們將來介紹映像檔的全名,或許和你想得不太一樣!

上一篇文章Docker - 映像檔的唯讀性

下一篇文章Docker - 映像檔的完全名稱以及儲存庫( Registry )