[](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
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.