關(guān)于docker這塊從0開始已經(jīng)寫了4個(gè)系列了潮峦,但是針對(duì)k8s還是有點(diǎn)怵入偷,因?yàn)閗8s確實(shí)比較麻煩里面的東西比較復(fù)雜嘹屯,而且針對(duì)k8s想走的更遠(yuǎn)還是需要實(shí)踐印荔,前端時(shí)間將原來的java的一些知識(shí)回顧和學(xué)習(xí)了低葫,這次又要開啟k8s之旅了,加油吧老鐵們仍律!還是繼續(xù)從docker開始嘿悬,不斷的反復(fù),不斷的學(xué)習(xí)水泉,才能讓知識(shí)記憶的更老善涨。艾賓浩斯記憶法就是這樣說的。
(一)什么是docker
Docker的英文翻譯是【碼頭工人】的意思草则,不是咱們初中還是高中學(xué)的課文的【伏爾加河上的纖夫】钢拧,負(fù)責(zé)搬運(yùn)碼頭貨物的,隨著科技的發(fā)展碼頭上體力搬運(yùn)工越來越少炕横,多數(shù)是操作碼頭集裝箱的碼頭工人源内。對(duì)于集裝箱是一種容器,直接理解成彌勒佛的布口袋什么都可以放份殿。杯子可以存水姿锭,筆筒可以放筆塔鳍,酒瓶可以盛酒,書包可以裝書呻此,相機(jī)可以存照片,電腦可以放小電影腔寡。
- 不同的應(yīng)用程序可能會(huì)有不同的應(yīng)用環(huán)境焚鲜,比如.net開發(fā)的網(wǎng)站和java開發(fā)的網(wǎng)站依賴的軟件就不一樣,如果把他們依賴的軟件都安裝在一個(gè)服務(wù)器上就要調(diào)試很久放前,而且很麻煩忿磅,還會(huì)造成一些沖突。比如IIS和tomcat訪問端口沖突凭语。這個(gè)時(shí)候你就要隔離.net開發(fā)的網(wǎng)站和tomcat開發(fā)的網(wǎng)站葱她。常規(guī)來講,我們可以在服務(wù)器上創(chuàng)建不同的虛擬機(jī)在不同的虛擬機(jī)上放置不同的應(yīng)用似扔,但是虛擬機(jī)開銷比較高吨些。docker可以實(shí)現(xiàn)虛擬機(jī)隔離應(yīng)用環(huán)境的功能,并且開銷比虛擬機(jī)小炒辉,小就意味著省錢了豪墅。
- 你開發(fā)軟件的時(shí)候用的是Ubuntu,但是運(yùn)維管理的都是centos黔寇,運(yùn)維在把你的軟件從開發(fā)環(huán)境轉(zhuǎn)移到生產(chǎn)環(huán)境的時(shí)候就會(huì)遇到一些Ubuntu轉(zhuǎn)centos的問題偶器,比如:有個(gè)特殊版本的數(shù)據(jù)庫(kù),只有Ubuntu支持缝裤,centos不支持屏轰,在轉(zhuǎn)移的過程當(dāng)中運(yùn)維就得想辦法解決這樣的問題。這時(shí)候要是有docker你就可以把開發(fā)環(huán)境直接封裝轉(zhuǎn)移給運(yùn)維憋飞,運(yùn)維直接部署你給他的docker就可以了霎苗。而且部署速度快。
- 在服務(wù)器負(fù)載方面搀崭,如果你單獨(dú)開一個(gè)虛擬機(jī)叨粘,那么虛擬機(jī)會(huì)占用空閑內(nèi)存的,docker部署的話瘤睹,這些內(nèi)存就會(huì)利用起來升敲。
(二)docker格言
Java號(hào)稱【一次編譯,到處運(yùn)行】轰传,因?yàn)閖ava虛擬機(jī)解決平臺(tái)的兼容性問題驴党,所以有java虛擬機(jī)的地方就能跑java代碼;
Docker是:【一次封裝获茬,到處運(yùn)行】港庄,因?yàn)閐ocker決絕了應(yīng)用環(huán)境的問題倔既,安裝了docker的平臺(tái)就能跑【docker包】,這樣就決絕了【開發(fā)環(huán)境能跑鹏氧,一上線就崩】的尷尬渤涌。
(三)docker和虛擬機(jī)的區(qū)別
vm與docker框架,直觀上來講vm多了一層guest OS把还,同時(shí)Hypervisor會(huì)對(duì)硬件資源進(jìn)行虛擬化实蓬,docker直接使用硬件資源,所以資源利用率相對(duì)docker低也是比較容易理解的吊履。
- 隔斷這招就是虛擬機(jī)(VM)的思路了安皱,虛擬機(jī)的這種隔斷你可以理解成比較決絕的隔斷,墻上自己掏洞開個(gè)門開個(gè)窗艇炎,廚房衛(wèi)生間我在自己的這個(gè)隔斷里都單獨(dú)來一套酌伊,基本就是一個(gè)完整的家裝工程了,你進(jìn)這個(gè)隔斷感覺——喔缀踪,這就是個(gè)完整的房子嘛居砖。 所以虛擬機(jī)的好處壞處也你也就明白了:隔離效果好,但是損耗大辜贵。
- docker悯蝉,不僅能做資源隔離,人家還規(guī)范化系統(tǒng)化了(repo/image)托慨,所有房間(container)統(tǒng)一裝修和家具鼻由,你交錢簽約就能享受一個(gè)相對(duì)獨(dú)立的生活環(huán)境(environment)了,你自己的東西在你屋子里隨便擺厚棵,都可以的蕉世;對(duì)中介來說,你當(dāng)下不過就是個(gè)正在running的instance婆硬,的當(dāng)你gameover了以后狠轻,這個(gè)房間他還可以以很小的代價(jià)租給別人run,是不是效率好高了彬犯?
(四)為啥要用容器
隨著硬件的性能提升向楼,以及軟件種類的豐富,有兩種情況變得很常見
- 硬件性能過市城——很多計(jì)算機(jī)的硬件配置湖蜕,即使不能完全滿足峰值性能的要求,也往往會(huì)有大量時(shí)間處于硬件資源閑置的狀態(tài)宋列。例如一般家用電腦昭抒,已經(jīng)是四核、六核的配置了,除了3A游戲灭返、視頻制作盗迟、3D渲染鲜锚、高性能計(jì)算等特殊應(yīng)用外厌漂,通常有90%以上時(shí)間CPU是閑置的。
- 軟件沖突——因?yàn)闃I(yè)務(wù)需要盾碗,兩個(gè)或者多個(gè)軟件之間沖突怎静,或者需要同一個(gè)軟件的不同版本怕磨。例如早幾年做web前端的,要測(cè)試網(wǎng)頁(yè)在不同版本的IE上是否能正常顯示消约,然而Windows只能裝一個(gè)版本的IE。
- 開發(fā)環(huán)境能跑员帮,一上線就崩或粮。環(huán)境不一致。
(五)Docker Engine
- 常駐后臺(tái)進(jìn)程Dockerd
- 一個(gè)用來和 Dockerd 交互的 REST API Server
- 命令行CLI接口捞高,通過和 REST API 進(jìn)行交互(我們經(jīng)常使用的 docker 命令)
??
(六)Docker 架構(gòu)
- container: 容器氯材,是指image的運(yùn)行時(shí),包含了文件資源(image展開)和系統(tǒng)資源(變成process存在于系統(tǒng)中)硝岗。
- image: 鏡像氢哮,是指將應(yīng)用打包好之后的存儲(chǔ)方式,一個(gè)image包含多層layer型檀。
- layer: 在Dockerfile中每一步都會(huì)產(chǎn)生一層layer冗尤,每一步的結(jié)果產(chǎn)出變成文件。
- dockerfile: 一種構(gòu)建image的文件的DSL胀溺。
- docker: 可以通過Dockerfile構(gòu)建image裂七,也可以將image運(yùn)行,使其變成container仓坞。
- moby: docker項(xiàng)目的新名字背零,docker公司的一步棋。
- docker-compose: Python寫的一個(gè)docker編排工具无埃。
- docker swarm: docker公司推出的容器調(diào)度平臺(tái)徙瓶。
- kubernetes: google主導(dǎo)的容器調(diào)度平臺(tái)。
(七)Docker 安裝
這里不在描述windows嫉称,mac了侦镇。只要說說如何快速簡(jiǎn)單的在centos系統(tǒng)上安裝。
- ①修改dns解析地址
vi /etc/resolv.conf
#nameserver 8.8.8.8
# 或者直接通過這個(gè)命令 echo nameserver 8.8.8.8 >> /etc/resolv.conf
systemctl restart network
- ② docker在線安裝
sudo curl -sSL https://get.docker.com/ | sh
- ③ docker 加速器
sudo curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://b81aace9.m.daocloud.io
sudo systemctl restart docker
- ⑤ 安裝配合工具
sudo yum -y install epel-release
sudo yum -y install python-pip
sudo yum clean all
- ⑤ 安裝docker-compose
sudo pip install docker-compose
- ⑥ 安裝完畢
docker-compose version
docker version
PS:docker已經(jīng)安裝成功了澎埠。之前寫的文章太官方了虽缕,現(xiàn)在要讓更通俗,很易懂的方式讓更多人了解和使用docker。