---
# System prepended metadata

title: Docker Notebook
tags: [note]

---

# Docker Notebook


:book: Auto-generated Table of Content
[ToC]

:memo: 參考資料
- [Docker&Docker-compose by MCL](https://hackmd.io/@eto0110/HkKyZHQUi)
- [Docker by MCL](https://codimd.mcl.math.ncu.edu.tw/1sdo-m91QemDw5nEJI0Esg)
- [Docker -- 從入門到實踐](https://philipzheng.gitbook.io/docker_practice/)
- [Docker Apache建一個hello world的Web](https://zhuanlan.zhihu.com/p/106587011)
- [使用Dockerfile建置](https://peihsinsu.gitbooks.io/docker-note-book/content/docker-build.html)
## What is Docker ?

Docker 是實作輕量級的作業系統虛擬化解決方案，現在對於這類技術有個專有名詞 容器 (Container)。 Docker 的基礎是 Linux 容器（LXC）等技術。在 LXC 的基礎上 Docker 進行了進一步的封裝，讓使用者不需要去關心容器的管理，使得操作更為簡便。使用者操作 Docker 的容器就像操作一個快速輕量級的虛擬機一樣簡單。


## Why we need Docker ?
### 虛擬化目的
**常見的虛擬化目的有：**
- 獨立的環境
    - 部分軟體一個系統只能有一個
- 硬體環境需求
    - 只有一台電腦，想要做到多個功能，如: NAT、防火牆、私有網域
    
### 傳統技術(虛擬機) v.s 虛擬化技術(容器)

| 特性 | 容器 | 虛擬機 |
|------|-----|------|
| 啟動 | 秒級 | 分鐘級 |
| 硬碟容量 | 一般為 MB | 一般為 GB|
| 效能 | 接近原生 | 比較慢 |
| 系統支援量 |單機支援上千個容器|一般幾十個|
|部署|腳本化快速部署困難|可以用腳本快速部署|

傳統虛擬化
![](https://i.imgur.com/fI10XAk.png)
Docker
![](https://i.imgur.com/2McA2pf.png)


## How does Docker work ?
### **Docker 的三個基本概念**
- **映像檔 Image**
    Docker 映像檔就是一個唯讀的模板，可以用來建立 Docker 容器。
- **容器 Container**
    Docker 利用容器來執行應用。容器是從映像檔建立的執行實例。它可以被啟動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平台。
- **倉庫 Repository**
    倉庫是集中存放映像檔檔案的場所。實際上，倉庫註冊伺服器上往往存放著多個倉庫，每個倉庫中又包含了多個映像檔，每個映像檔有不同的標籤（tag）。

### **Docker的運作模式**

```sequence
Dockerfile->Image: build
Repository->Image: pull
Image->Container: run
Image->Discard: rmi (remove image)
Container->Discard: rm (remove)
Not working container->Container: start
Container->Not working container: stop
```

![](https://i.imgur.com/BBDwwlp.png)

## Docker Command

- `docker search` :
- `docker pull` :
- `docker run` : 
- `docker ps` : process status
    - `-a` : all
- `docker rm` : remove 
    - [Docker 移除 Containers、Images、Volumes 與 Networks 的方法](https://blog.clarence.tw/2019/09/10/docker-removing-containers-images-volumes-and-networks/ )
- `docker attach` : https://joshhu.gitbooks.io/dockercommands/content/Containers/IntoContainers.html


https://yingclin.github.io/2018/docker-basic.html

