# Docker 三十天筆記 https://ithelp.ithome.com.tw/articles/10238198 ## 基本介紹優點 * Docker 讓環境統一變得更容易,這有助於設計持續整合、持續部署的架構。 * 只要雲端服務或機器支援 Docker,就能運行 Docker 包裝好的服務。 * Docker 使用 Dockerfile 的純文字檔做為建置 image 的來源,這代表 Docker 實現了環境即程式碼(Infrastructure-as-code,IaC),環境資訊可以被版控系統記錄。 * 同為虛擬化技術,Docker(或指 container)的資源使用率較 VM 好,它直接跟底層共用作業系統,不需中間再隔一層作業系統虛擬層,因此啟動 container 非常快。 * Docker 應用場景橫跨開發與維運,也是 DevOps 熱門技能之一。 ## Docker 系統架構 Docker 的系統的架構主要是 Client-Server 的架構,Client 的部份稱為 Docker Client,然後 Server 的部份稱為 Docker Daemon,介紹如下: 1. Docker Daemon:用來執行管理 Docker image、啟動 container、停止 container 的 service,它是一個 long time service。並且有提供 Restful API 給使用者做操作或是顯示一些 Docker container 的狀態訊息。在 Docker 1.11 之後將 Docker Daemo 的元件拆分為 containerd、docker-containerd-shim、docker-runc… 等等的元件。因為這有點的複雜,所以對 Docker 底層想要再做進一步研究的人,可以上網查詢這些元件的關鍵字。 1. Docker Client: 使用 Restful API 連到 Docker daemon,並且提供 command line 的方式讓使用者可以操作 docker。 ## Cli 當對 Docker 原理了解清楚後,但又想在 CLI 方便管理 Docker 的話 https://github.com/jesseduffield/lazydocker ## docker search 如果想確認這個 image 是否可以下載,可以上 DockerHub 上找,或使用 docker search 指令查詢: ``` $ docker search busybox NAME DESCRIPTION STARS OFFICIAL AUTOMATED busybox Busybox base image. 1986 [OK] ... ``` 這裡有個欄位 OFFICIAL 標示 OK,代表這個 image 是官方出品有掛保證的,通常會建議使用官方的 image,相較穩定可靠。 ## 觀念重點區 `docker run = docker pull + docker create + docker start` 注意 rm -f 是發出與 docker kill 相同的 SIGKILL 信號,而不是 docker stop 的 SIGTERM docker rm -f web 加 --rm 選項可以讓它結束後自動移除,但得先用 docker stop 停止 container 才會觸發移除,那倒不如使用 docker rm -f 指令還比較直接一點。 ## Port forwarding 開放服務 Container 具備了隔離機制,因此有辦法把它當作「輕量的 VM 」使用。 今天說明的 port forwarding,可以應用在任何有開 port 提供服務的 server,如:MySQL、Redis、Memcached 等, ###### tags: `Docker`