本文內容
- 為什麼需要Docker?Docker解決了哪些問題?
- Docker容器跟虛擬機有什麼差別?
- Docker基本組成
- 安裝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,規格如下
照著文檔做、安裝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的執行流程:先在本地看有沒有該鏡像,如果沒有則到遠端倉庫進行匹配。