歡迎光臨
每天分享高質量文章

為什麼要用Docker

 

最近Docker突然火得不得了,到處都是談論Docker的聲音,相信大家和小編一樣的心情,看這個東西有點高大上,但嘗試去閱讀Docker文章時又發現概念很模糊、不接地氣、難以理解、無從下手…於是三天打魚兩天曬網,最終不了了之,反正公司也沒要求用這玩意兒,不費勁了…

這不,當前幾天專案要求快速上線並且部署多台服務器環境時,小編一臺一臺服務器的yum install、vim、restart…想屎的心都有,那時小編心裡想要是有一個這麼一個U盤,能把整個環境一臺一臺的Ctrl+V過去,那該多好啊。那時腦子一下子閃過一個念頭:Docker不就是我想擁有的那個U盤嗎。

懷著這樣的一個念頭,小編花了一些時間去查閱Docker相關的書籍、看視頻、逛論壇,剛開始學習時非常難受,搞不懂什麼是容器什麼是鏡像什麼是鯨魚船…而涉及到一些原理底層的知識,書籍里的那些概念比代碼都能懂,小編硬啃了一段時間並且實操了幾次之後,再回過頭來,才豁然開朗。念及許多想要學Docker卻苦於難以入門的開發者們,正在學習卻很掙扎的初學者們,故而把小編這段時間的學習成果,以一個初學者的角度,遵循循序漸進的原則,編成一份通俗易懂的文章,希望能以此引匯入門,早日成Docker大神。

文章提綱:

1、什麼是Docker

2、Docker對我們有什麼用處

3、Docker安裝和使用

4、彩蛋

1、什麼是Docker

什麼是docker?恐怕90%的人腦子一閃而過的都是那張圖:一條鯨魚背上扛著一堆箱子,圖片下方是大大的“docker”。
docker是什麼?
是鯨魚?
還是一堆箱子?
或者說是載著箱子的鯨魚?
….

docker演示圖

這裡小編不做解釋,先取用一下官方的解釋:


Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的 Linux 機器上,也可以實現虛擬化。

顧名思義,docker是一個容器引擎,容器且不說,什麼是引擎?

我們知道:

汽車的引擎是發動機,有了發動起,汽車才能跑起來

游戲需要游戲引擎(如Unity3D..),基於引擎的開發,能讓游戲動起來。

如官言,docker也是一種引擎,基於這個引擎,開發者能讓他們開發的應用處於一個有隔離性的、可移植性的容器中,以便於發佈於各種機器中而無需考慮兼容性問題。

因此就不難解釋,為什麼docker的logo是一條裝著一堆箱子的鯨魚

這是因為:docker扮演的是圖中鯨魚的角色,而鯨魚之上的集裝箱就是一個個容器,容器中是我們開發的應用程式(不僅限於web應用),每個容器都有自己獨立的環境(環境設置、網絡、檔案系統…),互不干擾。而每個箱子,又可以打包成一個新的鏡像,放到其它服務器的docker環境中直接運行,不再需要重覆安裝程式運行環境。

上面的解釋插入了兩個生疏的概念:

  1. 鏡像
  2. 容器

我們先講容器

容器,顧名思義:就是裝東西的器皿,在docker中,容器就是裝載我們的應用程式的器皿,在docker的logo中,容器就是一個個箱子。我們知道,運行JavaWeb應用程式需要有Tomcat,那麼我們就需要創建一個Tomcat的容器,才能把我們的程式放進去運行。

那麼,容器哪裡來的呢

我們知道,給電腦安裝Windows系統需要有Windows鏡像,因此給docker安裝容器也是需要鏡像的,所以,通俗一點,鏡像就類似於我們日常中的安裝軟體,甚至說是操作系統鏡像更為形象點。

那容器和鏡像有什麼關係?

網上說是類和物件的關係,沒錯,但是這樣的比喻沒什麼實際卵用。

我們知道:要運行一個web程式,需要有個Tomcat環境,需要Tomcat環境,那就下載一個Tomcat解壓出來,然後把web程式放入Tomcat的webapps中啟動即可,

那麼在docker中要運行一個web程式,就需要有Tomcat容器,需要Tomcat容器,就得去下載Tomcat鏡像(也可以自己構建),把鏡像pull下來之後,運行起來,就是一個Tomcat容器,此時把web程式至於Tomcat掛載的資料目錄webapps中既可以運行。

所以docker中,容器和鏡像的關係更像是一種動靜的關係,也就是說,存於倉庫中的鏡像是一個死的軟體,而運行起來的容器則像是一個正在運行的程式(行程)。

2、Docker有什麼用

對docker有了清晰的瞭解之後,我們心裡可能在想:
這玩兒對我有什麼用?
我在哪裡能用得上?
怎麼用才對?

這裡取用幾個案例來讓大家體會體會。

1、案例一

前幾天,公司一批服務器就要到期了,由於服務器是15年購買的,硬體的性能遠比現在新出的雲主機低,因此決定把所有服務器都換成新一代服務器,但是小編整準備動手遷移服務器時,內心一陣陣崩潰感涌上心頭,仔細一算,每台服務器都要做同樣的事情:

1、安裝jdk、Tomcat、nginx

2、配置jdk環境變數和系統變數

3、配置Tomcat

4、配置nginx

5、安裝專案所需的視頻解碼組件

6、匯入專案所需的一些特殊字體

 

後來決定用docker部署的辦法,在每台服務器都把docker安裝之後,只需要在其中一臺服務器中把Tomcat鏡像從鏡像倉庫拉取下來,把這些配置都設置好,做成一個自己的鏡像上傳到鏡像倉庫中,之後在其他幾台服務器都下載自己做的鏡像,運行於docker中,把代碼上傳,就萬事大吉了。

2、案例二

前不久的聖誕活動中,公司臨時的活動方案在程式員的加班加點中終於上線,但是一上線之後發現推廣海報中的中文名字亂碼,領導問責測試人員怎麼沒做好測試,測試很委屈的說我已經測試無數遍並且測試報告都提交了,解決了所有問題才上線的;沒辦法只能讓服務器同事查看正式服務器中的tomcat配置,發現原來 tomcat用了預設編碼方式:iso8859-1,而測試環境中是UTF-8。針對這個問題,專案組決定把開發環境遷移到docker中,在測試環境中測試無誤後,把鏡像打包發佈到正式環境中,解決了環境不同導致的問題。

3、docker的安裝

感知到docker對我們開發者的好處之後,相信大家也躍躍欲試了吧,下麵
就Linux centOS(版本大於等於7.0)系統進行演示docker的安裝步驟:

1、刪除可能存在的舊版本

1sudo yum remove docker
2                  docker-client
3                  docker-client-latest
4                  docker-common
5                  docker-latest
6                  docker-latest-logrotate
7                  docker-logrotate
8                  docker-selinux
9                  docker-engine-selinux
10                  docker-engine

2、安裝一些必備工具:

1yum install -y yum-utils device-mapper-persistent-data lvm2

3、添加Docker源:

1yum-config-manager
2    --add-repo
3    https://download.docker.com/linux/centos/docker-ce.repo

4、更新yum快取

1yum makecache fast

5、安裝

1yum install docker-ce

6、創建docker用戶

溫馨提示:以下操作不是必備,但是為了養成一個Linux用戶的使用的良好習慣,小編不建議直接使用root操作,因此創建一個用戶用來操作docker。

1useradd docker_manager

docker_manager是用戶名,可以根據喜好起名,創建完用戶之後,設置密碼

1passwd docker_manager
2
3docker_manager_wsdt

會提示輸入密碼和確認密碼,按照提示操作即可

7、配置docker用戶的權限

1visudo

visudo是配置用戶權限的檔案,在命令列中輸入visudo回車之後,會進入檔案操作,找到“# %wheel ALL=(ALL) NOPASSWD: ALL”這一行,把前面的“#”去掉,儲存檔案

8、授權

1usermod -aG wheel,docker docker_manager

9、啟動 Docker CE

sudo systemctl enable docker
sudo systemctl start docker

此時在命令列中輸入“docker info”之後,能夠展示docker相關信息,就表示docker安裝成功。

1docker info

10、鏡像加速:

編輯daemon.json檔案(首次安裝daemon.json是個新檔案,不要驚訝)

1vim /etc/docker/daemon.json

加入以下內容:

1{
2  "registry-mirrors": [
3    "https://registry.docker-cn.com"
4  ]
5}

儲存,sudo systemctl restart docker重啟即可。

4、總結

上面針對docker使用了一種比較通俗詼諧的語言來講述,也是為了方便讀者能容易的解讀和理解,理解並且成功安裝docker之後,你們就會想方設法的要把自己的web專案部署到docker了,這我沒說錯吧,大家可以網上查找一些資料去學習這一塊。

    赞(0)

    分享創造快樂