【學習筆記】Docker 基礎知識 & 安裝

Ray
5 min readOct 27, 2022

--

本文內容

  1. 為什麼需要Docker?Docker解決了哪些問題?
  2. Docker容器跟虛擬機有什麼差別?
  3. Docker基本組成
  4. 安裝Docker

1.為什麼需要Docker?Docker解決了哪些問題

主要是為了解決 DevOps ( 開發、運維 ) 的痛點,例如:

  • 在我的電腦可以跑,怎麼去你那就不行
  • 系統更新之後,沒辦法執行了
  • 我想佈署一個網頁,還要把Node.js、mySQL重頭開始裝,而且版本還可能裝錯
  • 要拓展很麻煩,原因同上 ( 每開一個主機就需要把環境從頭裝一次)
  • 不能夠跨平台 ( Windows上開發後,想佈署到Linux上時,就會發現環境有很大差別 )

沒有Docker之前,佈署一個網頁,要跑各種環境的安裝程序。

有了Docker之後,現在連帶在build時的整個環境都打包起來,只需要一鍵就能安裝,省去極多安裝程序,而且也不用擔心版本會錯,在這種情況下環境高度一致。解決了傳統佈署所需要的冗長程序。

2.Docker容器跟虛擬機有什麼差別?

Hypervisor:虛擬機監視器(英語:virtual machine monitor,縮寫為 VMM),是用來建立與執行虛擬機器的軟件、固件或硬件。虛擬機實現資源的隔離的方式是利用獨立的Guest OS,以及利用Hypervisor虛擬化CPU、內存、IO等設備來實現的。

Host OS 及 Guest OS:假如現在在Window10裝了Virtual Box,接著再在Virtual Box裝了CentOS的系統。這樣Host OS指的就是Window10,Guest OS指的是CentOS。

Docker少了Hypervisor,取而代之的是Docker Engine(Docker daemon),負責管理Docker容器。Docker是直接使用Host OS,少了Guest OS,因此也不需要Hypervisor。所以運行在Docker容器上的程序,是直接使用實際物理機的硬體資源,而不是多透過一層Hypervisor去存取。因此在cpu、內存、利用率上,Docker將會在效率上具有更大的優勢。

小結

  • 虛擬機會虛擬出一套硬體資源,一個完整的作業系統,然後再這個系統上安裝程式
  • 容器是直接運行在主機上,沒有虛擬出自己的硬體資源(容器沒有自己的Kernel跟系統)
  • 虛擬機需要加載Guest OS,但Docker使用Host OS的系統,省略掉多餘過程
  • 虛擬機解決的核心問題是資源調配,而容器解決的核心問題是應用開發、測試和部署

3.Docker基本組成

鏡像(image)

可以當成是一個類別(class),通過這個類別可以創建出多個物件實體(容器)。

ex:nginx鏡像 ⇒ run ⇒ nginx容器

容器(container)

可以當成是一個簡易的Linux系統

倉庫(repository)

存放鏡像的地方

4.安裝Docker

前置作業:需要一個Linux環境,這邊使用CentOS 7,規格如下

uname -r 顯示系統內核 、 cat /etc/os-release 顯示系統版本

照著文檔做、安裝Docker

1.卸載舊版本

sudo yum remove  docker \\
docker-client \\
docker-client-latest \\
docker-common \\
docker-latest \\
docker-latest-logrotate \\
docker-logrotate \\
docker-engine

2.需要的安裝包

sudo yum install -y yum-utils

3.設置鏡像倉庫

sudo yum-config-manager \\
--add-repo \\
<https://download.docker.com/linux/centos/docker-ce.repo>

4.更新yum索引

sudo yum makecache fast

5.安裝Docker引擎

sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

6.啟動Docker

sudo systemctl start docker

7.判斷是否安裝成功

sudo docker version
看到版本號後則表示安裝成功

8.下載 Hello World 鏡像

sudo docker run hello-world // 下載 hello world 鏡像
sudo docker images // 顯示當前所擁有的鏡像

補充:docker run的執行流程:先在本地看有沒有該鏡像,如果沒有則到遠端倉庫進行匹配。

--

--

No responses yet