or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
![image alt](https:// "title") | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Syncing
xxxxxxxxxx
Docker 入門
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →郭柏均 (Titangene)
什麼是 Docker?
Docker 字面上的意思是「碼頭工人」,碼頭上會有打包、運送…等服務,碼頭工人 (Docker) 可快速的用貨櫃 (Container) 將貨物 (Application) 裝上船。
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →Docker 能做什麼?
建置 image,然後使用 Registry 來管理 image,再使用 Docker Engine 將 container 和包含的 App 在任意平台 (不管是實體機、虛擬機還是雲端) 上執行
為什麼要使用 Docker?
以 Node.js 為例,每個專案都需要有開發環境
傳統架構缺陷
如果把架構換成 VM 呢?
雖然較省錢,但每個專案都需維護 VM 檔案,以 VMware 為例,包括 虛擬磁碟 (.vmdk)、VM 的記憶體 (.vmem)、虛擬 BIOS (.nvram)、設定檔 (.vmx)、補充設定檔 (.vmxf)、紀錄檔 (.log)、快照 (.vmsd)、快照狀態資訊 (.vmsn)、紀錄 VM 暫停狀態 (.vmss) … 等檔案
VM 的缺點
改用 Docker 後
所以為什麼要使用 Docker?
Virtualization vs Containerization
(虛擬化技術 vs 容器化技術)
名詞解釋
虛擬化技術 (Virtualization)
常見:VirtualBox、VMWare
以往的虛擬化技術是在 Host OS 上建立虛擬環境,透過 Hypervisor 模擬一套完整的硬體環境資源 (Guest OS),目標是建立一個可以用來執行整套 OS 的沙箱獨立執行環境,所以 VM 可以建立多個獨立的環境,使用者就能 Guest OS 上安裝其他應用程式
容器化技術 (Containerization)
而容器化技術則是透過在 Host OS 上執行 Container Engine 來建立各個 Container (虛擬執行環境,直接使用 Host OS 的系統資源),每個 Container 也都是彼此獨立,但 Container 是共用相同的核心,共享系統資源
Docker 為什麼會比傳統 VM 輕量?
因為少跑了 N 個完整的 Guest OS
其實 container (容器) 和 VM 的目標是相似的,都是為了將 APP 和其依賴分離成可以在任何環境上獨立執行。另外,container 和 VM 減少了對於實體硬體的需求,無論是在成本和效益上,都可以更加有效的利用運算資源。
Docker 為什麼會比傳統 VM 輕量?
Docker with VM
Docker 部署在實體伺服器 vs 部署在 VM 中
原生硬體的效能遠遠超過 VM 的模擬硬體效能,將 Docker 直接安裝在實體伺服器的 Linux 中,一定比先安裝 VM Linux,再在此 VM 中執行 Docker 要快上許多。但企業考量的重點除了效能之外更有部署的便利性、現存系統的穩定度、整個系統的高可用性等重點,筆書建議還是將 Docker 部署在 VM 中,犧牲一點點效能,換來的是更方便的部署、更穩定的環境以及更彈性的設定,這是絕對值得的。
Docker 三個基本概念
Image (映像檔)
Container (容器)
Registry (倉庫)
Registry (倉庫)
Docker 是怎麼運作的?
安裝 Docker
詳情請參考官方的 Install Docker 文件
Play with Docker
如果你不想安裝 Docker,有另一種方式可以練習 Docker,那就是 Docker 官方提供的 Play with Docker (PWD)
進去後會看到一個倒數的時間,因為每次 PWD 會提供 4 小時的使用時間。接著只要按「+ ADD NEW INSTANCE」就可以建立一台新的 VM。
看到 shell 就可以開始練習 Docker
Hello Docker
執行
docker run hello-world
指令後,會看到下面一大串輸出:它會告訴你執行此指令都做了哪些事:
hello-world
此 image 回來。可以到 Docker Hub 看
hello-world
這個 image,裡面有官方提供產生該 image 的Dockerfile
:FROM scratch
:使用哪個 image 作為基底 (Base Image),scratch
是官方提供的空白 imageCOPY hello /
:將hello
執行檔複製到/
根目錄CMD ["/hello"]
:執行hello
此執行檔簡單來說就是在 container 裡面執行
hello
這個執行檔來列印出這堆訊息。Docker 常用指令
…etc
接下來會講的方向:titangene/docker-lamp
info
:查看 Docker 系統資訊pull
:取得 (拉取) imagelatset
版Already exists
?在 pull image 時,如果主機內已有的 image 中有某些地方相同,就不需要再 pull 一次