# Docker 實戰 1 - 五分鐘了解 Docker ## 前言 隨著框架越來越多,作業系統版本也不斷在更新,常常會出現版本不相容的情況,為了解覺這個問提,以前我們需要在電腦架設虛擬機,但是非常耗時和佔空間,所以就出現了可愛(ㄆㄚ ˋ)的小鯨魚Docker! 本篇就讓我們來認識一下Docker到底是什麼以及簡單的應用吧~ ## 什麼是Docker ### 定義 Docker是一個開放原始碼的開放平臺軟體,用於開發應用、交付應用和執行應用。目標是實作輕量級的作業系統虛擬化解決方案。 ### 好處 - 快速部署:Docker 容器具有跨平台可攜性,並且共享作業系統中的資源,它相較虛擬機更為輕量。在相同資源下,能執行容器數大約是虛擬機的 5 到 10 倍,能夠提高開發者的工作效率並節省資金。 - 版本控制和重複使用:docker可以儲存不同的版本的歷史紀錄,也可以重複使用image - 更有效率的CI/CD:網頁開發中,會有development和 production 兩種開發模式,渲染的流程會有些許不同,透過docker就可以測試和正視環境相同的production下程式會不會有問題。當然也可以搭配其他工具達成自動化部屬! ### 容器化 ![](https://hackmd.io/_uploads/SkgSnibAh.png) - 虛擬機(VM):將作業系統整個虛擬化,啟動速度久,至少40s以上 - 容器化(Container):將Library打包,不管OS問題,所以設置較為簡單,開啟時間也很快 ### 基本概念 一講到Docker,不外乎就是最重要的四個東西: Image, Container, Repository, Volumn 1. Image 映像檔:簡單來說就是打包好的東西,就像在前端網頁使用npm run build,後續再將打包好的檔案部署到伺服器上。 2. Container 容器:建立出來的實體環境,可以把容器看做是一個簡易版的 Linux 環境(包括root使用者權限、程式空間、使用者空間和網路空間等)。一個Container中可以執行多個image例如,可以把前端程式打包成一個image,再把後端程式打包成另一個image,然後放在同一個container中執行。 3. Repository 倉庫:放不同image的地方,分為公開倉庫(Public)和私有倉庫(Private)兩種形式。 - 公開倉庫就像Github可以讓大家放不同的程式碼一樣,在Docker中就是[DockerHub](https://hub.docker.com/),有些image可以從dockerhub上抓下來就像我們clone別人的github專案或是用npm install一樣 - 私有倉庫就是在本地網路內建立儲存的倉庫,可以透過下載[docker desktop](https://www.docker.com/products/docker-desktop/)看到視覺化的管理介面 4. Volumn:掌管硬碟空間與配置,與Data連接的地方,換言之就是存放東西的地方,舉例來說,將postgreslq資料庫打包成一個image到container上執行,使用者在資料庫新增一些資料後,如果我的container重新開啟會發現資料全部不見了,所以就需要一個volume將資料記錄下來,如此一來無論是突發狀況,又或是程式碼更新修改時,就不怕資料消失了! ![](https://hackmd.io/_uploads/ryFTUhWA2.png) ## 總結 我自己也是研究了很久,查閱很多不同說法和影片,甚至用docker部署專案好幾次,才慢慢理解這是一個多美妙的東西:) 總之我認為Docker也是在程式開發的路上不可或缺的一個技術,共勉之! 有興趣可以往下看 - [Docker 實戰 2 - 相關指令與Dockerfile](https://hackmd.io/ikFuYeHLRdeSM6p88_IhKA) ![](https://hackmd.io/_uploads/r1-T93-R3.png) ## 參考資料 [什麼是 Docker](https://philipzheng.gitbook.io/docker_practice/introduction/what) [淺談Docker-虛擬機器和容器的差別](https://ithelp.ithome.com.tw/m/articles/10238498) [Docker基本觀念介紹](https://www.omniwaresoft.com.tw/product-news/docker-news/docker-introduction/)