摘要:那容器和鏡像有什么關系網上說是類和對象的關系,沒錯,但是這樣的比喻沒什么實際卵用。針對這個問題,項目組決定把開發環境遷移到中,在測試環境中測試無誤后,把鏡像打包發布到正式環境中,解決了環境不同導致的問題。
本文旨在用最通俗的語言講述最枯燥的基本知識
最近Docker突然火得不得了,到處都是談論Docker的聲音,相信大家和小編一樣的心情,看這個東西有點高大上,但嘗試去閱讀Docker文章時又發現概念很模糊、不接地氣、難以理解、無從下手...于是三天打魚兩天曬網,最終不了了之,反正公司也沒要求用這玩意兒,不費勁了...
這不,當前幾天項目要求快速上線并且部署多臺服務器環境時,小編一臺一臺服務器的yum install、vim、restart...想屎的心都有,那時小編心里想要是有一個這么一個U盤,能把整個環境一臺一臺的Ctrl+V過去,那該多好啊。那時腦子一下子閃過一個念頭:Docker不就是我想擁有的那個U盤嗎。
懷著這樣的一個念頭,小編花了一些時間去查閱Docker相關的書籍、看視頻、逛論壇,剛開始學習時非常難受,搞不懂什么是容器什么是鏡像什么是鯨魚船...而涉及到一些原理底層的知識,書籍里的那些概念比代碼都能懂,小編硬啃了一段時間并且實操了幾次之后,再回過頭來,才豁然開朗。念及許多想要學Docker卻苦于難以入門的開發者們,正在學習卻很掙扎的初學者們,故而把小編這段時間的學習成果,以一個初學者的角度,遵循循序漸進的原則,編成一份通俗易懂的文章,希望能以此引導入門,早日成Docker大神。
1. 什么是Docker文章提綱:
什么是Docker
Docker對我們有什么用處
Docker安裝和使用
彩蛋
什么是docker?恐怕90%的人腦子一閃而過的都是那張圖:一條鯨魚背上扛著一堆箱子,圖片下方是大大的“docker”。
docker是什么?
是鯨魚?
還是一堆箱子?
或者說是載著箱子的鯨魚?
....
這里小編不做解釋,先引用一下官方的解釋:
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的 Linux 機器上,也可以實現虛擬化。
顧名思義,docker是一個容器引擎,容器且不說,什么是引擎?
我們知道:
汽車的引擎是發動機,有了發動起,汽車才能跑起來
游戲需要游戲引擎(如Unity3D..),基于引擎的開發,能讓游戲動起來。
如官言,docker也是一種引擎,基于這個引擎,開發者能讓他們開發的應用處于一個有隔離性的、可移植性的容器中,以便于發布于各種機器中而無需考慮兼容性問題。
因此就不難解釋,為什么docker的logo是一條裝著一堆箱子的鯨魚
這是因為:docker扮演的是圖中鯨魚的角色,而鯨魚之上的集裝箱就是一個個容器,容器中是我們開發的應用程序(不僅限于web應用),每個容器都有自己獨立的環境(環境設置、網絡、文件系統...),互不干擾。而每個箱子,又可以打包成一個新的鏡像,放到其它服務器的docker環境中直接運行,不再需要重復安裝程序運行環境。
上面的解釋插入了兩個生疏的概念:
鏡像
容器
我們先講容器
容器,顧名思義:就是裝東西的器皿,在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年購買的,硬件的性能遠比現在新出的云主機低,因此決定把所有服務器都換成新一代服務器,但是小編整準備動手遷移服務器時,內心一陣陣崩潰感涌上心頭,仔細一算,每臺服務器都要做同樣的事情:
安裝jdk、Tomcat、nginx
配置jdk環境變量和系統變量
配置Tomcat
配置nginx
安裝項目所需的視頻解碼組件
導入項目所需的一些特殊字體
后來決定用docker部署的辦法,在每臺服務器都把docker安裝之后,只需要在其中一臺服務器中把Tomcat鏡像從鏡像倉庫拉取下來,把這些配置都設置好,做成一個自己的鏡像上傳到鏡像倉庫中,之后在其他幾臺服務器都下載自己做的鏡像,運行于docker中,把代碼上傳,就萬事大吉了。
案例二
前不久的圣誕活動中,公司臨時的活動方案在程序員的加班加點中終于上線,但是一上線之后發現推廣海報中的中文名字亂碼,領導問責測試人員怎么沒做好測試,測試很委屈的說我已經測試無數遍并且測試報告都提交了,解決了所有問題才上線的;沒辦法只能讓服務器同事查看正式服務器中的tomcat配置,發現原來 tomcat用了默認編碼方式:iso8859-1,而測試環境中是UTF-8。針對這個問題,項目組決定把開發環境遷移到docker中,在測試環境中測試無誤后,把鏡像打包發布到正式環境中,解決了環境不同導致的問題。
3. 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重啟即可。
4.彩蛋上面針對docker使用了一種比較通俗詼諧的語言來講述,也是為了方便讀者能容易的解讀和理解,理解并且成功安裝docker之后,你們就會想方設法的要把自己的web項目部署到docker了,這我沒說錯吧,大家可以網上查找一些資料去學習這一塊,當然也可以選擇:
關!注!我!
下篇文章我會對docker網絡、數據卷、常用操作命令和創建自己的docker鏡像、上傳鏡像等做一個全面的解答,之后會docker部署web項目的流程、以及運行Redis、MongoDB、nginx等常用軟件做一些例子講解。
覺得本文對你有幫助?請分享給更多人
關注「編程無界」,提升裝逼技能
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28064.html
摘要:重新執行看控制臺的輸出可以看到已經在運行,代表所用鏡像以及鏡像版本,顯示的是。把文件夾掛載成功之后,此時我們把項目丟到宿主機中的下,重啟容器后,再用訪問,就會展示我們的項目的內容了。到這里,中用運行項目的工作已經完成。 本文旨在用最通俗的語言講述最枯燥的基本知識 上一篇文章《為什么要用docker》已經講述了什么是docker以及我們要用docker的原因,并且講解了如何安裝docke...
1.準備環境 一臺有網絡的Linux 服務器 Docker rpm安裝包,依賴包 libcgroup jdk1.7 OR 1.8環境下載 Jenkins WAR包下載 NodeJs 源碼包下載 依賴下載地址: https://pkgs.org/download/ https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/ 2.安裝D...
摘要:本文從定義,作用,技術架構,安裝和使用等全方位帶你看懂。如圖中左邊紅框中和右邊的紅框中都唯一表示為同一個鏡像。最后,于開發者而言提供了一種開發環境的管理辦法,與測試人員而言保證了環境的同步,于運維人員提供了可移植的標準化部署流程。 作者丨唐文廣:騰訊工程師,負責無線研發部地圖測試。 導語:Docker,近兩年才流行起來的超輕量級虛擬機,它可以讓你輕松完成持續集成、自動交付、自動部署...
摘要:為什么要用對開發者來說啟動速度快傳統虛擬機需要數分鐘的啟動時間秒秒鐘啟動。開發者只需要代碼到版本管理即可,接下來的自動測試,自動構建,自動部署都交給吧更輕松的擴展。 1. 前言 相見恨晚用來形容我對docker的熱愛再合適不過了,自從用了docker,開發環境也不安裝了,系統想換就換了,部署更是一鍵部署,再也不用擔心在這臺機器上跑的好好的,其它機器有問題了... 寫這篇文章,也是為do...
摘要:本文從定義,作用,技術架構,安裝和使用等全方位帶你看懂。最后,于開發者而言提供了一種開發環境的管理辦法,與測試人員而言保證了環境的同步,于運維人員提供了可移植的標準化部署流程。顯示上圖內容就表明安裝完成。 作者丨唐文廣:騰訊工程師,負責無線研發部地圖測試。 導語:Docker,近兩年才流行起來的超輕量級虛擬機,它可以讓你輕松完成持續集成、自動交付、自動部署,并且實現開發環境、測試環...
閱讀 3281·2021-11-25 09:43
閱讀 2084·2021-09-22 10:02
閱讀 3310·2021-09-06 15:00
閱讀 2298·2019-08-30 15:56
閱讀 2347·2019-08-30 15:54
閱讀 3224·2019-08-30 14:14
閱讀 2258·2019-08-29 17:25
閱讀 2902·2019-08-29 17:16