2018年9月27日星期四

Docker 導覽及申請

docker logo

【應用】是為了解決某種問題而誕生,那麼 Docker 會為你 ( 你的團隊 ) 解決甚麼問題呢?

首先,要覺得 painful 才能體驗 Docker 的好,如果是 painless 的小問題跟本沒必要學 Docker。

假設,現在你是個孤獨的程序猿 / IT狗,沒錢、沒朋友、沒自信……
甚麼都沒有,也有好處……
沒有負擔,沒東西可以輸……
由零開始建立系統……


———————————速查列表 ( start ) ————————————

不想看廢話,可直接跳去 Docker 申請部份。
沒興趣、不知 Docker 是甚麼,請由頭開始看,或許變得有點想學。
———————————速查列表 ( end ) ————————————



如何解決問題︰


沒錢!


租一個幾千港元的伺服器成本都沒有!怎麼辨?沒關係,有 Google Cloud Platform ( GCP )、 Amazon Web Service ( AWS ) 及 Microsoft Azure ( Azure ),跟據用量計費,彈性調整成本,有容器( Container ) 與虛擬機器 ( Virtual Machine ) 方案選擇。別用 Hosting、自建 Server 那套舊思想,是時候擁抱 Cloud Service。

Docker 是以 Container 形式運作,下次會簡介甚麼是 Container,而 Virtual Machine 之前教學有介紹過,如果沒有 VM 知識,看本篇教學會有障礙。

雲端平台大比拼:GOOGLE VS. AMAZON VS. MICROSOFT
https://www.mile.cloud/zh-hant/cloud-comparison/

沒朋友!


朋友要互相 利用 幫忙,沒用就不是朋友,對吧?常說擁抱 Open Source,一堆連面都沒見過的熱心人士,提供各種各樣幫忙,有教學,有答案,有 Image …… 有沒有認真想過,面對面的朋友連沒見過臉的大佬都不如?

本教學則重於 Docker Image,好心人把 TomEE、Derby、OpenLDAP 及 postfix image 都建好,拿來用就 OK。

為什麼要用某某 Service 要先建立 Server?因為有 Server 才能行 Service。為甚麼不能把 Service 當 Application 用?你需要 Docker。

只需學習各 Service 知識及設定,然後用 Docker Image 當成 Application 行 Service,Docker 會解決建立 Server 時各種問題,例如電腦硬件及作業系統上差異所引致的問題,我家電腦運作正常,並不代表別人電腦運作正常。

懂 Docker 技巧,各 Server 通用,不用煩惱建立 Server 時遇到各種奇怪問題。這一點很難解釋,只要動手做一次有體驗後,沒 Docker 便活不下去,還有各種創新玩法。

沒自信! 


連自己都信不了!很好!測試為保證質量而存在,不信個人聲望,只信測試結果,能通過測試,品質有保證。

CI/ CD ( Continuous Integration / Continuous Deployment ) 持續自動測試及部署,當觸發一些特別指令,例如 commit 及 merge 後,會自動 build、test、deploy。

這個很難理解?為甚麼在自己電腦做過 build、test 及 deploy 還要再做一次?假設,你並不孤單,有一堆戰友,能保證不是豬隊友嗎?尤其在 Open Source 世界……

豬隊友每次都 commit 一堆不能運行的代碼,每次都要人手檢視?有方法肯定對方做過 build 及 test?人手 build 及 test 不會覺得浪費時間?

所以最低限度能夠自動 build 及通過測試,才做 code review,能省很多工作。deploy 看需要,不一定要自動,多一個選擇。

Docker 沒有 CI ( Continuous Integration ),只是有提供支援,例如 Gitlab CI 及 CircleCI,這次教學沒有寫……

GitLab compared to other tools
https://about.gitlab.com/comparison/gitlab-vs-circleci.html

Docker 有提供 CD ( Continuous Deployment ),叫 Kubernetes ,中間有 8 個英文字,取頭尾兩個字母後,簡稱 K8s,已經是進階技術,有機會再詳述。

Kubernetes
https://kubernetes.io/

以上所有技術疊起來,就是常常掛在嘴邊的 DevOps ……
這裡就不詳述,有興趣的話,請 GOOGLE。

———————————簡易的分隔線————————————

沒有 Docker 的黑暗︰


動手做,只有做過,才有感受。

現在要用 Application server 開發及測試,還沒寫 JDNI 程式碼之前,要建立有資料的 Database,建立 TomEE Plus,更之前的,還要安裝 JDK 及 Eclipse ……

JNDI + Derby + TomEE Plus 教學
https://javatoybox.blogspot.com/2018/09/jndi-derby-tomee-plus.html#hands-on

如果用 Docker 的話……

———————————簡易的分隔線————————————

申請 Docker 帳號及下戴程式︰


沒安裝 Docker 說甚麼都是假,需要登入才可以下載 Docker 安裝程式。

Docker_1.png

不用太擔心個人資料問題,只要填一個可接收確認信的 E-mail 就可以申請。

Docker_2.png

別太興奮,在 Windows 上使用 Docker,需要 Windows 10 及開啟 hyper-V 功能,以前的 VM 教學有寫怎開啟。
沒 Windows 10,還可用 linux,本來這個技術是以 linux 起家,後來 Windows 才支援。

Frequently Asked Questions - About Windows containers
https://docs.microsoft.com/zh-tw/virtualization/windowscontainers/about/faq

Docker CE for Windows document
https://docs.docker.com/docker-for-windows/

Download "Docker CE for Windows" ( Windows 10 only )
https://store.docker.com/editions/community/docker-ce-desktop-windows

———————————簡易的分隔線————————————

安裝 Docker CE for Windows及運行測試︰


Docker_3.png

下載回來後,解壓安裝。完成後,還有貼心提示,自動開 hyper-V 功能。( 電腦底板 hyper-v 就沒法了,手動開 )

———————————簡易的分隔線————————————

使用 Kitematic 閃退,無法運行 Docker!


removeVM.png

如果之前有裝 VirtualBox、VM Player 之類,會佔用到 Hyper-V 資源,為免發生衝突,移除程式吧!

———————————簡易的分隔線————————————

Docker_4.png

重新開機後,問要不要開 service,選【是】。

Docker_5.png

成功執行!使用 Docker ID 登入。


GUI 操作版本叫 Kitematic 有機會再介紹,為減少截圖,用 Power shell 操作。

Docker_6.png

善用搜尋功能,開 Windows 10 內建 Power shell。

Docker_7.png

跟官方教學執行一次 Hello world 試試。
不要怕打 command,怕用 command 很多技術文件都看不懂。

———————————簡易的分隔線————————————

應用 Docker 的光明︰


經歷過沒 Docker 的黑暗時代,如果有 Docker 的話,能簡化到甚麼程度呢?
能把 database 及 TomEE 包裝成 Docker image 使用,其餘有 GUI 的程式,在實體電腦跑,例如 OpenJDK + eclipse。

只想看程式 Demo︰


Docker9.png

在 powershell 輸入 【docker pull integrityknight/tomee-derby:1.0.1】下載 docker image 。

docker10.png

再輸入 【docker run [option] <image:tag>】。

例如 【docker run --rm -p 8080:8080 --name mytomee integrityknight/tomee-derby:1.0.1】,運行 Server。

--rm 是 stop 後 刪除 container
-p 是 docker port 對應到 host computer 的 port 位置
--name 給 container 一個名字,方便日後 exit container

docker11.png

開啟瀏覽器,輸入網址【http://localhost:8080/TomEE-JNDI-Derby-Example/datasource.jsp】( 注意大小草英文,如果要做 Production,改成全小草英文方便用戶 )。

與自建 Server 無異,只需三步!開 docker,下載 image,運行 container,最後瀏覽結果!

停止 docker container︰


docker14.png

另外開一個 PowerShell,輸入【docker ps】查詢 container ID,container ID 是甚麼,下一篇文章再說。

查到 container ID 後,輸入【docker stop [<container ID> | <container name>]】,可停止運作,
例如 docker stop mytomee。

配合開發︰


如何把 Docker 改裝,配合開發使用?把 volume 對應到 Windows 中﹐volume 是甚麼,下一篇文章再說。

另外還有 Database 問題要解決,要把 embedded derby 改成 network server derby, derby 及 TomEE 分開兩個 container 裝,單一 server 單一任務,常聽到的 microservice 以後再說。

———————————簡易的分隔線————————————

Docker 能做更多︰


Kitematic


超長 command 不是每個人的夢想,在 Mac 及 Windows 使用的 GUI 程式。

Kitematic 官網
https://kitematic.com/

Windows Server 2016


官方在這版本中加入了 Docker 支援,以下是官方的 docker hub。
https://hub.docker.com/u/microsoft/

Kubernetes


DevOps 中更偏向 operation 那邊,看看就好,一個程序猿不需要全知全能,交 operation 辨。

k8s 官網
https://kubernetes.io/

———————————簡易的分隔線————————————

總結︰


Docker 離凡人很遠?沒有,以前說 Web,現在通街通行都 apps,不覺得未來有個叫 servs 也不出奇?跟家用電腦安裝程式一樣簡單,只不過安裝 service 在家中 NAS ( QNAP 及 Diskstation )。

試想像手機相片,回家連接 wifi 時,能自動備份到 NAS,然後有各式各樣 service 給相片打 tag 分類,再強一點,有 AI 辨認人臉,自動制成相簿,制成 database……

說起 database,謎之動作片……AI 辨認人臉……番號……分享……抽取謎片資訊……你懂吧?

下一回【Docker 基本名詞及概念 +  用 Eclipse 建立 Docker image

沒有留言:

發佈留言

設有留言驗證及審查,檢閱後,才會顯示留言。
本人惰性很高,留言或許會石沉大海。