001/Docker入门(Mooc)
docker官網(wǎng):https://www.docker.com/
1。什么是docker
2。Docker思想
? ? ==》
【1】。集裝箱:保證程序完整(不缺東西,如配置文件等)。
【2】。標(biāo)準(zhǔn)化:開(kāi)發(fā)測(cè)試都是使用一套環(huán)境
? ? ? ?(1)。運(yùn)輸方式:選擇傳輸應(yīng)用的方式,如QQ,ftp等。(docker不用)
? ? ? ?(2)。應(yīng)用存儲(chǔ)位置。(docker不需要你記住存儲(chǔ)位置)
(3)。API接口:接品標(biāo)化化用同樣的命令控制所有應(yīng)用
【3】。隔離:每個(gè)服務(wù)獨(dú)自運(yùn)行,互不影響
LXC為L(zhǎng)inux Container的簡(jiǎn)寫(xiě)。可以提供輕量級(jí)的虛擬化,以便隔離進(jìn)程和資源,而且不需要提供指令解釋機(jī)制以及全虛擬化的其他復(fù)雜性。3。Docker解決什么問(wèn)題
【1】。我本地環(huán)境沒(méi)問(wèn)題啊?(docker集裝箱解決該問(wèn)題)
【2】。系統(tǒng)好卡,哪個(gè)同學(xué)又寫(xiě)死循環(huán)了?(docker隔離性解決該問(wèn)題,如:linux本來(lái)是多租戶,允許多個(gè)用戶使用。)
【3】。雙11來(lái)了,服務(wù)器撐不住了。(節(jié)日前擴(kuò)展機(jī)器,節(jié)后再下線節(jié)點(diǎn)。浪費(fèi)。有了docker,即可隨時(shí)擴(kuò)充服務(wù)器。)
docker讓快速擴(kuò)展 & 彈性伸縮變得簡(jiǎn)單。
4。Docker核心技術(shù)
鏡像:(集裝箱)
倉(cāng)庫(kù):(超級(jí)碼頭)
容器:(運(yùn)行程序的地方)
用docker運(yùn)行一個(gè)程序的過(guò)程:去倉(cāng)庫(kù)把鏡像拉到本地,用一條命令,把鏡像運(yùn)行起來(lái)變成容器。
Build:構(gòu)建鏡像?[鏡像 類(lèi)比 集裝箱]
Ship:運(yùn)輸鏡像(從倉(cāng)庫(kù) & 主機(jī)上運(yùn)輸)[倉(cāng)庫(kù) 類(lèi)比 超級(jí)碼頭]
Run:運(yùn)行鏡像(運(yùn)行的鏡像就是一個(gè)容器)- [容器 就是 運(yùn)行程序的地方]
5。Docker鏡像
鯨魚(yú)馱著的就是一堆鏡像
Docker鏡像:鏡像就是一系列的文件,它可以包括應(yīng)用程序,應(yīng)用環(huán)境的文件,docker將它保存到本地,以什么格式保存(涉及技術(shù)linux的存儲(chǔ)技術(shù):聯(lián)合文件系統(tǒng))
聯(lián)合文件系統(tǒng):docker Unie fileSystem (分層)(可將不同目錄掛在同一文件系統(tǒng))
test1第一層,test2第二層。test聯(lián)合文件系統(tǒng)可以看到test1和test2所有內(nèi)容。
鏡像存儲(chǔ)格式:
?
最底層-》最頂層:
【1】操作系統(tǒng)引導(dǎo) 【2】具體linux操作系統(tǒng) 【3】相關(guān)軟件,如tomcat/jdk【4】存儲(chǔ)應(yīng)用代碼【5】容器(可修改)
以上這些均為一個(gè)文件系統(tǒng),為一個(gè)docker鏡像。
6。Docker容器
容器的本質(zhì)就是一個(gè)進(jìn)程。(容器在鏡像的最上層為可讀可寫(xiě),鏡像的其他層均為只讀)
(可將容器理解為一個(gè)虛擬機(jī))
Docker鏡像的每一層都是只讀的,而容器作為最上層,是可讀可寫(xiě)的。如果程序需要對(duì)鏡像進(jìn)行修改,那么Docker會(huì)把要修改的鏡像文件拷貝到最上層的容器中,然后再進(jìn)行修改。往后對(duì)該文件的訪問(wèn)會(huì)優(yōu)先從容器中讀取,尋找文件的順序是從下往下。
7。Docker倉(cāng)庫(kù)
構(gòu)建鏡像的目的是在其他環(huán)境或其他機(jī)器上運(yùn)行我的程序。
需要將鏡像傳輸?shù)狡渌h(huán)境--應(yīng)用docker倉(cāng)庫(kù)(構(gòu)建鏡像-》運(yùn)輸-》Docker倉(cāng)庫(kù)《- 目地的從docker倉(cāng)庫(kù)拉取鏡像)
docker提供中央倉(cāng)庫(kù):地址(hub.docker.com / c.163.com)?
8。Docker安裝
視頻地址;https://www.imooc.com/video/14616 (windows/ mac /linux)
推薦linux,docker本身在linux研發(fā),更源生。
9。第一個(gè)docker鏡像
10。docker網(wǎng)絡(luò)
網(wǎng)絡(luò)類(lèi)型:
1.Bridger:橋接模式(有獨(dú)立的network namespace,即有獨(dú)立IP和端口).與外界互通,需要端口映射。
2.Host:主機(jī)模式(與主機(jī)共用同一網(wǎng)卡)
3.NONE:無(wú)網(wǎng)絡(luò)。docker容器不能與外界互通
$docker run -d -p 8080:80 hub.c.163.com/library/nginx//-d:指定后臺(tái)進(jìn)程 //-p:映射端口 (主機(jī)端口:容器端口) $netstat -na | grep 8080 //查看8080是否被占用 $docker run -d -P hub.c.163.com/library/nginx //隨機(jī)映射端口11。制作自己的鏡像
【1】。Dockerfile
【2】。docker build
【3】。Jpress
? ? ? ? http://jpress.io? //開(kāi)源的java-web應(yīng)用
準(zhǔn)備工作:
1。javaWar包。
2。java web依賴(lài)tomcat服務(wù)器,docker pull tomcat鏡像
3。vi Dockerfile? ? ?
from tomcat鏡像名 //tomcat作為基礎(chǔ)鏡像(tomcat包含jdk) MAINTAINER 所有者名 所有者聯(lián)系方式 //所有者信息 COPY jpress.war tomcat鏡像webapp目錄 //web應(yīng)用放入鏡像,運(yùn)行自建javaweb程序4。docker build -t 鏡像名字 目錄(.表示當(dāng)前目錄)
5。docker image ls //查看鏡像
6。運(yùn)行自己的容器
地址欄訪問(wèn):http://localhost:8888/webappname 即可正常訪問(wèn)。?
jpress項(xiàng)目需要mysql ,可在docker中安裝一個(gè)mysql鏡像即可.
……………………………………………………………………………………………………………………………………
Eg1:以本地java打war包為例,構(gòu)建一個(gè)鏡像
Step1:以tomcat鏡像為基礎(chǔ)鏡像docker pull tomcat //拉取tomcat鏡像 Step2:定制鏡像touch Dockerfile #新建Dockerfile文件vi Dockerfile #編輯Dockerfile##add content startFROM tomcat:latestMAINTAINER shiyufeng kaixinyufeng@sina.comCOPY web-ssm-single.war /usr/local/tomcat/webapps##add content endStep3:構(gòu)建鏡像docker build -t cfca-web:v1 . //在當(dāng)前目錄,構(gòu)建一個(gè)cfca-web的鏡像,tag為v1的鏡像 Step4:run鏡像為容器docker run -d -p 8089:8080 cfca-web:v1 //-d后臺(tái)守護(hù)進(jìn)程 -p映射端口宿主機(jī):容器 鏡像名 地址欄訪問(wèn):http://localhost:8089/web-ssm-single/即可。命令行訪問(wèn):
?
ZBMAC-C02VX5Y7H:myLearn shiyufeng$ curl http://localhost:8089/web-ssm-single
ZBMAC-C02VX5Y7H:myLearn shiyufeng$ curl http://localhost:8089/web-ssm-single/
<html>
<body>
<h2>Hello World!</h2>
<h3><a href="/user/query">send request</a></h3>
</body>
</html>
地址欄訪問(wèn):http://localhost:8089/web-ssm-single/
成功!!!
Eg2:以nginx為例:
//Step1:從遠(yuǎn)程倉(cāng)庫(kù)拉取鏡像 docker pull nginx #未指定版本默認(rèn)拉取最新鏡像docker pull nginx:版本號(hào) #指定版本號(hào)拉取//Step2:查看鏡像 docker image ls nginx//Step3:啟動(dòng)鏡像-》容器 docker run -d -p 8088:80 nginx:latest #-d指定后臺(tái)守護(hù)進(jìn)程 -p指定映射宿主機(jī):容器端口號(hào) nginx指定鏡像名稱(chēng)//docker ps #查看當(dāng)前運(yùn)行的容器//以上相當(dāng)于在本地8088端口開(kāi)啟了一個(gè)nginx服務(wù)。//地址欄訪問(wèn):localhost:8088 即顯示welcome to nginx//停止容器 docker stop 容器id//重新啟動(dòng)容器 docker ps -a #查詢(xún)所有容器 docker start 容器id//在某一目錄下新建index.html vi index.html<html><h1>yufeng learn docker!!!</h1></html>//拷備本地index.html文件到docker容器 docker cp index.html 容器id://index.html文件所在容器路徑 docker cp index.html 容器id://usr/share/nginx/html//打開(kāi)瀏覽器再次訪問(wèn)。頁(yè)面顯示新內(nèi)容yufeng learn docker!!!//停止nginx容器 & 再重新運(yùn)行nginx容器 docker stop 容器id docker run -d -p 8088:80 nginx:latest//瀏覽器再次訪問(wèn):localhost:8088,會(huì)出現(xiàn)welcome to nginx。而非新內(nèi)容//說(shuō)明:docker在容器內(nèi)所做的改動(dòng)都是暫時(shí)的,都是未被保存的。//保存自定義內(nèi)容 docker cp index.html 容器id://usr/share/nginx/html docker commit -m '備注信息' 容器id 名字上述會(huì)重新定制一個(gè)imagedocker run -d -p 8088:80 Repository?注:上述用commit定制鏡像不建議應(yīng)用(命令無(wú)法找回)
推建Dockerfile文件定制鏡像。
……………………………………………………………………………………………………………………………………
12。Volume:提供容器之外的持久化存儲(chǔ)
方法一:
//docker run運(yùn)行一個(gè)容器,通過(guò)-v掛載一個(gè)卷 $docker run -d --name nginx -v /usr/share/nginx/html nginx//-d 守護(hù)進(jìn)程 --name指定名稱(chēng) -v掛載一個(gè)卷 nginx容器名稱(chēng) $docker inspect nginx //檢查核心位置:
$ ls /var/lib/docker/volumes/c92d78d64d6be29847ec12583cced83015d5fd43b6e43b5379463d3cf3110165/_data//會(huì)報(bào)無(wú)該目錄。原因是mac上多了一層虛擬層alphascreen ~/library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty//應(yīng)用上述命令即可進(jìn)入//退出screen ctrl + a?,再按?d?鍵暫時(shí)退出終端
方法二:volume本地目錄掛載到容器目錄中:
$mkdir html $vi index.html ##content start <html> <h1>docker volume學(xué)習(xí)!</h1> </html> ##content end$docker run -d -p 80:80 -v $PWD/html:/usr/share/nginx/html nginx//-d:后臺(tái)守護(hù)進(jìn)程 -p:端口映射(宿主機(jī):容器) //-v:數(shù)據(jù)卷 (本機(jī)目錄:容器目錄) nginx:鏡像 //$PWD:當(dāng)前目錄 //驗(yàn)證 curl http://localhost//修改本機(jī)index.html內(nèi)容。再將執(zhí)行curl。則容器index.html隨主機(jī)變化而變化。好處:只需要在本地修改,即可在容器中體現(xiàn)。
方法三:volume掛載一個(gè)容器到另一容器
//step1:創(chuàng)建一個(gè)目錄叫data $mkdir data//step2:創(chuàng)建一個(gè)容器,該容器僅僅用于存儲(chǔ)數(shù)據(jù) docker create -v $PWD/data:/var/mydata --name data_container ubuntu// -v:volume $PWD:當(dāng)前路徑 // /var/mydata容器中路徑,自定義 // -name指定容器名字 // ubuntu指定基礎(chǔ)鏡像//Step3:運(yùn)行并進(jìn)入容器內(nèi)部 $docker run -it --volumes-from data_container ubuntu /bin/bash//-it:交互式執(zhí)行 /bin/bash //--volumes-from指定從另外一個(gè)容器掛載。 //ubuntu:基礎(chǔ)鏡像//Step4: $ mount//Step5:進(jìn)入容器該目錄下 $ cd var/mydata//Step6:創(chuàng)建一個(gè)文件 $ vi volume.txt//Step7:退出 exit//Step8:查看本機(jī)data目錄下,已經(jīng)有volume.txt文件
應(yīng)用mount命令查看掛載目錄
進(jìn)入容器目錄,添加一個(gè)文件,在本地文件目錄/data下即可看到剛在容器中創(chuàng)建的目錄。
好處:新創(chuàng)建的數(shù)據(jù)容器可以被多個(gè)其他容器掛載,達(dá)到數(shù)據(jù)共享.?
13。Registry:鏡像倉(cāng)庫(kù)(SAAS服務(wù))
術(shù)語(yǔ):
國(guó)內(nèi)一些倉(cāng)庫(kù):daocloud/時(shí)速云/aliyun
14。docker-compose:多容器app
【1】安裝docker-compose
【2】實(shí)戰(zhàn)
Mac安裝:
https://docs.docker.com/docker-for-mac/edge-release-notes/#docker-community-edition-18050-ce-mac66-2018-05-17
轉(zhuǎn)載于:https://www.cnblogs.com/kaixinyufeng/p/9247151.html
總結(jié)
以上是生活随笔為你收集整理的001/Docker入门(Mooc)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 第四章 孤独
- 下一篇: MySQL-MMM架构部署(有图)