iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 4
4
DevOps

Kubernetes 30天學習筆記系列 第 4

[Day 4] 上傳 Docker Image 到 Docker Hub

前言

在昨天介紹到 如何打造自己的Docker Container 之後,想分享如何將本機端打造好的 Docker Image 傳到 Docker Registry 上。今天學習筆記可以分成幾個部分:

  • 介紹 什麼是 Docker Registry
  • 介紹 Docker Hub
  • 將本機端的 Docker Image 上傳到 Docker Hub
  • 打造 Docker Image 的一些準則
  • 常用的 Docker Image

Docker Run 的限制

在昨天介紹到 docker run 指令,就可以讓 Docker Container 在本機上跑起來。然而,這樣 需要在每台機器上手動部署 的方式,不太適合在實際產品環境中操作。所以我們需要像 Kubernetes 這樣管理 containers 的系統來幫我們部署、管理每個 container 的狀態。也因此需要有個地方能讓 Kubernetes 隨時存取這些Docker Image,也就是 Docker Registry

什麼是 Docker Registry

Docker Registry 就像一個倉庫,裡面存放著各式各樣的 Docker Image。倉庫可以是公開的;也可以是私有的,只允許特定人員存取這些Image。Docker官方有提供一個 Docker Hub Registry ,在上面可以找到需多開源套件官方提供的 Docker Image,而接下來的操作也都會圍繞在 Docker Hub 上。

Docker Hub

Docker Hub 如同 Github。Github上 有許多的專案,每個人都可以上傳自己的專案,也可以下載別人的專案,有時也可以在某些開源專案,提問或提交自己的程式碼。同時,Github 也提供私有與公開的專案類型,如果專案不想被公開,則需要申請付費帳號。而 Docker Hub 則提供免費帳號一個私有 Repository 的 quota

Docker Login

若還沒有Docker Hub的讀者,可以先到 官網 申請帳號。

docker-hub-signup

在登入之後,可以看到如下圖的歡迎畫面

docker-hub-welcome-page

接著回到 terminal 上,輸入 docker login 指令,登入剛剛申請的帳號。由於 Docker Hub 是官方提供,若是 docker 沒有特別指定其他的 Docker Registry,登入之後的 Registry 會直接連結到 Docker Hub。

docker-loing

看到 Login Succeeded 代表登入成功。

如果是使用 MacOS 的讀者,也可以在狀態列右上角點選小鯨魚,從這裡登入。

docker-login-for-mac

登入成功後,我們就可以準備把 Docker Image 上傳到 Docker Hub 上了。

建立Docker Repository

在上傳 Docker Image 之前,我們必須先建立一個 Docker Repository。登入之後在 Docker Hub 首頁右上角可以找到 Create,點選 Create Repository

docker-hub-create-repo

可以輸入你想要的 Repository 名稱,每個 Repository 的前綴字都會是登入帳號,像筆者是 zxcvbnius/docker-demo。專案可以選擇公開或是不公開,最後按下 create按鈕 就可以提交。

docker-hub-create-repo-1

提交成功之後會看到關於這個 Repository 的基本資訊,等等我們上傳的 Docker Image 也可以在這個頁面上看到。

docker-repo-info

上傳Docker Image

在 terminal 輸入 docker image ls 找到昨天建立的 Docker Image,會發現我們還沒有給這個 Image 給一個 tag,如同底下的redis, mysql image。

docker-image-pre-tag

我們可以使用 docker tag 指令,將這個 Docker Image,標上 tag,而這個 tag 就是我們剛剛建立的 Repository,指令如下,

$ docker tag 59f3e3615488 zxcvbnius/docker-demo

docker tag 指令後面接的是 Image ID,記得替換成自己的Image ID;Repository前面也記得加上登入的帳號。

如此在重新輸入一次 docker image ls,會看到之前打包好的 Image,現在也有 repository name 與 TAG 了。

docker-image-tag

由於我們沒有指定 TAG 是哪個版本,所以會是 latest 表示最新版本。可以在 Repository 加入版本,如此,打包出來的 Docker Image,後面的 TAG 就會從 latest 變成你所指定的版本號了,可以試試以下指令。

# ex, docker tag 59f3e3615488 zxcvbnius/docker-demo:v1.0.0
$ docker tag {DOCKER_IMAGE_ID} {YOUR_ACCOUNT_NAME}/{REPOSITORY_NAME}:1.0.0

最後,使用 docker push 指令,就可以將 tag 好的 Image,上傳到指定的 Repository 囉。

$ docker push zxcvbnius/docker-demo

docker-push

最後再回到 Docker Hub 頁面上,點選 Tags ,就可以找到剛剛 push 上去的 Docker Image。

docker-image-on-docker-hub

Docker Remarks

  • 在一個 container 只運行一個 one process in one container
    在產生 Docker Image 的時候應避免把太多服務包在一起,通常一個 Docker Image 約幾百MB左右。
  • Container 中的 data 不會保存下來 All data in the container is not preserved
    當一個 container 停止運作時,存在該 container 的資料也會隨之消失。必須藉由第三方儲存服務,將內部的data保存下來,在日後學習筆記也會介紹到 Volumes,Kubernetes 會藉由 Volumes Component 將 data 保存下來。

常用的Docker Image

Docker Hub 的 Explore 頁面上可以看到目前受歡迎的 Docker Images。

docker-hub-explore

Nginx 為例,若想下載最新版的 Nginx Image,只需要在本機端輸入

$ docker pull nginx

這時再用 docker images 指令查看,就會發現本機端多了一個 Nginx 的 image ,有興趣的讀者不妨試試看。

總結

  • 希望看完今天的學習筆記之後,讀者現在也有能力能將本機端的 Docker Image上傳到 Docker Registry

  • Kubernetes 與 Docker Registry 是一個密不可分的關係,Kubernetes 所需要的 Docker Images,都可以從我們指定的 Registry 下載。

  • 雖然對於 Docker Hub 沒有太多介紹,但 Docker Hub 上的資源非常豐富。許多常在用的工具都有提供官方的 Image,以Redis為例,可以直接使用 docker pull 指令下載,無須在再自己打造一個 Image。

在對 Docker Container 有基本認識後,未來幾天的學習筆記中,會一ㄧ介紹 Kubernetes 各個功能,一起欣賞 Kubernetes 的強大之處。

參考連結


上一篇
[Day 3] 打造你的Docker containers
下一篇
[Day 5] 在 Minikube 上跑起你的 Docker Containers - Pod & kubectl 常用指令
系列文
Kubernetes 30天學習筆記30

1 則留言

0
kim_chang
iT邦新手 5 級 ‧ 2018-01-04 14:32:32

接著回到 terminal 上,輸入 docker loing 指令

你是不是打錯字了啊?! -> docker login ?

啊!沒錯!感謝提醒 XD

我要留言

立即登入留言