在正式開始前,先來把工具跟環境安裝好~~ 簡單簡單
前置準備清單
- 一個編輯器,我使用VScode
- 安裝好Docker(window)
- 安裝好Docker(Linux/Ubuntu)
安裝好後務必用以下的指令來檢查是否安裝完成
# 查詢版本
$ docker --version # 回傳版號
$ docker version # 回傳詳細的安裝資料
注意: 務必用docker version 檢查有沒有client和server的資訊
準備好之後就可以開始學習囉
本系列文章鎖定在了解容器的觀念~~
所以要先知道為什麼需要容器?容器到底是什麼? 理解這兩個問題要先知道一個脈絡。
舉裡來說
如果我的電腦裡有兩支程式,A程式要安裝在python2上,B程式要安狀在python3上,我需要同時用這兩支程式工作,但一個作業系統無法同時運作兩個不同版本的環境,那該怎麼辦? 容器就在這時派上用場啦!容器將程式碼、執行環境、系統工具、函式庫、軟體相依性等元素獨立打包,使它能在不同環境(作業系統、雲端環境)執行,且彼此獨立不相影響。
當然要解決上述情境的問題也有其他方法~~
除了容器之外,還有虛擬機,這兩個都是很重要的虛擬化技術,而目前網路上可以找到很多文章談論這兩個技術之間的差異,所以這邊快速筆記一下(但兩者無優劣分別)。
專有名詞
- 映像檔(image): 映像檔是一個層層堆疊的檔案系統層。例如:一個映像檔可以包含一個完整的 Linux 作業系統環境,裡面僅安裝了 SSH 或使用者需要的其它應用程式。映像檔可以用來建立 Docker 容器。
- 容器(container): 容器就像是映像檔的可寫層,與維讀的映像檔組合成一個環境,便於開發所需的應用程式。容器是透過映像檔所創造的實體(instance),一個映像檔可以創造出多個不同的容器,容器間彼此獨立,透過內部網路溝通資料。
- 倉庫(repository): 倉庫是存放映像檔的地方。
建立第一個容器
首先,我嘗試用docker來產生一個容器印出一個hello from Docker!的字串就像其他新手教學一樣~~
這需要在本機端起一個指令
$ docker run hello-world
解釋一下這段過程:
預設你剛安裝完docker,所以在你的電腦裡過去沒有安裝過任何映像檔(image),但你現在要docker來幫你把一個叫hello-world的映像檔初始化,沒有東西該怎麼辦?
因此,帶出一個觀念是在docker的環境中有兩個角色,分別是Docker Client(負責接收你的指令)、Docker Server(把你的指令達成),所以Docker Server去找hello-world,發現你沒有映像檔,這時他就會連線到外面去Dockerhub(有點像Google play store或Apple sotre)找有沒有這個名子的檔案,如果找到了就把它抓回來暫存在你的電腦(Image Cache),並且實例化它,這樣你就有hello-world這個容器了。
資源
主要學習資源
Udemy - Docker and Kubernetes(author:stepehn grider)
額外參考資源
淺談輕量化的虛擬技術 - Docker容器
何謂容器(Container)
LinuxKit => Docker通吃全平臺秘密武器
https://www.ithome.com.tw/news/113898