Skip to main content

Basic

  • Docker是什麼
  • VM虛擬機與Container容器的差異
  • 為什麼使用Docker
  • 容器標準化
  • Docker架構
  • Docker名詞
  • Container容器裡面有什麼
  • 安裝Docker Desktop
  • Docker指令

Docker是什麼

-「容器」如「貨櫃」般的概念,可將不同大小及規格的貨物封裝至相同規格的貨櫃,以達到遷移及物流的便利性

  • Docker 是一個用來開發、交付、運行應用的開放平台
  • Docker 使你可以將你的應用從你的基礎建設(infrastructure) 分離出來,因此你可以更快速地交付你的軟體
  • 透過 Docker,你可以像管理應用一樣的方式來管理基礎建設

VM虛擬機與Container容器的差異

docker-d102

為什麼使用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-d103

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-basic2

安裝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