Basic
- Docker是什麼
- VM虛擬機與Container容器的差異
- 為什麼使用Docker
- 容器標準化
- Docker架構
- Docker名詞
- Container容器裡面有什麼
- 安裝Docker Desktop
- Docker指令
Docker是什麼
-「容器」如「貨櫃」般的概念,可將不同大小及規格的貨物封裝至相同規格的貨櫃,以達到遷移及物流的便利性
- Docker 是一個用來開發、交付、運行應用的開放平台
- Docker 使你可以將你的應用從你的基礎建設(infrastructure) 分離出來,因此你可以更快速地交付你的軟體
- 透過 Docker,你可以像管理應用一樣的方式來管理基礎建設
VM虛擬機與Container容器的差異

為什麼使用Docker
- 啟用快速,在測試環境中進行自動化或手動測試及驗證
- 移植性強,可更快速的交付及部署
- 更有效利用硬體資源且有效率的虛擬化
- 應用與環境分離,解決共同開發環境問題
- 套件的版本管理,測試流程的簡化
- 原生性高(podman,openshift)
- 容器用完即刪
容器標準化
- 由 Open Container Initiative OCI 規範,包含:
- 運行時規範(runtime-spec)
- 圖像規範(image-spec)
- 分發規範(distribution-spec)
Docker架構
- Docker使用Client-Server架構
- Docker Client用戶端與 Docker Daemon守護進程對話,後者負責構建、運行和分發Container容器
- Client跟Daemon可以在同一系統上運行,也可以將 Docker Client連接到遠端的 Docker Daemon
- 用戶端和守護進程之間使用 REST API 進行溝通
- 另一個 Docker 客戶端是 Docker Compose,它允許您處理由一組容器組成的應用程序

Docker名詞
- Docker Daemon:背景常駐程式,負責監聽 Docker API request,管理 Docker 的 images、containers、networks、volumes
- Docker Client:用戶與Docker溝通的最基礎的方式,使用dockerAPI
- Docker Desktop:在Mac與Windows上安裝的應用程式,能構建出容器化應用與微服務
- Docker Registry:用來儲存 Docker images的倉庫
- Image:一種唯讀的模板,封裝了「執行特定環境所需要的資源」,在啟動 container 之後能夠使用
- Container:基於 image 所建立的執行實例(可創建,啟動,停止,刪除)
Container容器裡面有什麼
- App應用程式
- 類似linux的文件系統
- Package套件
- Environment Variable環境變數
- 網路跟端口的設定
- 執行的指令

安裝Docker Desktop
- 請到Docker官網下載Docker Desktop
- 安裝完之後用Administrator打開Powershell
> docker version
> docker
> docker run hello-world
> docker container ls -a
Docker指令
docker + <要操作的資源> + 動作
e.g.
docker image ls -a //列出所有image檔
docker image ls -h //列出image可以執行的選項
docker search flutter //搜尋跟flutter有關的image
docker pull node //下載image映像檔
docker images //ls -a跟是一樣的
docker container ls -a //正在使用image的container
docker container rm jolly_hermann //刪除container
docker rmi hello-world //刪掉image
docker build //建立image
docker container prune -f //
docker container run httpd //前台執行httpd
docker container rm -f fc74 //開另一個terminal執行砍掉上一個卡住的執行container
docker container run -d httpd //-d 代表detach後台執行httpd