# Docker 學習筆記 (一) Docker 簡介

# Docker 的問世,翻轉了人們對用環境部署與開發的習慣,學會 Docker 絕對是一項不虧本的投資

Docker 現在幾乎已經是一門顯學了。上 Devops 下至 Developer 各項軟體開發無不使用 Docker 進行開發與部屬。

究竟,Docker 是什麼呢?

今天這篇主要就是介紹什麼是 Docker,以及淺談其運作原理。

# 什麼是 Docker

我們來看一下 Wiki 的解釋:

Docker 是一個 開源 的軟體專案, 一個輕量的虛擬化技術 。讓應用程式部署在 軟體貨櫃 下的工作可以 自動化 進行,藉此在 Linux 上提供一個額外的軟體抽象層,以及作業系統虛擬化的自動管理機制。

Docker 利用 Linux 核心中的資源分離機制以及 命名空間 (namespaces),來建立獨立的 容器 (containers)。

這可以在單一 Linux 實體下運作, 避免啟動一個 虛擬機器 造成的額外負擔

簡單說就是以下這張圖

此做法有兩個優勢:

  • 從開發者的角度:

在開發階段,我們總希望有一個乾淨的隔離的環境開發專案。而唯一的做法只能是使用 虛擬機 將工作環境隔離。然而每一台虛擬機都包含著 完整 OS完整虛擬硬體層 … 等等 專案以外的工具 。這讓部署一個虛擬專案費時費勁。

Docker 在原本的作業系統之上,多加一層虛擬化容器,將服務打包起來,如此可以大大減少每一個專案虛擬化的消耗成本。另外,藉由專案的虛擬化,我們可以更輕鬆、更容易地做到 持續部署測試 ,提升專案的穩健性;而藉由 docker 虛擬化的服務,我們都可以有效並統一地管理。

  • 從部署的角度:

當專案要部署到正式環境、客戶電腦時。以往我們可能會常常碰到這樣的狀況: 明明在我電腦跑得好好的,為什麼到你電腦就不行。 這通常是因為運行環境的不同所導致。然而也正因為這個 運行環境不同 ,時常導致部署耗時耗力、而對環境設定的檢查與除錯也總是讓人挫折。

Docker 的出現,也解決了這個 部署上的問題 。我們只需要將自己寫好的 Dockerfile/image 與專案交付,目標環境只需要使用 Docker run 。即可輕鬆部署、配置好提供的專案。

# Docker 的一些概念

# 系統架構

Docker 的系統架構主要是 Client-Server 分離的。我們通常使用 Docker client 管理下達指令通知 Docker server 執行我們所想要執行的動作。而 Docker server 就是實質管理 Docker Image、執行啟動、停止 Docker Container 的 Service。

Docker 的 C-S 架構是使用 Restful API 進行溝通的。也因此我們其實可以使用 Docker Remote API 對 Docker Server 進行操作。

詳情可以查看 Docker Engine API

# 名詞概念解釋

Docker 中有兩個很重要的概念要了解: ImageContainer

# Image

所謂的 Image 我們可以看成是 .iso 這類的映像檔。Docker 需要從 image 才能啟動 container。在實務上,我們會將專案打包成 Image 之後使用此 Image 啟動此專案的 docker container;在許多場合,Dockerhub 已經有許多人提供完整服務的 Image。我們可以使用 docker pull 將 Image pull 下來使用,就像使用 git pull 那樣。

  • 自行打包 Image

自行打包 Image 有兩種方法

  1. 撰寫 Dockerfile ,使用 docker build 依據 Dockerfile 內容創建 Image。
  2. Base on container 使用 docker commit <new image name> <new tag> 創建新的 image。
  • 從 DockerHub 上 Pull 現成的 Image 使用:我們僅需要在 dockerHub 中找到自己喜歡的 image,之後使用 docker pull <image name> 即可將 image pull 下來使用。

# Container

Docker Container 是 docker 透過 image 真正執行的實體 (Instance)。每一個 instance 都是一條 process,而同一個 image 都可以啟動多個 container。每個 container 都是獨立、隔離且互不衝突,當然也不會有 A container 與 B container 衝 port 的問題。

下一篇我們將開始講解 Docker 的安裝。

Docker 學習筆記 — 安裝 Docker

Like z20240z's work