【應用】是為了解決某種問題而誕生,那麼 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/
沒朋友!
朋友要互相
本教學則重於 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 安裝程式。
不用太擔心個人資料問題,只要填一個可接收確認信的 E-mail 就可以申請。
別太興奮,在 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及運行測試︰
下載回來後,解壓安裝。完成後,還有貼心提示,自動開 hyper-V 功能。( 電腦底板 hyper-v 就沒法了,手動開 )
———————————簡易的分隔線————————————
使用 Kitematic 閃退,無法運行 Docker!
如果之前有裝 VirtualBox、VM Player 之類,會佔用到 Hyper-V 資源,為免發生衝突,移除程式吧!
———————————簡易的分隔線————————————
重新開機後,問要不要開 service,選【是】。
成功執行!使用 Docker ID 登入。
GUI 操作版本叫 Kitematic 有機會再介紹,為減少截圖,用 Power shell 操作。
善用搜尋功能,開 Windows 10 內建 Power shell。
跟官方教學執行一次 Hello world 試試。
不要怕打 command,怕用 command 很多技術文件都看不懂。
———————————簡易的分隔線————————————
應用 Docker 的光明︰
經歷過沒 Docker 的黑暗時代,如果有 Docker 的話,能簡化到甚麼程度呢?
能把 database 及 TomEE 包裝成 Docker image 使用,其餘有 GUI 的程式,在實體電腦跑,例如 OpenJDK + eclipse。
只想看程式 Demo︰
在 powershell 輸入 【docker pull integrityknight/tomee-derby:1.0.1】下載 docker image 。
再輸入 【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
開啟瀏覽器,輸入網址【http://localhost:8080/TomEE-JNDI-Derby-Example/datasource.jsp】( 注意大小草英文,如果要做 Production,改成全小草英文方便用戶 )。
與自建 Server 無異,只需三步!開 docker,下載 image,運行 container,最後瀏覽結果!
停止 docker container︰
另外開一個 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】
沒有留言:
發佈留言
設有留言驗證及審查,檢閱後,才會顯示留言。
本人惰性很高,留言或許會石沉大海。