介紹Docker技術
我們已經知道要怎麼部署Vaadin專案到Linux Server了,在部署的過程中需要安裝JRE、安裝設定資料庫、將專案使用Systemd包成服務,有沒有其他部署方式可以不用那麼麻煩呢? 本章節將介紹Docker技術,並說明如何將我們的範例專案製作成Docker映像檔(Image)以及如何透過Docker技術部署範例專案到Linux Server。
Docker是什麼?
Docker是一種虛擬化技術,在Docker容器(container)內執行程式,你可以把它想成虛擬機(VM),不過它比虛擬機更輕量,虛擬機是虛擬化硬體,而Docker是虛擬化作業系統,Docker依賴於Linux LXC技術,它讓使用者不須直接管理LXC容器,我們只需要學會使用Docker,而無須擔心底層的LXC容器的管理。
詳情可參考下列網址
為什麼要使用Docker
方便部署 - 只要一個指令,即可部署一個專案。
方便測試 - 測試專案時只要設定一次Docker設定檔,搭配CI/CD工具(如: GitHub Action),即可自動製作Docker Image,加上啟動速度快,可以方便測試每次迭代的程式。
安全 - Docker與宿主機(Host)之間是互相隔離的,在大部分的情況下,Docker容器內執行的程式是無法影響到宿主機及其他Docker容器的。
方便遷移 - 只要將Docker所需的資料移到新的機器,重新執行Docker指令,即可完成遷移。
效能- Docker的虛擬化技術是由Linux核心(Kernel)提供,效能較好。
相容性 - 幾乎可以跑在所有平臺,也意味著方便遷移。
Docker的使用限制
雖然說Docker的相容性很好,不過其實Docker Image也是會根據CPU架構(如: ARM64、X86_64)及作業系統(如: Windows、Linux)有所差異,像是給Linux使用的Image不能給Windows使用,給X86_64使用的Image不能給ARM64用,絕大部分的Docker Image都是提供Linux使用,雖然Windows可以透過WSL在Windows上執行Linux虛擬環境,不過筆者認為如果想要完整體驗Docker的功能,建議還是使用Linux。

Docker Image及Docker Container
你可以把Docker Image想像成模板(template),如果以Java來舉例的話, Image像是一個類別(class),Container像是一個實例(instance),Docker Image裡面有關於部署程式所需的資訊(如: 安裝軟體),當你執行Docker指令來啟動一個Docker Container時,Docker根據Image內的資訊來設定Docker Container供我們使用。
Docker Hub
類似於GitHub是Git的儲存庫(repository),Docker Hub是由官方提供的Docker的儲存庫(repository),你可以把你的Docker Image放到Docker Hub上供其他人拉取(pull)使用。
Last updated