日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Docker知识点总结及其命令的使用

發(fā)布時(shí)間:2023/12/10 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker知识点总结及其命令的使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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 是容器,tomcat是(servlet)jsp應(yīng)用服務(wù)器
  • tomcat可以安裝在物理機(jī)上,虛擬機(jī)上,也可以安裝在Docker上。所以從這個(gè)角度講,Docker也可以看做是一種超輕量化的虛擬機(jī)。
  • Docker可以安裝在物理機(jī),虛擬機(jī)上,但不知道Docker上面是否可以再安裝Docker,我覺(jué)得理論上應(yīng)該可以。
  • Docker作為超輕量級(jí)的平臺(tái),可以整體移植,這也是它流行的其中一個(gè)原因。
  • 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 鏡像(Image)就是一個(gè)只讀的模板。鏡像可以用來(lái)創(chuàng)建 Docker 容器,一個(gè)鏡像可以創(chuàng)建很多容器。
  • 容器:Docker 利用容器(Container)獨(dú)立運(yùn)行的一個(gè)或一組應(yīng)用。容器是用鏡像創(chuàng)建的運(yùn)行實(shí)例。它可以被啟動(dòng)、開(kāi)始、停止、刪除。每個(gè)容器都是相互隔離的、保證安全的平臺(tái)。可以把容器看做是一個(gè)簡(jiǎn)易版的 Linux 環(huán)境(包括root用戶權(quán)限、進(jìn)程空間、用戶空間和網(wǎng)絡(luò)空間等)和運(yùn)行在其中的應(yīng)用程序。事實(shí)上容器就是一個(gè)可讀可寫的鏡像文件。
  • 倉(cāng)庫(kù):集中存放鏡像文件的場(chǎng)所。倉(cāng)庫(kù)(Repository)和倉(cāng)庫(kù)注冊(cè)服務(wù)器(Registry)是有區(qū)別的。倉(cāng)庫(kù)注冊(cè)服務(wù)器上往往存放著多個(gè)倉(cāng)庫(kù),每個(gè)倉(cāng)庫(kù)中又包含了多個(gè)鏡像,每個(gè)鏡像有不同的標(biāo)簽(tag)。
  • 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ù)據(jù)將變得高效方便;
  • 對(duì)數(shù)據(jù)卷內(nèi)數(shù)據(jù)的修改會(huì)立馬生效,無(wú)論是容器內(nèi)操作還是本地操作;
  • 對(duì)數(shù)據(jù)卷的更新不會(huì)影響鏡像,解耦了應(yīng)用和數(shù)據(jù);
  • 卷會(huì)一直存在,直到?jīng)]有容器使用,可以安全地卸載它。
    借由數(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
    FROM centosMAINTAINER XXX<XXX@gmail.com>COPY readme.txt /usr/local/readme.txt ADD jdk-8u271-linux-x64.tar.gz /usr/local ADD apache-tomcat-8.5.61.tar.gz /usr/localRUN yum -y install vim //由于原centos鏡像是閹割版,我們要為其安裝自定內(nèi)容RUN yum -y install net-toolsENV MYPATH /usr/local //定義我們的工作目錄WORKDIR $MYPATHENV JAVA_HOME /usr/local/jdk1.8.0_271 //為引入的鏡像配置環(huán)境變量ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarENV CATALINA_HOME /usr/local/apache-tomcat-8.5.61ENV CATALINA_BASH /usr/local/apache-tomcat-8.5.61ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin EXPOSE 8080 //為Tomcat暴露其8080端口CMD /usr/local/apache-tomcat-8.5.61/bin/startup.sh && tail -F /url/local/apache-tomcat-8.5.61/bin/logs/catalina.out && /bin/bash //打開(kāi)Tomcat并顯示日志文件,注意如果不默認(rèn)開(kāi)啟tomcat服務(wù),則這個(gè)鏡像沒(méi)有默認(rèn)運(yùn)行的進(jìn)程,docker run不會(huì)生效
    • 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ā)布鏡像
    docker login ---登錄Dockerhub賬號(hào)(我們也可以通過(guò)阿里云容器服務(wù)提供的賬號(hào),將鏡像push到阿里云服務(wù)器上)docker tag 原鏡像名 dockerhub賬戶名/鏡像名:版本號(hào) ---重新生成一個(gè)帶賬戶名和版本號(hào)的鏡像docker push dockerhub賬戶名/鏡像名:版本號(hào)docker logout ---退出當(dāng)前賬號(hào)

    總結(jié)
    Dockerfile構(gòu)建全流程:

    三、Docker網(wǎng)絡(luò)

    虛擬機(jī)共享網(wǎng)絡(luò)的三種方式

  • Bridged(橋接模式):虛擬系統(tǒng)和宿主機(jī)器的關(guān)系,就像連接在同一個(gè)Hub上的兩臺(tái)電腦。從網(wǎng)絡(luò)技術(shù)上理解相當(dāng)于在宿主機(jī)前端加設(shè)了一個(gè)虛擬交換機(jī),然后宿主機(jī)和所有虛擬機(jī)共享這個(gè)交換機(jī)。
    -----如果你想利用VMWare在局域網(wǎng)內(nèi)新建一個(gè)虛擬服務(wù)器,為局域網(wǎng)用戶提供網(wǎng)絡(luò)服務(wù),就應(yīng)該選擇橋接模式。
  • NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換模式):虛擬系統(tǒng)借助NAT的功能,通過(guò)宿主機(jī)所在的網(wǎng)絡(luò)來(lái)訪問(wèn)公網(wǎng)。在這種模式下宿主機(jī)成為雙網(wǎng)卡主機(jī),同時(shí)參與現(xiàn)有的宿主局域網(wǎng)和新建的虛擬局域網(wǎng),但由于加設(shè)了一個(gè)虛擬的NAT服務(wù)器,使得虛擬局域網(wǎng)內(nèi)的虛擬機(jī)在對(duì)外訪問(wèn)時(shí),使用的則是宿主機(jī)的IP地址,這樣從外部網(wǎng)絡(luò)來(lái)看,只能看到宿主機(jī),完全看不到新建的虛擬局域網(wǎng)。
    -----如果你想利用VMWare安裝一個(gè)新的虛擬系統(tǒng),在虛擬系統(tǒng)中不用進(jìn)行任何手工配置就能直接訪問(wèn)互聯(lián)網(wǎng),建議你采用NAT模式。
  • Host-only(主機(jī)模式):從網(wǎng)絡(luò)技術(shù)上講相當(dāng)于為宿主機(jī)增添了一個(gè)虛擬網(wǎng)卡,讓宿主機(jī)變成一臺(tái)雙網(wǎng)卡主機(jī)(宿主網(wǎng)卡+虛擬網(wǎng)卡)。同時(shí)在宿主機(jī)后端加設(shè)一個(gè)虛擬交換機(jī),讓宿主機(jī)和所有虛擬機(jī)構(gòu)成另一個(gè)虛擬的局域網(wǎng)。由于具備雙網(wǎng)卡,宿主機(jī)可同時(shí)參與兩個(gè)局域網(wǎng)(現(xiàn)有的宿主局域網(wǎng)+新建的虛擬局域網(wǎng)),只不過(guò)缺省情況下兩個(gè)局域網(wǎng)不連通。
    -----如果你想利用VMWare創(chuàng)建一個(gè)與網(wǎng)內(nèi)其他機(jī)器相隔離的虛擬系統(tǒng),進(jìn)行某些特殊的網(wǎng)絡(luò)調(diào)試工作,可以選擇host-only模式。
  • Docker共享網(wǎng)絡(luò)的四種方式

  • Host模式:容器使用宿主機(jī)的IP和端口。但是,容器的其他方面,如文件系統(tǒng)、進(jìn)程列表等還是和宿主機(jī)隔離的。并且docker host上已經(jīng)使用的端口就不能再用了。
  • Container模式:指定新創(chuàng)建的容器和已經(jīng)存在的一個(gè)容器共享一個(gè) Network Namespace,而不是和宿主機(jī)共享。新創(chuàng)建的容器不會(huì)創(chuàng)建自己的網(wǎng)卡,配置自己的 IP,而是和一個(gè)指定的容器共享 IP、端口范圍等。兩個(gè)容器的進(jìn)程可以通過(guò) lo 網(wǎng)卡設(shè)備通信。
  • None模式:Docker容器擁有自己的Network Namespace,但是,并不為Docker容器進(jìn)行任何網(wǎng)絡(luò)配置。也就是說(shuō),這個(gè)Docker容器沒(méi)有網(wǎng)卡、IP、路由等信息。需要我們自己為Docker容器添加網(wǎng)卡、配置IP等。
  • Bridge模式:當(dāng)Docker進(jìn)程啟動(dòng)時(shí),會(huì)在主機(jī)上創(chuàng)建一個(gè)名為docker0的虛擬網(wǎng)橋,此主機(jī)上啟動(dòng)的Docker容器會(huì)連接到這個(gè)虛擬網(wǎng)橋上。從docker0子網(wǎng)中分配一個(gè)IP給容器使用,并設(shè)置docker0的IP地址為容器的默認(rèn)網(wǎng)關(guān)。Docker會(huì)在主機(jī)上創(chuàng)建一對(duì)虛擬網(wǎng)卡veth pair設(shè)備,Docker將veth pair設(shè)備的一端放在新創(chuàng)建的容器中,并命名為eth0(容器的網(wǎng)卡),另一端放在主機(jī)中,以vethxxx這樣類似的名字命名,并將這個(gè)網(wǎng)絡(luò)設(shè)備加入到docker0網(wǎng)橋中。
  • 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集群

  • 建立腳本,創(chuàng)建6個(gè)redis.conf配置文件
  • for port in $(seq 1 6); do mkdir -p DockerMap/Redis/node-${port}/conf touch DockerMap/Redis/node-${port}/conf/redis.conf cat << EOF >DockerMap/Redis/node-${port}/conf/redis.conf port 6379 bind 0.0.0.0 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 cluster-announce-ip 172.72.0.1${port} cluster-announce-port 6379 cluster-announce-bus-port 16379 appendonly yes EOF done
  • 使用建立好的配置文件在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)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。