本文旨在用最通俗的語言講述最枯燥的基本知識
最近Docker忽然火得不得了,處處都是談論Docker的聲音,相信你們和小編同樣的心情,看這個東西有點高大上,但嘗試去閱讀Docker文章時又發現概念很模糊、不接地氣、難以理解、無從下手...因而三天打魚兩天曬網,最終不了了之,反正公司也沒要求用這玩意兒,不費勁了...linux
這不,當前幾天項目要求快速上線而且部署多臺服務器環境時,小編一臺一臺服務器的yum install、vim、restart...想屎的心都有,那時小編內心想要是有一個這麼一個U盤,能把整個環境一臺一臺的Ctrl+V過去,那該多好啊。那時腦子一會兒閃過一個念頭:Docker不就是我想擁有的那個U盤嗎。nginx
懷着這樣的一個念頭,小編花了一些時間去查閱Docker相關的書籍、看視頻、逛論壇,剛開始學習時很是難受,搞不懂什麼是容器什麼是鏡像什麼是鯨魚船...而涉及到一些原理底層的知識,書籍裏的那些概念比代碼都能懂,小編硬啃了一段時間而且實操了幾回以後,再回過頭來,才豁然開朗。念及許多想要學Docker卻苦於難以入門的開發者們,正在學習卻很掙扎的初學者們,故而把小編這段時間的學習成果,以一個初學者的角度,遵循按部就班的原則,編成一份通俗易懂的文章,但願能以此引導入門,早日成Docker大神。程序員
文章提綱:web
- 什麼是Docker
- Docker對咱們有什麼用處
- Docker安裝和使用
- 彩蛋
什麼是docker?恐怕90%的人腦子一閃而過的都是那張圖:一條鯨魚背上扛着一堆箱子,圖片下方是大大的「docker」。
docker是什麼?
是鯨魚?
仍是一堆箱子?
或者說是載着箱子的鯨魚?
....
這裏小編不作解釋,先引用一下官方的解釋:
Docker 是一個開源的應用容器引擎,讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中,而後發佈到任何流行的 Linux 機器上,也能夠實現虛擬化。
顧名思義,docker是一個容器引擎,容器且不說,什麼是引擎?
咱們知道:
汽車的引擎是發動機,有了發動起,汽車才能跑起來
遊戲須要遊戲引擎(如Unity3D..),基於引擎的開發,能讓遊戲動起來。
如官言,docker也是一種引擎,基於這個引擎,開發者能讓他們開發的應用處於一個有隔離性的、可移植性的容器中,以便於發佈於各類機器中而無需考慮兼容性問題。
所以就不難解釋,爲何docker的logo是一條裝着一堆箱子的鯨魚
這是由於:docker扮演的是圖中鯨魚的角色,而鯨魚之上的集裝箱就是一個個容器,容器中是咱們開發的應用程序(不只限於web應用),每一個容器都有本身獨立的環境(環境設置、網絡、文件系統...),互不干擾。而每一個箱子,又能夠打包成一個新的鏡像,放到其它服務器的docker環境中直接運行,再也不須要重複安裝程序運行環境。docker
上面的解釋插入了兩個生疏的概念:編程
- 鏡像
- 容器
咱們先講容器
容器,顧名思義:就是裝東西的器皿,在docker中,容器就是裝載咱們的應用程序的器皿,在docker的logo中,容器就是一個個箱子。咱們知道,運行JavaWeb應用程序須要有Tomcat,那麼咱們就須要建立一個Tomcat的容器,才能把咱們的程序放進去運行。json
那麼,容器哪裏來的呢vim
咱們知道,給電腦安裝Windows系統須要有Windows鏡像,所以給docker安裝容器也是須要鏡像的,因此,通俗一點,鏡像就相似於咱們平常中的安裝軟件,甚至說是操做系統鏡像更爲形象點。centos
那容器和鏡像有什麼關係?緩存
網上說是類和對象的關係,沒錯,可是這樣的比喻沒什麼實際卵用。
咱們知道:要運行一個web程序,須要有個Tomcat環境,須要Tomcat環境,那就下載一個Tomcat解壓出來,而後把web程序放入Tomcat的webapps中啓動便可,
那麼在docker中要運行一個web程序,就須要有Tomcat容器,須要Tomcat容器,就得去下載Tomcat鏡像(也能夠本身構建),把鏡像pull下來以後,運行起來,就是一個Tomcat容器,此時把web程序至於Tomcat掛載的數據目錄webapps中既能夠運行。
因此docker中,容器和鏡像的關係更像是一種動靜的關係,也就是說,存於倉庫中的鏡像是一個死的軟件,而運行起來的容器則像是一個正在運行的程序(進程)。
對docker有了清晰的瞭解以後,咱們內心可能在想:
這玩兒對我有什麼用?
我在哪裏能用得上?
怎麼用纔對?
這裏引用幾個案例來讓你們體會體會。
1.案例一
前幾天,公司一批服務器就要到期了,因爲服務器是15年購買的,硬件的性能遠比如今新出的雲主機低,所以決定把全部服務器都換成新一代服務器,可是小編整準備動手遷移服務器時,心裏一陣陣崩潰感涌上心頭,仔細一算,每臺服務器都要作一樣的事情:
後來決定用docker部署的辦法,在每臺服務器都把docker安裝以後,只須要在其中一臺服務器中把Tomcat鏡像從鏡像倉庫拉取下來,把這些配置都設置好,作成一個本身的鏡像上傳到鏡像倉庫中,以後在其餘幾臺服務器都下載本身作的鏡像,運行於docker中,把代碼上傳,就萬事大吉了。
- 案例二
前不久的聖誕活動中,公司臨時的活動方案在程序員的加班加點中終於上線,可是一上線以後發現推廣海報中的中文名字亂碼,領導問責測試人員怎麼沒作好測試,測試很委屈的說我已經測試無數遍而且測試報告都提交了,解決了全部問題才上線的;沒辦法只能讓服務器同事查看正式服務器中的tomcat配置,發現原來 tomcat用了默認編碼方式:iso8859-1,而測試環境中是UTF-8。針對這個問題,項目組決定把開發環境遷移到docker中,在測試環境中測試無誤後,把鏡像打包發佈到正式環境中,解決了環境不一樣致使的問題。
感知到docker對咱們開發者的好處以後,相信你們也躍躍欲試了吧,下面
就Linux centOS(版本大於等於7.0)系統進行演示docker的安裝步驟:
1.刪除可能存在的舊版本
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine
- 安裝一些必備工具:
yum install -y yum-utils device-mapper-persistent-data lvm2
- 添加Docker源:
yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
- 更新yum緩存
yum makecache fast
- 安裝
yum install docker-ce
6.建立docker用戶
舒適提示:如下操做不是必備,可是爲了養成一個Linux用戶的使用的良好習慣,小編不建議直接使用root操做,所以建立一個用戶用來操做docker。
useradd docker_manager
docker_manager是用戶名,能夠根據喜愛起名,建立完用戶以後,設置密碼
passwd docker_manager docker_manager_wkt
會提示輸入密碼和確認密碼,按照提示操做便可
- 配置docker用戶的權限
visudo
visudo是配置用戶權限的文件,在命令行中輸入visudo回車以後,會進入文件操做,找到「# %wheel ALL=(ALL) NOPASSWD: ALL」這一行,把前面的「#」去掉,保存文件
- 受權
usermod -aG wheel,docker docker_manager
- 啓動 Docker CE
sudo systemctl enable docker
sudo systemctl start docker
此時在命令行中輸入「docker info」以後,可以展現docker相關信息,就表示docker安裝成功。
docker info
- 鏡像加速:
編輯daemon.json文件(首次安裝daemon.json是個新文件,不要驚訝)
vim /etc/docker/daemon.json
加入如下內容:
{ "registry-mirrors": [ "https://registry.docker-cn.com" ] }
保存,sudo systemctl restart docker重啓便可。
上面針對docker使用了一種比較通俗詼諧的語言來說述,也是爲了方便讀者能容易的解讀和理解,理解而且成功安裝docker以後,大家就會千方百計的要把本身的web項目部署到docker了,這我沒說錯吧,你們能夠網上查找一些資料去學習這一塊,固然也能夠選擇:
關!注!我!
下篇文章我會對docker網絡、數據卷、經常使用操做命令和建立本身的docker鏡像、上傳鏡像等作一個全面的解答,以後會docker部署web項目的流程、以及運行Redis、MongoDB、nginx等經常使用軟件作一些例子講解。
以爲本文對你有幫助?請分享給更多人
關注「編程無界」,提高裝逼技能