---
# System prepended metadata

title: Docker筆記(一) 基礎概念

---

# Docker筆記(一) 基礎概念
## 前言
在我們學習現在十分熱門的K8s之前，我們必須先了解架構在K8s之下的系統層級，也就是 Docker。
## 甚麼是 虛擬化技術 ? 
在了解 Docker 前，我們先要了解甚麼是「虛擬化技術」。

虛擬化技術簡單來說就是為了讓我的程式除了在我的電腦之外也能在你的電腦的能夠執行，換句話說就是虛擬化一個環境，讓程式以為我們的環境相同，以達到在不同硬體上執行。

而虛擬化技術大致上分為兩種:
1. 虛擬機器(Virtual Machine):在一個作業系統中模擬另一個作業系統的工具(ex: Virtual box、VMware等等)
2. 容器(Container):以應用程式為中心，直接在該作業系統上虛擬化，不須再安裝另一個虛擬OS(ex: Docker)

小結: VM 最代表的工具是 Virtual Box，而 Container 最代表的工具是 Docker。


## 虛擬機(VM) V.S 容器(Docker Container) 
**選擇VM的好處**:
1. 每個應用程式 (App) 擁有獨立甚至相互不同的作業系統、環境
2. 管理 Host 的資源 (CPU、RAM、Storage) 並分配於各 VM，供 App 有效利用
3. 透過 Hypervisor 管理 VM 快照 (Snapshot)，以實踐災難恢復 (Disaster Recovery)
![](https://i.imgur.com/Zhv9DoY.jpg)

**選擇Container的好處**:
1. 相較VM輕量化，映像檔小，啟動及管理上方便快速許多。
2. 容器環境不可變，只要App能正常運作一次，不用怕之後HOST OS換系統App就不能運作。
![](https://i.imgur.com/YjYwfd0.jpg)

## Docker 安裝及基礎操作教學
官網提供 Windows、MacOS等下載環境([Docker官網下載](https://docs.docker.com/engine/install/))。

還有以下基礎操作也可以參考[嘖喂大神](https://medium.com/@VisonLi/docker-%E5%85%A5%E9%96%80-%E7%AD%86%E8%A8%98-part-2-91e4dfa2b365)的教學部落格。

## 參考資料

https://medium.com/unorthodox-paranoid/docker-tutorial-101-c3808b899ac6

https://medium.com/unorthodox-paranoid/docker-tutorial-101-c3808b899ac6

https://stackoverflow.com/questions/16047306/how-is-docker-different-from-a-virtual-machine#

https://www.inwinstack.com/2017/10/13/vm-container-difference/

https://docs.microsoft.com/zh-tw/dotnet/architecture/containerized-lifecycle/what-is-docker















