建立自己的 Docker Registry

官方已經提供了很方便的 Docker Hub,讓我們能把做好的 Docker 映像檔分享,就像我們在 GitHub 分享程式碼專案一樣,但上面的映像檔都是公開的,所以我們需要建立自己的 Docker Registry。本文最下方直接提供了安裝和測試的相關步驟。



官方直接提供了 Docker Registry 的 Docker 映像檔,直接找台有安裝 Docker 的實體機器把這個映像檔跑起來就建立好一個自己的 Docker Registry。以上圖解釋,我在140.96.101.235這台電腦上裝了 Docker 也跑了一個 Docker Registry 的 Docker 容器(映像檔執行起來的實體就叫 Docker 容器),電腦1就能把映像檔上傳至 Docker Registry,電腦2就能從 Docker Registry 下載映像檔。



而實際上,畫得更詳細一些,140.96.101.235 是一台 Linux 主機,上面跑了個 Docker 容器(裏頭執行 Docker Registry),這個 Docker 容器的 port 5000 綁定實體機器的 port 5000,所以外部連到140.96.101.235:5000 的流量就會導到這個 Docker 容器的 port 5000。另外,這個 Docker 容器將儲存映像檔的路徑,與實體機器的 /home/vagrant/docker/registry 這個資料夾同步,如此不用進入 Docker 容器就能在實體機器上看到大家上傳的映像檔,也方便管理者可以用平常備份的方式替映像檔做備份。

本月關於 Docker 的三篇文章分別說明了為何要用 Docker、如何安裝 Docker、建立私有的 Docker Registry,看完的人可以開始試看看用 Docker 複製上線專案的正式/測試環境,或是試著用 Docker 建立新技術/新框架的開發環境。

為何要用 Docker

因為工作內容比較偏向程式開發這塊,當初接觸 Docker 也是很不能了解這跟一般的虛擬機器差在哪裡,就程式部署上去就好,幹嘛那麼麻煩?仔細回想過去一些覺得很麻煩的問題,答案就呼之欲出了!

  • 想要玩個新技術,但要先裝環境和函式庫,都弄好半天又過去了,還沒玩到新技術心就涼了。
  • 上述環境在公司弄好了,回家也想要玩,又要再弄一次。
  • 上述環境不小心裝壞了,比如說 mac 上同時裝 python 2 和 python 3,搞到自己原本的環境都爛了。
  • 整個專案要在自己的電腦,測試環境跑過,在上正式環境,部署之前把環境都弄成一模一樣就飽了。
  • 安裝時都有乖乖寫安裝手冊,過了半年要裝新的環境,卻發現半年前的函式庫抓不到了。
  • 設備移機...

以上問題只要使用 VM 就可以解決了,做好第一次安裝苦工,做成映像檔,以後就是利用映像檔複製出新的 VM。

那為什麼要用 Vagrant,因為第一次安裝用 VM 還是要走一次安裝流程(找 ubuntu.iso > 安裝 > 設定),更多的時候我只是要一個純命令列的 linux 環境再加個 SDK 和 Framework,透過 Vagrant 你可以在 http://www.vagrantbox.es/ 上找到別人做好的環境,不到三分鐘就可以做你真正想要做的事情,而不是一直在裝環境。

那為什麼要用 Docker,相較於 Vagrant 實際上是建立在 VMware / VirtualBox 上的虛擬化工具,Docker 是屬於作業系統層級的虛擬化,白話就是 Docker 更加輕量化的虛擬化工具,開啟速度快,吃的資源少(一台主機能開更多個 Docker 產生的虛擬機器),而且實際用起來跟 Vagrant 一樣好用。

個人不負責任白話解釋:
  • VMware / VirtualBox:第一次安裝還是要花時間,但裝完至少匯出映像檔可以重複利用。
  • Vagrant:用官方/別人分享的映像檔快速安裝環境,實際上還是會利用 VMware / VirtualBox 建立新的 VM。
  • Docker:用官方/別人分享的映像檔快速安裝環境,而且更快,更小。不用安裝 VMware / VirtualBox。
以下圖來舉例,若我突然要用 Tomcat 來寫 Java Web 專案,直接先找別人做好的 Docker 映像檔(ubuntu + JAVA SDK + tomcat),利用映像檔產生 Docker 容器(想成是一個 VM 即可),你可以連進 Docker 容器就像用 SSH 一樣進去下指令,透過 tomcat 網頁部署 jar 檔,開發到最後還能把整個 Docker 容器再做成一個新的映像檔,其他人只要有安裝 Docker,就能馬上在自己的電腦上把環境包含你寫的 Java Web 專案跑起來!超級方便!

Docker 應用場景

接下來會試著安裝自己的 Docker Registry(想成自己的 GitHub),模擬企業內部會採用的使用模式,RD 把應用程式跟環境包成映像檔上傳至 Registry,測試/部署人員直接在 Docker Registry 下載映像檔,複製出一樣的環境。

三分鐘用 Vagrant 裝好一個 Docker

單純裝 Docker 應該不用一分鐘,因為指令下完就裝好了,我因為不想弄髒我的環境,所以這邊在做的是,在我的筆電上用 Vagrant 建立一台安裝好 Docker 的 CentOS 7 虛擬機器。

Vagrant 是一個建立在 Virtual Box 之上的工具,可以很快從無到有用指令的方式安裝好一台乾淨的 Linux,而不需要從建立虛擬機器開始,然後還要下載 Linux 映像檔來安裝。

Docker 可以想成是一個更輕量級虛擬技術(啟動速度快,耗費資源少,存放空間小),也可以是想成是虛擬化技術的 GitHub。Docker 映像檔中除了專案外,還能包含專案所需要的環境,開發人員/測試人員/維運人員透過公開或自己架設的 Docker 映像檔倉庫,同步一模一樣的專案環境,如此可以減少環境設定造成的問題,也節省分別架設開發環境/測試環境/正式環境的時間。

廢話說很多,安裝方式請直接拉到最下方。關於 Docker 應用,等到自己玩幾個 Hello World 再來獻醜。