[](https://hackmd.io/CHWfratfRWGz0Ykb1ShC6A) ###### tags: `教學` `Docker` `學習筆記` `Dockerfile` # Docker and Container 001 - 基本介紹、指令 [TOC] --- ## 1. Docker基本介紹 - 脈絡、用途、架構(範圍/roadmap) - Docker的特性 * Isolation:獨立性,container之間不會干擾 * Lightweight:輕量化 1. image很小。2. 運行起來很快。 * Simplicity:夠簡單 * Workflow:工作流程 * Community:社群 - Docker 是一個輕量級的虛擬化技術,屬於作業系統層虛擬化,可以讓應用程式部署在軟體容器下的工作自動化執行。Docker 的基礎是 Linux 容器(LXC)等技術。 - Docker 包括三個基本概念: 1. 映像檔(Image):Read only 1. 容器(Container):Instance from image 1. 倉庫(Registry):The same concept as Git, Store image files 2. Docker主要元素的關係  ### 特點 1. 簡化部署流程:將程式碼、環境安裝、安裝指令包成一包(程式部署包) 2. 跨平台部署:只要每個平台有docker,即可將部署包放置於其中進行部署。(藉由雲端的docker hub) 3. 建立乾淨測試環境:除了可將程式打包外,還可將資料庫打包,一起放在測試環境裡運行。   --- ## 2. 官網可以幹嘛? - [Docker官網](https://www.docker.com/get-started) - 安裝 - 操作文件 - 說明文件QA - [docker hub](https://hub.docker.com/) - lab - [docker lab](https://bday2021.play-with-docker.com/) * [{ PHILIPZ } DOCKER LAB](https://philipz.github.io/tech/2016/07/28/welcome.html) --- ## 3. 名詞解釋 - **Layer**層: 一組唯讀的檔案或指令,呈現文件系統的變化,描述如何在容器設置底層系統。層與層之間相互堆疊。 - **Image**(鏡像、映像檔): 構成容器的基礎,為一不可變的層 - **Container**容器:將一可讀寫層加在映像檔的上方,使之成為一個可獨立執行應用程式的個體。 - **Registry**登錄檔、倉庫: 可以存放與調度映像檔的地方 - **Repository**儲存庫、專案: 可相容的映像檔集合,同一應用程式的不同版本。 - 參考資料:[Docker Commands — The Ultimate Cheat Sheet](https://medium.com/hackernoon/docker-commands-the-ultimate-cheat-sheet-994ac78e2888) ### 已廢棄 > 如果看到可注意,因為實際上應該是無法運行 - [docker-machine](https://docs.docker.com/machine/) - [toolbox](https://docs.docker.com/toolbox/) --- ## 4. 常用指令 :::info {%hackmd a9dxIburRI-V97Rc892gMw %} ::: --- ## 回顧 ### Docker - [ ] docker的特點 - [ ] docker可以幹嘛? - [ ] 指令的長相 --- ## 課後複習/測驗 ### VM 與 Container 的比較與選擇 1. 考慮部署「線上環境」,VM 與 container 的選擇與比較,下列哪種描述「錯誤」? - (A) Container 啟動速度比 VM 快。 - (B) Container 記憶體使用量比 VM 小。 - (C) 若過去是使用 VM,想改用 Container 就必須使用與 VM 一樣的作業系統建置,才能確保系統運作正常。 - (D) 上述 ABC 都正確。 - (E) 上述 ABC 都「錯誤」。 :::spoiler - [題目來源](https://ithelp.ithome.com.tw/articles/10253334) - 答案是:(C) 此題目要考慮下列兩件事: 1. 「考慮部署線上環境」,因此沒有環境一致的問題,只要考慮 VM 或 container 放到線上的選擇或比較即可。 2. 因情境是「考慮部署」與「VM 與 container 的選擇與比較」,因此是在討論 guest 而不是 host。 * A 與 B 很明顯正確,container 因為少了 OS 層,當然啟動速度與記憶體使用量,都相較 VM 來的有優勢。 * C 假設過去 VM 習慣使用 Ubuntu 或是任一種 OS,現在 container 是否必須要用相同的 OS 才能正常運行(VM 跟 Container 也可以交換反過來看)?答案當然是「非必要」的,如官方 [Redis image](https://hub.docker.com/_/redis/) 就提供了 Debian 和 Alpine 等選擇,即使作業系統不一樣,只要把程式或設定做好,系統一樣能正常運作。 * Container 用起來跟 VM 很類似,但要記得它們本質是不同的。而不管 VM 或 container 都得經過調校才能發揮最大的優勢。 ::: ### Q1:列舉出Docker與虛擬主機的五個相似之處? 這是一個刁鑽的問題,大多數情況下,一開始面試官會詢問有關Docker與VM的常見問題,以逐步找出差異,但面試官可能會調整主題,以便點出VM與Docker容器相比較的類似之處。Docker與VM不盡相同,它使用Host主機的內核(Kernel),且無法啟動架構不同的作業系統。表1所示是Docker和Virtual Machine之間的五個相似之處。 * 表1 Edge Service Gateway中四種型態的大小與資源需求 :::spoiler  ::: ### Q2:Docker與虛擬機之間的差異? Docker與虛擬機的差異如圖1所示,表2所示為Docker容器與Virtual Machine之間的六個相異之處。  * ▲圖1 Docker與虛擬機之差異。 * 表2 Docker與虛擬機相異之處 :::spoiler  ::: --- ### Q18:與Docker免費社群版本相比較,Docker企業版本有哪些獨特功能? 唯有在使用Docker企業版才能使用通用控制平台(Universal Control Plane,UCP)的圖形介面來管理Docker叢集和服務,且實作以下兩項功能: - HTTP網狀式路由(Routing Mesh): 允許在多個服務之間共享相同的網路IP位址和埠號,根據客戶端的請求,UCP使用主機名稱和埠號之組合將網路流量繞送到適當的服務。 - 會話持續性(Session Stickiness): 允許在HTTP標頭中客製訊息,UCP可用於將後續請求繞送到同一服務任務,適用於需要有狀態會話的應用程式。 --- - [回到目錄](https://hackmd.io/@Hualiteq/r1lye3M3d)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up