Docker知识点总结及其命令的使用
Docker
- Docker簡(jiǎn)介
- Docker與Tomcat有什么區(qū)別?
- Docker與虛擬機(jī)有什么區(qū)別?
- Docker的基本組成
- Docker的聯(lián)合文件系統(tǒng)
- Docker基本命令
- Docker中的幾個(gè)重要組件
- 一、容器數(shù)據(jù)卷
- 二、Dockerfile
- 三、Docker網(wǎng)絡(luò)
- 虛擬機(jī)共享網(wǎng)絡(luò)的三種方式
- Docker共享網(wǎng)絡(luò)的四種方式
- Docker中建立一個(gè)虛擬網(wǎng)絡(luò)
- Docker應(yīng)用:建立一個(gè)redis集群
- 引用
Docker簡(jiǎn)介
Docker 是一個(gè)開(kāi)源的應(yīng)用容器引擎,Docker 可以讓開(kāi)發(fā)者打包他們的應(yīng)用以及依賴包到一個(gè)輕量級(jí)、可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上,也可以實(shí)現(xiàn)虛擬化。傳統(tǒng)模式中,開(kāi)發(fā)人員只需要對(duì)Web應(yīng)用打包一個(gè)jar包放入linux服務(wù)器就可以,它可能需要使用很多環(huán)境(Redis,Mysql,JDK等等),這些環(huán)境會(huì)有運(yùn)維人員進(jìn)行配置(費(fèi)時(shí)費(fèi)力)。Docker就是提供一個(gè)鏡像(我們可以將jar包及其環(huán)境一同打包放入Docker倉(cāng)庫(kù)),這樣我們不管是將項(xiàng)目由Windows部署到Linux,或者其他人員想在他們的機(jī)器上運(yùn)行我們的項(xiàng)目只需下載這個(gè)鏡像即可。
Docker與Tomcat有什么區(qū)別?
Docker與虛擬機(jī)有什么區(qū)別?
Docker只包含項(xiàng)目運(yùn)行的核心鏡像(jar包+依賴環(huán)境 只有幾MB),而虛擬機(jī)包含一整個(gè)系統(tǒng)(Centos 幾十GB);
虛擬機(jī):
我們傳統(tǒng)的虛擬機(jī)需要模擬整臺(tái)機(jī)器包括硬件,每臺(tái)虛擬機(jī)都需要有自己的操作系統(tǒng),虛擬機(jī)一旦被開(kāi)啟,預(yù)分配給他的資源將全部被占用。每一個(gè)虛擬機(jī)包括應(yīng)用,必要的二進(jìn)制和庫(kù),以及一個(gè)完整的用戶操作系統(tǒng)。
Docker:
容器技術(shù)是和我們的宿主機(jī)共享硬件資源及操作系統(tǒng)可以實(shí)現(xiàn)資源的動(dòng)態(tài)分配。
容器包含應(yīng)用和其所有的依賴包,但是與其他容器共享內(nèi)核。容器在宿主機(jī)操作系統(tǒng)中,在用戶空間以分離的進(jìn)程運(yùn)行。
Docker容器代替了Hypervisor與虛擬系統(tǒng),實(shí)現(xiàn)進(jìn)程和資源的隔離
Docker的基本組成
Docker的聯(lián)合文件系統(tǒng)
聯(lián)合文件系統(tǒng)(UnionFs)是一種分層、輕量級(jí)并且高性能的文件系統(tǒng),它支持對(duì)文件系統(tǒng)的修改作為一次提交來(lái)一層層的疊加,同時(shí)可以將不同目錄掛載到同一個(gè)虛擬文件系統(tǒng)下。另外,不同 Docker 容器就可以共享一些基礎(chǔ)的文件系統(tǒng)層,同時(shí)再加上自己獨(dú)有的改動(dòng)層,大大提高了存儲(chǔ)的效率。
比如對(duì)于不同的linux發(fā)行版本Debian和BusyBox。他們都擁有兩個(gè)文件系統(tǒng)分別時(shí)BootFs和RootFS。BootFS 主要包含BootLoader 和Kernel, BootLoader主要是引導(dǎo)加載Kernel, 當(dāng)Boot成功后,Kernel被加載到內(nèi)存中。RootFS包含的就是典型 Linux 系統(tǒng)中的 /dev、/proc、/bin 等標(biāo)準(zhǔn)目錄和文件。他們的BootFS大體一致,RootFS稍有差別,所以他們可以使用聯(lián)合文件系統(tǒng)共享BootFS。
Linux在啟動(dòng)后,首先將RootFS 置為 Readonly,進(jìn)行一系列檢查后將其切換為Readwrite供用戶使用。在Docker中,也是利用該技術(shù),然后利用Union Mount在Readonly的RootFS文件系統(tǒng)之上掛載Readwrite文件系統(tǒng)。并且向上疊加, 使得一組Readonly和一個(gè)Readwrite的結(jié)構(gòu)構(gòu)成一個(gè)Container的運(yùn)行目錄、每一個(gè)被稱作一個(gè)文件系統(tǒng)Layer。
如上圖所示,兩個(gè)linux發(fā)行版本共用了底層的BootFS,并在上層添加屬于自己的獨(dú)特模塊。
所以我們可以看得出聯(lián)合文件系統(tǒng)的優(yōu)勢(shì):
? 多個(gè)Container可以共享父Image存儲(chǔ),節(jié)省存儲(chǔ)空間;
? 快速部署 – 如果要部署多個(gè)Container,Base Image可以避免多次拷貝,實(shí)現(xiàn)快速部署。
? 因?yàn)槎鄠€(gè)Container共享Image,提高多個(gè)Container中的進(jìn)程命中緩存內(nèi)容的幾率。
docker中將上層命名為容器層,下層命名為鏡像層。對(duì)于我們使用pull命令下載的文件都屬于鏡像層,即我們無(wú)法對(duì)其進(jìn)行修改,我們所做的修改操作(run命令)都會(huì)成為容器層添加到該層級(jí)之上。當(dāng)我們使用commit命令將我們修改的文件提交時(shí),它就合并為了一個(gè)新的鏡像層文件。
Docker基本命令
Example:使用docker部署Nginx服務(wù)器
---- docker run -d --name hello-nginx -p 8085:80
-v 外部路徑(主機(jī)):內(nèi)部路徑(容器) --volume-from 容器名 nginx
即我們啟動(dòng)一個(gè)名為hello-nginx的服務(wù)運(yùn)行在后臺(tái),nginx默認(rèn)運(yùn)行在容器內(nèi)80端口,我們將其映射到外部的8085端口。并且掛載容器路徑下的對(duì)應(yīng)文件夾/文件 到 外部路徑下的對(duì)應(yīng)文件夾/文件,實(shí)現(xiàn)二者的映射,這樣,我們通過(guò)修改外部文件就可以修改容器內(nèi)部的配置。最后我們將這個(gè)容器的目錄與另一個(gè)容器相互共享,這樣一來(lái)兩個(gè)容器的數(shù)據(jù)將完全同步。
Docker中的幾個(gè)重要組件
一、容器數(shù)據(jù)卷
數(shù)據(jù)卷是一個(gè)可供容器使用的特殊目錄,它將主機(jī)操作系統(tǒng)目錄直接映射進(jìn)容器(二者的數(shù)據(jù)是同步的),類似于Linux中的mount操作。
借由數(shù)據(jù)卷技術(shù),比如我們?cè)谑褂肕ysql時(shí),我們可以保證其儲(chǔ)存的數(shù)據(jù)不會(huì)丟失。
我們通過(guò)建立容器時(shí)在后面加入-v命令實(shí)現(xiàn)掛載
匿名掛載: -v 容器內(nèi)路徑
具名掛載: -v 卷名:容器內(nèi)路徑 docker volume inspect 卷名 查看掛載具體信息
路徑掛載: -v 主機(jī)路徑:容器內(nèi)路徑 這里最好使用全路徑避免出錯(cuò)
容器間掛載: --volume-from 容器名
二、Dockerfile
Dockerfile 是一個(gè)用來(lái)構(gòu)建鏡像的文本文件,文本內(nèi)容包含了一條條構(gòu)建鏡像所需的指令和說(shuō)明。
DockerImages是通過(guò)DockerFile的定義來(lái)生成相應(yīng)的鏡像。
DockerContainer是為鏡像的運(yùn)行提供運(yùn)行環(huán)境。
常用Dockerfile關(guān)鍵字:
這里給出一個(gè)簡(jiǎn)單構(gòu)建Dockerfile的例子:
- 我們建立一個(gè)文件夾,里面存放要放入鏡像的內(nèi)容(如readme.txt),鏡像構(gòu)造文件(DockerFile)以及想要放入鏡像中的上層鏡像文件。
- 編寫一個(gè)簡(jiǎn)單Dockerfile
- docker build 構(gòu)建成為一個(gè)鏡像
docker build -f dockerfile -t 新鏡像名:版本號(hào) . -----注意版本號(hào)可有可無(wú)以及最后要加個(gè)點(diǎn) - docker run 運(yùn)行鏡像
- docker push 發(fā)布鏡像
總結(jié)
Dockerfile構(gòu)建全流程:
三、Docker網(wǎng)絡(luò)
虛擬機(jī)共享網(wǎng)絡(luò)的三種方式
-----如果你想利用VMWare在局域網(wǎng)內(nèi)新建一個(gè)虛擬服務(wù)器,為局域網(wǎng)用戶提供網(wǎng)絡(luò)服務(wù),就應(yīng)該選擇橋接模式。
-----如果你想利用VMWare安裝一個(gè)新的虛擬系統(tǒng),在虛擬系統(tǒng)中不用進(jìn)行任何手工配置就能直接訪問(wèn)互聯(lián)網(wǎng),建議你采用NAT模式。
-----如果你想利用VMWare創(chuàng)建一個(gè)與網(wǎng)內(nèi)其他機(jī)器相隔離的虛擬系統(tǒng),進(jìn)行某些特殊的網(wǎng)絡(luò)調(diào)試工作,可以選擇host-only模式。
Docker共享網(wǎng)絡(luò)的四種方式
Docker中建立一個(gè)虛擬網(wǎng)絡(luò)
docker中所有容器默認(rèn)加入docker0網(wǎng)絡(luò),即bridge網(wǎng)絡(luò)
我們通過(guò)docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 net_5yw (使用橋接模式,建立了一個(gè)192.168.0.0網(wǎng)段,其中包含65536個(gè)子網(wǎng),同時(shí)我們將這個(gè)網(wǎng)段的路由設(shè)置為192.168.0.1,并為這個(gè)網(wǎng)絡(luò)命名為net_5yw)
之后,我們就可以通過(guò)docker run -d --name tomcatnet02 --net net_5yw 75b0d03def36 (將容器加入指定的網(wǎng)絡(luò),這里如果不聲明,則會(huì)默認(rèn)加入docker0)
這樣做,有助于不同容器集群之間的網(wǎng)絡(luò)隔離,提高隔離性與安全性,同時(shí),同一網(wǎng)絡(luò)下,我們可以使用容器名直接相互ping通(docker0還是只可以ping IP,只有自己配置的才可以ping容器名),而無(wú)需使用–link進(jìn)行單獨(dú)配置。
完成后,我們可以使同一網(wǎng)絡(luò)下的容器相互連接(ping通)。
注:tomcatnet03在docker0(172.17.0.0),存在另一網(wǎng)絡(luò)net_5yw(192.168.0.0)
docker exec -it tomcatnet03 ping 192.168.0.3 發(fā)現(xiàn)無(wú)法ping通
如果我們要實(shí)現(xiàn)不同網(wǎng)絡(luò)相互連接,我們可以通過(guò)docker network connect net_5yw tomcatnet03
docker exec -it tomcatnet03 ping 192.168.0.3 此時(shí)已經(jīng)可以ping通
此時(shí),tomcatnet03同時(shí)存在于docker0與net_5yw中,并同時(shí)擁有兩個(gè)網(wǎng)絡(luò)下的IP地址。所以可以和兩個(gè)網(wǎng)絡(luò)下其他所有的容器通信
Docker應(yīng)用:建立一個(gè)redis集群
使用建立好的配置文件在docker中開(kāi)啟6個(gè)redis-server
docker run -d
-p 6376:6379 -p 16376:16379 --name redis06 //配置其映射端口和名稱
-v /home/ostrich5yw/Desktop/DockerMap/Redis/node-6/data:/data //掛載數(shù)據(jù)庫(kù)以及配置文件
-v /home/ostrich5yw/Desktop/DockerMap/Redis/node-6/conf/redis.conf:/etc/redis/redis.conf
–net redisCluster --ip 172.72.0.16 redis redis-server /etc/redis/redis.conf //將其加入建立好的網(wǎng)絡(luò)
建立集群
redis-cli --cluster create 172.72.0.11:6379 172.72.0.12:6379 172.72.0.13:6379 172.72.0.14:6379 172.72.0.15:6379 172.72.0.16:6379 --cluster-replicas 1 //末尾參數(shù)表示以1的比例劃分主從節(jié)點(diǎn)
redis-cli -c //集群模式開(kāi)啟客戶端
cluster info //查看集群狀態(tài)
cluster nodes //查看集群節(jié)點(diǎn)
引用
本文根據(jù)遇見(jiàn)狂神說(shuō)的Docker視頻編寫。
總結(jié)
以上是生活随笔為你收集整理的Docker知识点总结及其命令的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 生活小感想3
- 下一篇: 《软件测试的艺术》读后感及笔记集合