国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

docker入門,這一篇就夠了。

這篇具有很好參考價(jià)值的文章主要介紹了docker入門,這一篇就夠了。。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Docker入門,這一篇就夠了。

Docker容器虛擬化平臺(tái)。

前言

今天跟大家分享一下我的docker學(xué)習(xí)歷程,也算是我的獨(dú)特的復(fù)習(xí)筆記,我會(huì)在這一篇中講清楚docker幾乎所有的功能。不過也是我第一次寫,而且是一篇兩萬多字的長(zhǎng)文,花了我半個(gè)月里所有的休閑娛樂時(shí)間,所以寫的不好的地方請(qǐng)大家見諒,也請(qǐng)?jiān)谠u(píng)論區(qū)斧正,謝謝大家的理解。

一、Docker背景介紹。

1、什么是docker。

docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維

Docker,翻譯過來就是碼頭工人

Docker是一個(gè)開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可抑制的容器中,然后發(fā)布到任何流行的Linux機(jī)器上,也可以實(shí)現(xiàn)虛擬化。容器完全使用沙盒機(jī)制,相互之間不會(huì)存在任何接口。幾乎沒有性能開銷,可以很容易的在機(jī)器和數(shù)據(jù)中心運(yùn)行。最重要的是,他們不依賴于任何語言、框架或者包裝系統(tǒng)。

小知識(shí):沙盒也叫沙箱(sandbox)。在計(jì)算機(jī)領(lǐng)域指一種虛擬技術(shù),而且多用于計(jì)算機(jī)安全技術(shù)。安全軟件可以讓它在沙盒中運(yùn)行,如果含有惡意行為,則禁止程序的進(jìn)一步運(yùn)行,而這不會(huì)對(duì)系統(tǒng)造成任何危害。

Docker是dotCloud公司開源的一個(gè)基于LXC的高級(jí)容器引擎,源碼托管在Github上,基于go語言并且遵從Apache2.0協(xié)議開源。
GitHub地址:https://github.com/moby/moby

小知識(shí):LXC為L(zhǎng)inux Container的簡(jiǎn)寫。Linux Container 容器是一種內(nèi)核虛擬化技術(shù),可以提供輕量級(jí)的虛擬化,以便隔離進(jìn)程和資源,而且不需要提供指令解釋機(jī)制以及全虛擬化的其他復(fù)雜性。
LXC主要通過Kernel的namespace實(shí)現(xiàn)每個(gè)用戶實(shí)例之間的項(xiàng)目隔離,通過cgroup實(shí)現(xiàn)對(duì)資源的配額和調(diào)度。

docker官網(wǎng):https://www.docker.com
docker中文庫:https://www.docker.org.cn/

2、Docker容器技術(shù)與虛擬機(jī)的區(qū)別。

相同點(diǎn):docker和容器技術(shù)和虛擬機(jī)技術(shù),都是虛擬化技術(shù)。

不同點(diǎn)
虛擬機(jī)技術(shù):
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維

容器技術(shù):
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維

通過圖片,我們很明顯的看到docker有著比虛擬機(jī)更少的抽象層。 由于docker不需要Hypervisor實(shí)現(xiàn)硬件資源虛擬化,運(yùn)行在docker容器上的程序直接使用的都是實(shí)際物理機(jī)的硬件資源。所以docker效率比虛擬機(jī)效率高。達(dá)到了秒級(jí)啟動(dòng)的地步。

docker相較于VM的優(yōu)點(diǎn)
1、比VM小、快,Docker容器的尺寸減小相比于整個(gè)虛擬機(jī)大大簡(jiǎn)化了分布
到云和分發(fā)時(shí)間的開銷。Docker啟動(dòng)一個(gè)容器實(shí)例時(shí)間僅僅需要幾秒鐘。

2、Docker是一個(gè)開放的平臺(tái),構(gòu)建、發(fā)布和運(yùn)行分布式應(yīng)用程序。

3、開發(fā)人員不需要關(guān)系具體是哪個(gè)Linux操作系統(tǒng)

4、Google、微軟(azure)、亞馬遜、IBM等都支持docker。

5、Docker支持Unix/Linux操作系統(tǒng),也支持Windows和Mac。

Docker局限性:
Docker用于應(yīng)用程序時(shí)是最有用的,但并不包含數(shù)據(jù)。日志、數(shù)據(jù)庫等通常放在Docker容器外。一個(gè)容器的鏡像通常都很小,不用和存儲(chǔ)大量數(shù)據(jù),存儲(chǔ)可以通過外部掛載等方式使用,比如:NFS、ipsan、MFS等 ,或者docker命令 ,-v映射磁盤分區(qū)。
總之,docker只用于計(jì)算,存儲(chǔ)交給別人。

3、通過docker架構(gòu)圖初步了解docker。

docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
等了解了docker之后,這張圖所代表的的內(nèi)容就很清晰明了,希望大家學(xué)完docker之后還能回來看看這張圖。這里簡(jiǎn)單給大家介紹一下docker的工作流程。
工作流程:
1、啟動(dòng)docker
2、下載鏡像到本地
3、啟動(dòng)docker容器實(shí)例
提示:大家可以去注冊(cè)一個(gè)dockerhub,之后會(huì)詳細(xì)給大家講解它的作用(非常重要!連docker hub賬號(hào)都沒有,玩什么docker!)。

Docker核心技術(shù):
1、Namespace —> 實(shí)現(xiàn)Container的進(jìn)程、網(wǎng)絡(luò)、消息、文件系統(tǒng)和主機(jī)名的隔離。
2、Cgroup —> 實(shí)現(xiàn)對(duì)資源的配額和調(diào)度。
注意:Cgroup的配額,可以指定實(shí)例使用的CPU個(gè)數(shù),內(nèi)存大小等。

4、Docker特性。

文件系統(tǒng)隔離:每個(gè)進(jìn)程容器運(yùn)行在一個(gè)完全獨(dú)立的根文件系統(tǒng)里。

資源隔離:系統(tǒng)資源,像CPU和內(nèi)存等可以分配到不同的容器中,使用cgroup。
網(wǎng)絡(luò)隔離:每個(gè)進(jìn)程容器運(yùn)行在自己的網(wǎng)路空間,虛擬接口和IP地址。

日志記錄:Docker將收集到和記錄的每個(gè)進(jìn)程容器的標(biāo)準(zhǔn)流(stdout/stderr/stdin),用于實(shí)時(shí)檢索或者批量檢索

變更管理:容器文件系統(tǒng)的變更可以提交到新的鏡像中,并可重復(fù)使用以創(chuàng)建更多的容器。無需使用模板或者手動(dòng)配置。

交互式shell:Docker可以分配一個(gè)虛擬終端并且關(guān)聯(lián)到任何容器的標(biāo)準(zhǔn)輸出上,例如運(yùn)行一個(gè)一次性交互shell。

二、Docker的安裝。

1、docker安裝背景。

首先我問大家一個(gè)問題,你們知道docker有幾種安裝方式嗎?
它們又有那些區(qū)別呢?
Docker安裝:

1、yum -y install docker
2、yum -y install docker-engine
3、yum -y install docker-ce

是的,有三種安裝方式,而且,它們都是正確的!
因?yàn)镈ocker最早的版本名是docker和docker-engin,現(xiàn)在的名字是docker-ce和docker-ee。有興趣的小伙伴可以通過下方鏈接去官網(wǎng)查看。

https://docs.docker.com/engine/install/centos/
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
2017年初,docker公司將原先的docker開源項(xiàng)目改名為moby。
moby是集成了原先的docker項(xiàng)目,是社區(qū)維護(hù)的開源項(xiàng)目,誰都可以在moby的基礎(chǔ)打造自己的容器產(chǎn)品。
docker-ce 是docker公司維護(hù)的開源項(xiàng)目,是一個(gè)基于moby項(xiàng)目的免費(fèi)容器產(chǎn)品。
docker-ee 是docker公司維護(hù)的閉源產(chǎn)品,是docker公司的商業(yè)昌平。
注:moby是源代碼,docker-ce 和docker-ee 是產(chǎn)品容器,rpm包。
所以,目前我們經(jīng)常使用的版本當(dāng)然是docker-ce啦!

2、部署docker容器虛擬化平臺(tái)并且配置docker鏡像加速地址。

實(shí)驗(yàn)環(huán)境:centos7.6 64位。網(wǎng)絡(luò)要求能上外網(wǎng)。

3、安裝docker依賴環(huán)境。

yum install -y yum-utils device-mapper-persistent-data lvm2

docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
這里作者已經(jīng)安裝過了,所以提示Nothing to do。

4、配置國(guó)內(nèi)docker-ce的yum源(這里采用的是阿里云)

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum-config-manager命令作用是添加yum源。
敲完命令之后大家執(zhí)行一下命令去看一下有沒有配置成功。

cd /etc/yum.repos.d
ls

docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
看到上圖中的框框里的內(nèi)容就代表配置成功了。

5、安裝docker。

yum -y install docker-ce doker-ce-cli containerd.io

安裝速度可能會(huì)比較慢,請(qǐng)耐心等待。
docker-ce:docker程序
docker-ce-cli:
如果不知道包名的作用,可以使用yum info 程序 命令查看

6、開啟網(wǎng)絡(luò)轉(zhuǎn)發(fā)功能。

默認(rèn)會(huì)自動(dòng)開啟。
路徑 :/proc/sys/net/ipv4/ip_forward
手動(dòng)開啟:

vim /etc/sysctl.conf   #插入以下內(nèi)容
net.ipv4.forward =1
-------------------------
sysctl -p   #生效
cat /proc/sys/net/ipv4/ip_forward  #查看結(jié)果,為1開啟成功。

如果沒有開啟網(wǎng)絡(luò)轉(zhuǎn)發(fā),我們啟動(dòng)實(shí)例的時(shí)候就會(huì)報(bào)錯(cuò)?。。?/strong>

關(guān)閉防火墻:

iptables -nL #查看一下iptable規(guī)則,關(guān)閉防火墻后會(huì)自動(dòng)插入新規(guī)則

systemctl stop firewalld && systemctl disable firewalld  #關(guān)閉防火墻

sysctlrem restart docker # 關(guān)閉防火墻要把docker重啟一下,不然docker
的ip包轉(zhuǎn)發(fā)功能無法使用。即便防火墻關(guān)閉了,docker依舊會(huì)調(diào)用內(nèi)核模塊netfilter增加規(guī)則,所以會(huì)新增iptables規(guī)則

iptables -nL #再查看一下iptable規(guī)則,會(huì)發(fā)現(xiàn)多出很多規(guī)則

iptables -nL
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維

7、啟動(dòng)服務(wù)。

systemctl start docker && systemctl enable docker

啟動(dòng)完成后會(huì)該網(wǎng)絡(luò)參數(shù),這個(gè)是ip轉(zhuǎn)發(fā)會(huì)改成1。默認(rèn)0
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
這里簡(jiǎn)單教大家第一個(gè)docker命令,docker version查看docker版本。

docker version #查看docker版本

docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
這里我們很清晰的可以看到docker是一個(gè)C/S架構(gòu)的模式??蛻舳耸俏覀兊拿钚胁僮?,服務(wù)端是一個(gè)守護(hù)進(jìn)程。

docker info  #查看docker基本信息

我們可以通過docker info看到機(jī)器存放docker鏡像得地址,也可以看到docker倉庫的地址。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維

三、docker入門命令。

1、搜索鏡像

docker search

docker search centos #從docker hub中搜索docker名為centos的鏡像

docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
大家可以看到搜索出來的最上一行有幾個(gè)表頭,這里給大家介紹一下
name:代表此鏡像的名稱

description:此鏡像的描述

stars:下載次數(shù)

official:是否由官方提供(官方提供可放心下載,可以基于此鏡像做自己的鏡像)

2、拉取鏡像。

docker pull ,默認(rèn)是拉去docker hub上搜索到的最新版本(第一個(gè))。

docker pull centos

docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
注意,如果這里報(bào)錯(cuò),TLS handshake timeout,那就是網(wǎng)絡(luò)原因?qū)е鲁瑫r(shí),嘗試多pull幾次。下面介紹配置鏡像加速。

使用阿里云docker鏡像加速器。
地址:https://cr.console.aliyun.com的控制臺(tái),使用支付寶賬號(hào)登錄,左側(cè)加速器幫助頁面會(huì)為你顯示獨(dú)立的加速地址,這個(gè)加速地址每個(gè)人的都不同。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
可以通過修改daemon配置文件/etc/docker/daemon.json來使用加速器。
把自己的專屬加速地址放到下面的地址改一下,寫入文件就可以了。

{
  "registry-mirrors": ["https://eu5rxjvf.mirror.aliyuncs.com"]
}

systemctl daemon-reload  #啟動(dòng)配置
systemctl restart docker  #重啟docker服務(wù)

配置好了之后,我們使用之前學(xué)的命令,docker info查看一下是否新增了阿里云的地址。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
可以看到此地址,代表配置成功。

然后繼續(xù)使用docker pull centos,下載速度會(huì)很快。(由于作者已經(jīng)下載了centos,這里使用tomcat鏡像演示)

3、查看鏡像。

拉去之后我們要如何看到我們下載下來的鏡像呢,這里我們就需要學(xué)習(xí)一個(gè)新命令。docker images,查看已下載鏡像。

docker images  #查看已下載鏡像。

docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
好了,這樣就拉取下來了。

4、使用U盤的方式導(dǎo)入鏡像。

比如把docker-centos-httpd.tar鏡像上傳到linux上,就需要用到==docker load -i ==命令。(記得帶上路徑,這里作者沒有錢買U盤,就不演示了)

docker load -i /root/docker-centos-httpd.tar

導(dǎo)入之后可以使用docker images查看。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
注意上圖,tag代表標(biāo)簽,image id代表鏡像ID。這是我們區(qū)別鏡像的方式。
另外提一下,還有一種直接下載其他站點(diǎn)鏡像的方法,命令如下:

docker pull hub.c.163.com/library/tomcat:latest

注:docker鏡像相當(dāng)于,對(duì)程序+程序依賴的庫直接打包(后期詳細(xì)解釋)。

四、Docker平臺(tái)的基本使用方法。

很開心大家耐心的看到了這里,接下來我就會(huì)詳細(xì)講解docker的使用方法。

1、幫助命令。

docker version     #顯示docker詳細(xì)信息
docker info       #顯示docker的系統(tǒng)信息,包括鏡像和容器的數(shù)量
docker --help     #docker幫助命令手冊(cè)

2、鏡像命令。

docker images  #查看所有本地主機(jī)的鏡像
docker search 鏡像名           #搜索鏡像
docker pull 鏡像名 [標(biāo)簽]      #下載鏡像(如果不寫tag,默認(rèn)是latest)
docker rmi 鏡像名 [標(biāo)簽]       #刪除鏡像    docker rmi -f $(docker images -aq)  刪除全部鏡像
docker tag  鏡像名:版本   新鏡像名:版本    #復(fù)制鏡像并且修改名稱
docker commit  -a "xxx"  -c "xxx" 鏡像ID 名字:版本   #提交鏡像 
-a :提交的鏡像作者;
-c :使用Dockerfile指令來創(chuàng)建鏡像;
-m :提交時(shí)的說明文字;

docker load -i    /xxx/xxx.tar         #導(dǎo)入鏡像
docker save -o   /xxx/xxx.tar          #保存一個(gè)鏡像為一個(gè)tar包

3、容器命令。

docker run [可選參數(shù)] image 命令 #啟動(dòng)容器(無鏡像會(huì)先下載鏡像)
#參數(shù)說明
--name = "Name"   容器名字
-c   后面跟待完成的命令
-d   以后臺(tái)方式運(yùn)行并且返回ID,啟動(dòng)守護(hù)進(jìn)程式容器
-i   使用交互方式運(yùn)行容器,通常與t同時(shí)使用
-t   為容器重新分配一個(gè)偽輸入終端。也即啟動(dòng)交互式容器
-p   指定容器端口    -p 容器端口:物理機(jī)端口  映射端口
-P   隨機(jī)指定端口
-v   給容器掛載存儲(chǔ)卷

docker build  #創(chuàng)建鏡像        -f:指定dockerfile文件路徑   -t:鏡像名字以及標(biāo)簽
docker logs 容器實(shí)例的ID          #查看容器日志
docker rename 舊名字  新名字      # 給容器重新命名
docker top    容器實(shí)例的ID                  #查看容器內(nèi)進(jìn)程
docker ps -a                    #列出所有容器(不加-a就是在運(yùn)行的)
docker rm      容器實(shí)例的ID                 #刪除容器(正在運(yùn)行容器不能刪除,除非加-f選項(xiàng))
docker kill  容器實(shí)例的ID        #殺掉容器
docker history   容器實(shí)例的ID    #查看docker鏡像的變更歷史
docker start 容器實(shí)例的ID        #啟動(dòng)容器
docker restart 容器實(shí)例的ID       #重啟容器
docker stop 容器實(shí)例的ID         #停止正在運(yùn)行的容器
docker attach /docker exec  容器實(shí)例的ID   #同為進(jìn)入容器命令,不同的是attach連接終止會(huì)讓容器退出后臺(tái)運(yùn)行,而exec不會(huì)。并且,docker attach是進(jìn)入正在執(zhí)行的終端,不會(huì)情動(dòng)新的進(jìn)程,而docker exec則會(huì)開啟一個(gè)新的終端,可以在里面操作。
docker image inspect  容器名稱:容器標(biāo)簽       #查看容器內(nèi)源數(shù)據(jù)
docker cp  容器id:容器內(nèi)路徑   目的主機(jī)路徑           #從容器內(nèi)拷貝文件到主機(jī)(常用)或者從主機(jī)拷貝到容器(一般用掛載)
exit                           #直接退出容器 
crlt + P + Q                   #退出容器但是不終止運(yùn)行

五、實(shí)戰(zhàn)測(cè)試:部署Nginx。

1、搜索鏡像。

docker search nginx
搜索到的這些鏡像代表什么意思之前已經(jīng)講過了,這里我們直接選用最新版本的。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維

2、下載鏡像。

docker pull nginx
未指定nginx則直接下載最新版本
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維

3、查看鏡像。

docker images
這里有作者下載的其他鏡像。第一個(gè)就是我們剛剛下載的鏡像。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維

4、啟動(dòng)容器。

docker run -d --name nginx01 -p 80:80 nginx
e56開頭那個(gè)就是容器ID
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維

5、查看容器。

docker ps
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維

6、測(cè)試訪問。

curl 127.0.0.1:80
127.0.0.1是本地回環(huán)ip,就是本機(jī)啦,可以用localhost代替。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維

7、進(jìn)入容器修改頁面。

docker exec -it 容器ID /bin/bash
whereis是一個(gè)搜索文件的小命令,不如find好用但是簡(jiǎn)潔。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維

8、外網(wǎng)訪問。

用公網(wǎng)IP,這里作者有域名(順便給自己的網(wǎng)站打個(gè)廣告,作者喜歡寫東西,如果有投稿之類的可以留言,我會(huì)篩選之后放到我的博客網(wǎng)站,當(dāng)然也歡迎大家加入我,一起創(chuàng)建文字社區(qū)。
地址http://xiaodengzhp.xyz/wordpress/),所以用域名代替了。(注意,外網(wǎng)IP需要在云平臺(tái)打開端口,由于作者偷懶映射的80,所以沒有去打開,如果是其他端口,就要去打開。)
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
另外,像docker top 、docker cp、 docker stop等等命令這里就不再演示了,大家有興趣的可以自行測(cè)試。
到了這里,相信你已經(jīng)對(duì)docker有了一定的理解,應(yīng)該能嘗試著自己?jiǎn)?dòng)容器了吧。

9、實(shí)戰(zhàn)總結(jié)。

有的小伙伴不理解為什么要加/bin/bash,或者什么時(shí)候該加什么時(shí)候不加,這里我給大家解釋一下。
我們先看docker run的命令參數(shù)。

docker run [可選參數(shù)] image 命令 #啟動(dòng)容器(無鏡像會(huì)先下載鏡像)
#參數(shù)說明
--name = "Name"   容器名字
-c   后面跟待完成的命令
-d   以后臺(tái)方式運(yùn)行并且返回ID,啟動(dòng)守護(hù)進(jìn)程式容器
-i   使用交互方式運(yùn)行容器,通常與t同時(shí)使用
-t   為容器重新分配一個(gè)偽輸入終端。也即啟動(dòng)交互式容器
-p   指定容器端口    -p 容器端口:物理機(jī)端口  映射端口
-P   隨機(jī)指定端口
-v   給容器掛載存儲(chǔ)卷

大家注意-i 、 -t 、 -d這幾個(gè)參數(shù)。一般it連用表示給我一個(gè)可以操作的前臺(tái)終端。第二個(gè)呢就是id,以后臺(tái)守護(hù)進(jìn)程的方式運(yùn)行容器。這樣,我們就可以總結(jié)出兩種運(yùn)行容器的命令模式。

第一種:交互方式創(chuàng)建容器,退出后容器關(guān)閉。
docker run -it 鏡像名稱:標(biāo)簽 /bin/bash

第二種:守護(hù)進(jìn)程方式創(chuàng)建容器。
docker run -id 鏡像名稱:標(biāo)簽
通過這種方式創(chuàng)建的容器,我們不會(huì)直接進(jìn)入到容器界面,而是在后臺(tái)運(yùn)行了容器,
如果我們需要進(jìn)去,則還需要一個(gè)命令。
docker exec -it  鏡像名稱:標(biāo)簽  /bin/bash
通過這種方式運(yùn)行的容器,就不會(huì)自動(dòng)退出了。

六、鏡像原理。

1、鏡像是什么?

鏡像是一種輕量級(jí)的、可執(zhí)行的獨(dú)立軟件包。用來打包軟件運(yùn)行環(huán)境和基于運(yùn)行環(huán)境的開發(fā)軟件,它包含運(yùn)行某個(gè)軟件所需要的內(nèi)容,包括代碼、運(yùn)行時(shí)、庫、環(huán)境變量和配置文件。

2、Docker鏡像加載原理。

UnionFS(聯(lián)合文件系統(tǒng))
UnionFS(聯(lián)合文件系統(tǒng)):UnionFS文件系統(tǒng)是一種分層、輕量級(jí)并且高性能的文件系統(tǒng),它支持對(duì)文件系統(tǒng)的修改作為一次提交來一層一層的疊加,同時(shí)可以將不同目錄掛載到同一個(gè)虛擬文件系統(tǒng)下。Union文件系統(tǒng)是Docker鏡像的基礎(chǔ)。鏡像可以通過分層來進(jìn)行繼承,基于基礎(chǔ)鏡像,可以制作各種各樣的應(yīng)用鏡像。

特性:一次同時(shí)加載多個(gè)文件系統(tǒng),但是從外面開起來,只能看一個(gè)文件系統(tǒng),聯(lián)合加載會(huì)把各層文件系統(tǒng)疊加起來,最終的文件系統(tǒng)會(huì)包含所有的底層文件和目錄。

Docker鏡像加載原理
docker的鏡像實(shí)際上是由一層一層的文件系統(tǒng)組成,這種層級(jí)關(guān)系就叫UnionFS。
bootfs(boot file system)主要包括bootloader和kernel,bootloader主要是引導(dǎo)加載kernel,Linux剛啟動(dòng)時(shí)會(huì)加載bootfs文件系統(tǒng),在Docker鏡像的最底層是bootfs。這一層與我們典型的Linux/Unix系統(tǒng)是一樣的,包含boot加載器和內(nèi)核。當(dāng)boot加載完成之后整個(gè)內(nèi)核就在內(nèi)存中了,此時(shí)內(nèi)存的使用權(quán)由bootfs轉(zhuǎn)交給內(nèi)核,此時(shí)系統(tǒng)會(huì)卸載bootfs。

rootfs(root file system),在bootfs之上。包含的就是典型Linux系統(tǒng)的/dev, /proc, /bin, /etc等等標(biāo)準(zhǔn)文件。rootfs就是各種不同的操作系統(tǒng)發(fā)行版本,比如Ubuntu、CentOS等。

如下圖:
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
對(duì)于一個(gè)精簡(jiǎn)的OS,rootfs可以很小,只需要包含最基本的命令、工具和程序即可,因?yàn)榈讓又苯佑肏ost的kernel,自己只需要提供rootfs即可。由此可見不同的Linux發(fā)行版本,bootfs基本上是一致的,rootfs會(huì)有差別,所以不同的發(fā)行版可以公用bootfs,這也是一個(gè)鏡像僅有幾百M(fèi)B的原因。

3、分層理解。

這里我用docker pull nginx命令,下載來一個(gè)鏡像給大家看看,框起來的是不是一層一層下載的。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
那么docker為什么會(huì)使用這種方法呢?最大的好處,就是資源共享。比如有多個(gè)鏡像都從相同的Base鏡像構(gòu)建而來,那么宿主機(jī)只需要在磁盤上保留一份base鏡像,同時(shí)內(nèi)存中也只需要加載一份base鏡像,這樣就可以為所有容器提供服務(wù)了,而且鏡像的每一層都可以被共享。

我們通過docker image inspect ngixn:latest查看一下。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
這里給大家舉個(gè)栗子:
所有的docker鏡像都起始于一個(gè)基礎(chǔ)鏡像層,當(dāng)進(jìn)行修改或者增加新的內(nèi)容時(shí),就會(huì)在當(dāng)前鏡像層之上,創(chuàng)建新的鏡像層。假如基于Ubuntu Linux 16.04創(chuàng)建一個(gè)新的鏡像,這就是新鏡像的第一層;如果在該鏡像中添加Python包,就會(huì)在基礎(chǔ)鏡像之上創(chuàng)建第二個(gè)鏡像層;如果繼續(xù)添加安全補(bǔ)丁,就會(huì)創(chuàng)建第三個(gè)鏡像層。如下圖:
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
在添加額外的鏡像的同時(shí),鏡像始終是當(dāng)前所有鏡像的組合。比如我們?cè)谔砑拥谌龑影踩a(bǔ)丁的時(shí)候,Ubuntu和Python視為一個(gè)鏡像層,在此基礎(chǔ)上再添加安全補(bǔ)丁鏡像層。
docker鏡像都是只讀的,當(dāng)容器啟動(dòng)時(shí),一個(gè)新的可寫層被加載到鏡像的頂部。這一層就是我們所說的容器層,容器之下都叫鏡像層。

4、提交鏡像。

這里大家看一下

1、命令。

docker commit 提交容器成為一個(gè)新的副本
docker commit -m="提交的描述信息"  -a="作者"  容器id  目標(biāo)鏡像名:[TAG]

2、實(shí)驗(yàn)。

1、下載一個(gè)默認(rèn)的tomcat,這里作者已經(jīng)下載好了,就不用再下載了。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
2、啟動(dòng)tomcat。
docker run -itd -p 8080:8080 tomcat:latest /bin/bash
然后進(jìn)入此容器
docker exiec -it [容器ID] /bin/bash
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
3、默認(rèn)tomcat鏡像的webapp網(wǎng)頁文件里是沒有東西的,我們要從webapps.dist中把它拷貝出來。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
4、打開8080端口,在瀏覽器訪問tomcat docker。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
5、提交鏡像。
docker commit -a=“This my create tomcat” -m=“add webapps app” 81 tomcat02:1.0
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
這里我們就制作了我們的第一個(gè)鏡像,之后我還會(huì)教大家怎么將鏡像發(fā)布到docker hub上。

七、Docker容器數(shù)據(jù)卷。

1、容器數(shù)據(jù)卷介紹。

docker容器在產(chǎn)生數(shù)據(jù)的時(shí)候,如果不通過docker commit生成新的鏡像,使得數(shù)據(jù)作為鏡像的一部分保存下來,那么當(dāng)容器刪除之后,數(shù)據(jù)自然而然的也會(huì)消失。為了能保存數(shù)據(jù),容器中引用了數(shù)據(jù)卷的概念。

2、作用以及特點(diǎn)。

卷就是目錄或者文件,存在一個(gè)或者多個(gè)容器之中,由docker掛載到容器,但是不屬于聯(lián)合文件系統(tǒng),因此能夠繞過Union File System提供一些用于持續(xù)存儲(chǔ)或者共享數(shù)據(jù)的特性。

卷的設(shè)計(jì)目的就是數(shù)據(jù)的持久化,完全獨(dú)立于容器的生存周期,因此docker不會(huì)再容器刪除時(shí)刪除其掛載的數(shù)據(jù)卷。

它還存在以下幾種特點(diǎn)

1、數(shù)據(jù)卷可在容器之間共享或者重用數(shù)據(jù)。
2、卷中的更改可以直接生效。
3、數(shù)據(jù)卷中的更改不會(huì)包含在鏡像的更新中。
4、數(shù)據(jù)卷的生命周期一直持續(xù)到?jīng)]有容器使用它為止。

3、使用數(shù)據(jù)卷。

方式一:直接使用命令來掛載 , -v

docker run -it -v 主機(jī)目錄:容器目錄 /bin/bash

我們?cè)趧?chuàng)建容器之前,先看看掛載路徑上有沒有test01這個(gè)目錄,可以看到,是沒有的。執(zhí)行命令之后進(jìn)入到容器內(nèi),我們ls看一下容器的home目錄,是空的。

docker run -it -v /home/test01:/home centos /bin/bash

docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
另外打開一個(gè)終端,cd /home目錄,這下我們發(fā)現(xiàn)多出來了一個(gè)test01目錄,這個(gè)test01目錄,就是我們剛剛啟動(dòng)的容器內(nèi)部的home目錄,并且,此時(shí)這兩個(gè)目錄是同步的狀態(tài),我們?cè)趆ome目錄中寫入任何新的文件,都會(huì)同步到主機(jī)home目錄下的test01目錄。

docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
我們?cè)谶@里測(cè)試一下,echo進(jìn)去一個(gè)a.txt文件。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
然后來到宿主機(jī)上,看一眼是不是test01目錄下也出現(xiàn)了a.txt。(雙向綁定)
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
當(dāng)然,我們可以使用更簡(jiǎn)單的方法查看是否掛載成功,大家還記得是那條命令嗎?沒錯(cuò),是docker inspect 容器ID。我們找到這個(gè)Mounts,它代表著掛載,type是類型(綁定),source是源(/home/test01),也就是把什么掛載到哪里。destination(home)就是掛載的目標(biāo)路徑了。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
這里作者只演示了修改容器內(nèi)文件同步到宿主機(jī)掛載文件。其實(shí)反過來也是一樣的,這里就不再贅述了。之后如果要修容器內(nèi)掛載文件,只需在我們本地掛載點(diǎn)修改就好了,它會(huì)自動(dòng)同步到docker。

4、具名掛載與匿名掛載。

這里先教給大家一個(gè)新武器。
docker volum ls #查看所有卷的情況。

1、匿名掛載

我們首先使用匿名掛載的命令啟動(dòng)一個(gè)容器。

docker run -d -P --name=nginxt01 -v /etc/nginx nginx

然后使用剛剛教給大家的新武器查看卷。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
這里84開頭的那一長(zhǎng)串就是掛載到宿主機(jī)的名字。
我們繼續(xù)追查下去。這里教給大家一個(gè)很簡(jiǎn)單的命令,less。如果輸出的信息太多了,我們找不到,就可以這樣使用
cmd | less 栗子: docker inspect 84(容器ID) | less
然后輸入/name, name是你想查到的內(nèi)容,就可以很輕松的找到啦。
大家仔細(xì)看一下,是不是/etc/nginx就是叫84開頭的那一長(zhǎng)串,掛載到了我/var/lib…路徑下,我們復(fù)制這個(gè)路徑繼續(xù)去查看。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
怎么樣,是不是在我們的宿主機(jī)就發(fā)現(xiàn)了這樣的一個(gè)文件呢?這就是所謂的匿名掛載!是不是很簡(jiǎn)單。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維

2、具名掛載。

具名掛載就很簡(jiǎn)單了,跟我們之前演示的指定路徑掛載很相似,這里給大家簡(jiǎn)單地演示一下。

同樣,我們使用具名掛載的方式啟動(dòng)一個(gè)容器。

docker run -d -P --name=nginxt02 -v jumingguazai:/etc/nginx nginx

docker volume ls 查看卷
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
docker inspect ID | less 找到掛載點(diǎn)。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
我們?cè)購(gòu)?fù)制一下路徑,找到nginx的配置文件。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維

這就是具名掛載。

如何確定是具名掛載還是匿名掛載:
-v  容器內(nèi)路徑               #匿名掛在
-v  卷名:容器內(nèi)路徑          #具名掛在
-v  /宿主機(jī)路徑:容器內(nèi)路徑    # 指定路徑掛載

tips:

通過 -v 容器內(nèi)路徑  :ro   rw   可以改變讀寫權(quán)限
ro  readonly   #只讀
rw  readwrite  #可寫可讀
例: docker run -d --name nginx01 -v test01:/etc/nginx:ro nginx
    docker run -d --name nginx01 -v test01:/etc/nginx:rw nginx

八、Dockerfile。

1、什么是Dockerfile?

Dockerfile是一個(gè)創(chuàng)建鏡像所有命令的文本文件,包含了一條條指令和說明, 每條指令構(gòu)建一層,,通過docker build命令,根據(jù)Dockerfile的內(nèi)容構(gòu)建鏡像,因此每一條指令的內(nèi)容, 就是描述該層如何構(gòu)建。有了Dockefile,,就可以制定自己的docker鏡像規(guī)則,只需要在Dockerfile上添加或者修改指令,,就可生成docker 鏡像。

2、Dockerfile構(gòu)建過程。

dockerfile的關(guān)鍵字建議使用大寫,它是從上往下按照循序執(zhí)行的,在dockerfile中,#代表注釋。我們可以通過這個(gè)腳本來生成鏡像,腳本中的每一個(gè)命令,都是一層鏡像。

我們先通過下面這張圖片來理解一下鏡像的構(gòu)成以及運(yùn)行過程。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
在這里我們來整理一下docker容器、dockerfile、docker鏡像的關(guān)系:

dockerfile是面向開發(fā)的,發(fā)布項(xiàng)目做鏡像的時(shí)候就要編寫dockerfile文件。
dockerfile:構(gòu)建文件,定義了一切的步驟,源代碼。
dockerImanges:通過dockerfile構(gòu)建生成的鏡像,最終發(fā)布和運(yùn)行的產(chǎn)品。
docker容器:容器就是鏡像運(yùn)行起來提供服務(wù)的。

3、Dockerfile 指令選項(xiàng)。

Dockerfile 指令選項(xiàng):

FROM                  #基礎(chǔ)鏡像 。 (centos)
MAINTAINER            #鏡像的作者和郵箱。(已被棄用,結(jié)尾介紹代替詞)
RUN                   #鏡像構(gòu)建的時(shí)候需要執(zhí)行的命令。
CMD                   #類似于 RUN 指令,用于運(yùn)行程序(只有最后一個(gè)會(huì)生效,可被替代)
EXPOSE                #對(duì)外開放的端口。
ENV                   #設(shè)置環(huán)境變量,定義了環(huán)境變量,那么在后續(xù)的指令中,就可以使用這個(gè)環(huán)境變量。
ADD                   # 步驟:tomcat鏡像,這個(gè)tomcat壓縮包。添加內(nèi)容。
COPY                  #復(fù)制指令,將文件拷貝到鏡像中。
VOLUME                #設(shè)置卷,掛載的主機(jī)目錄。
USER                  #用于指定執(zhí)行后續(xù)命令的用戶和用戶組,
                       這邊只是切換后續(xù)命令執(zhí)行的用戶(用戶和用戶組必須提前已經(jīng)存在)。
WORKDIR               #工作目錄(類似CD命令)。
ENTRYPOINT            #類似于 CMD 指令,但其不會(huì)被 docker run 
                       的命令行參數(shù)指定的指令所覆蓋,會(huì)追加命令。
ONBUILD               #當(dāng)構(gòu)建一個(gè)被繼承Dokcerfile,就會(huì)運(yùn)行ONBUILD的指令。出發(fā)執(zhí)行。


注意:CMD類似于 RUN 指令,用于運(yùn)行程序,但二者運(yùn)行的時(shí)間點(diǎn)不同:
CMD 在docker run 時(shí)運(yùn)行。
RUN 是在 docker build。
作用:為啟動(dòng)的容器指定默認(rèn)要運(yùn)行的程序,程序運(yùn)行結(jié)束,容器也就結(jié)束。
CMD 指令指定的程序可被 docker run 命令行參數(shù)中指定要運(yùn)行的程序所覆蓋。
如果 Dockerfile 中如果存在多個(gè) CMD 指令,僅最后一個(gè)生效。

LABEL(MAINTALNER已經(jīng)被棄用了,目前是使用LABEL代替)
LABEL 指令用來給鏡像添加一些元數(shù)據(jù)(metadata),以鍵值對(duì)的形式,語法格式如下:
LABEL <key>=<value> <key>=<value> <key>=<value> ...
比如我們可以添加鏡像的作者:
LABEL org.opencontainers.image.authors="runoob"

Tips:構(gòu)建鏡像99%都是從scratch開始的,但是這個(gè)鏡像是個(gè)虛擬的概念,并不實(shí)際存在,表示一個(gè)空白的鏡像。

這里帶大家回顧一下docker history命令。接下來我們就要用dockfile制作屬于自己的鏡像了。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
通過這個(gè)命令,我們就能看到dockerfile制作鏡像所執(zhí)行的步驟,也就可以知道這個(gè)鏡像是怎么制作的了。

九、實(shí)戰(zhàn)測(cè)試:制作鏡像并且發(fā)布外網(wǎng)。

1、注冊(cè)docker hub 賬號(hào)。

網(wǎng)址:https://hub.docker.com/
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維

2、服務(wù)器上使用命令行登陸。

命令

docker login -u [賬號(hào)名字]   #登陸命令
docker out                  #退出命令
docker push 賬號(hào)/容器名字:版本號(hào)

docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
看到Lgin Succeeded,就表示我們登陸成功了。

3、構(gòu)建鏡像。

1、創(chuàng)建工作目錄。

mkdir dockerfile
cd dockerfile
ls

docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維

2、編寫dockerfile。

首先,我們知道官方默認(rèn)的鏡像,比如centos鏡像里面,沒有vim、ipconfig等命令,我們就基于此,創(chuàng)建此鏡像。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維

vim mydockerfile
FORM centos
MAINTAINER ydk<123@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim-enhanced
RUN yum -y install net-tools
EXPOSE 80
CMD echo #MYPATH
CMD echo "------------END-------------"
CMD /bin/bash

docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維

3、構(gòu)建dockerfile。

docker build 命令:

docker build -f mydockerfile-t mycentos:1.0 .

docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維

到這里,我們就制作好了我們自己的鏡像,雖然它并沒有什么用。
這里我們?cè)賳?dòng)我們自己制作的鏡像,進(jìn)去看看我們寫的dockerfile都生效了沒有。
注:不加標(biāo)簽默認(rèn)是latest,所以docker run的時(shí)候要帶上鏡像標(biāo)簽。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
同時(shí),我們可以用docker history命令來進(jìn)一步驗(yàn)證dockerfile的構(gòu)建過程。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維

4、推送鏡像至docker hub。

官方文檔要求,我們推送的鏡像名字必須是YOUR_DOCKER_HUB_ID/XXXX,所以我們需要給鏡像換一個(gè)名字

docker tag  mycentos/1.0 自己的賬號(hào)名字/mytomcat 
docker push 自己的賬號(hào)名字/mytomcat 

鏡像有點(diǎn)大,所以請(qǐng)耐心等待一下。等了幾分鐘之后,我們登陸docker hub就可以看到我們剛剛推送上去的鏡像啦,這個(gè)鏡像可是全世界人民都看得到的哦,是不是有點(diǎn)小激動(dòng)呢!
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維

十、Docker網(wǎng)絡(luò)。

1、本機(jī)網(wǎng)絡(luò)理解。

我們使用ifconfig可以看到三組網(wǎng)絡(luò)。
首先是docker0,這是我們本節(jié)的重點(diǎn),docker的網(wǎng)絡(luò)。之后是eth0,本機(jī)的外網(wǎng)地址。lo口,本地環(huán)回地址,可以代表localhost。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
關(guān)于docker0呢,其實(shí)就是一個(gè)叫docker0的虛擬網(wǎng)橋。我們使用brctl命令來查看一下。(沒有這個(gè)命令的下載yum -y install bridge-utils

brctl show 

docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維

2、清空本機(jī)docker環(huán)境。

docker rm -f $(docker ps -aq)
docker rmi -f $(docker images -aq)

3、veth-pair技術(shù)。

什么是veth-pair技術(shù)?要理解它,我們首先來啟動(dòng)兩個(gè)tomcat容器。

docker run -d -P --name=tomcat01 tomcat:7
docker run -d -P --name=tomcat02 tomcat:7
提示:選擇tomcat7是因?yàn)檫@個(gè)鏡像包含了ip addr 等常用命令!

啟動(dòng)機(jī)器之后,我們查看容器ip,通過容器的ip 去ping宿主機(jī)ip,發(fā)現(xiàn)是通的。

docker exec -it tomcat01 ip addr

docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維

ping 172.17.0.3

docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
理解:我們每啟動(dòng)一個(gè)docker容器,docker就會(huì)給docker容器分配一個(gè)ip,安裝docker之后,會(huì)產(chǎn)生一個(gè)叫docker0的網(wǎng)卡,這里使用的就是veth-pair技術(shù)。

使用ip addr命令,查看我們的網(wǎng)卡。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
我們發(fā)現(xiàn)多出來了兩個(gè)網(wǎng)卡,到了這里,你已經(jīng)知道這兩張網(wǎng)卡是那里來的了吧。沒錯(cuò),是啟動(dòng)容器之后產(chǎn)生的!我們回過頭來查看我們?cè)趩?dòng)的容器IP,就會(huì)很清晰的發(fā)現(xiàn),這個(gè)網(wǎng)卡是成對(duì)存在的!容器內(nèi)的64對(duì)應(yīng)著宿主機(jī)的65,容器內(nèi)的66對(duì)應(yīng)宿主機(jī)的67。

什么是veth-pair?
veth-pair 就是一堆的虛擬設(shè)備接口,他們都是成對(duì)出現(xiàn)的,一端連接著協(xié)議,一端連接著彼此。使得它充當(dāng)了一個(gè)橋梁的作用。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維

4、docker網(wǎng)絡(luò)詳解。

我們來繪制一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)模型,這樣veth-pair的作用就清晰明了了。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
不難看出,tomcat01和tomcat02是共用的同一個(gè)路由器,即docker0。所有的容器在不指定我網(wǎng)絡(luò)的情況下,都是docker0路由的,docekr會(huì)給我們的容器分配一個(gè)默認(rèn)IP。
docker網(wǎng)絡(luò)就是下面這個(gè)網(wǎng)絡(luò)模型所描述的。(docker所有的網(wǎng)絡(luò)接口都是虛擬的,虛擬的轉(zhuǎn)發(fā)效率高)
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維

5、docker網(wǎng)絡(luò)模式。

1、docker網(wǎng)絡(luò)模式有以下幾種:

Host:容器不會(huì)虛擬出自己的網(wǎng)卡,配置主機(jī)的IP等,而是使用宿主機(jī)的IP和端口

Container: 創(chuàng)建的容器不會(huì)創(chuàng)建自己的網(wǎng)卡,配置自己的IP,而是和一個(gè)指定的容器共享IP。(一般不用)

None: 該模式關(guān)閉了容器的網(wǎng)絡(luò)功能。(一般不用)

Bridge:默認(rèn)為該模式(橋接,自己創(chuàng)建也是用它),此模式會(huì)為每一個(gè)容器分配,設(shè)置IP等,并將容器連接到一個(gè)docker0 的虛擬網(wǎng)橋,通過docker 0 網(wǎng)橋以及iptables nat 表配置與宿主機(jī)通信。
docker network ls   #列出docker網(wǎng)卡

2、創(chuàng)建自定義網(wǎng)絡(luò)的容器:

我們直接啟動(dòng)命令, --net bridge,就是docker0(默認(rèn))
docker run -d -P --name=tomcat01 --net bridge tomcat

docker0特點(diǎn):默認(rèn),域名不能訪問,--link不建議使用

下面我們自己來創(chuàng)建一個(gè)bridge。

docker network create --driver bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 testnet

docekr network ls

只需要兩條命令,你就創(chuàng)建完了自己的網(wǎng)絡(luò)!
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
這里在教大家一條命令:

docker network inspect 網(wǎng)卡名字  #查看網(wǎng)卡詳細(xì)信息

docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維

3、發(fā)布兩個(gè)在自己創(chuàng)建的網(wǎng)絡(luò)里的容器。

docker run -d -P --name=tomcat01-net --net=testnet tomcat:7
docker run -d -P --name=tomcat02-net --net testnet tomcat:7

然后使用docker network inspect testnet,就可以看到剛才創(chuàng)建的這兩個(gè)容器的IP了。
docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維
還記得我們前面說的docker0的缺點(diǎn)之一,不能通過域名訪問嗎?而我們自定義的網(wǎng)絡(luò),就修復(fù)了這個(gè)功能!

docker exec -it tomcat01-net ping -c 3 IP
docker exec -it tomcat01-net ping -c 3 tomcat02-net

提示,ping -c可以自定義ping的次數(shù)

docker學(xué)習(xí),IT/運(yùn)維,docker,容器,運(yùn)維

總結(jié)

到這里,我們學(xué)習(xí)docker的腳步就告一段落了。陸陸續(xù)續(xù)寫了大半個(gè)月,我也終于寫完了我在CSDN的第一篇文章。希望我的付出,能帶給大家學(xué)習(xí)的動(dòng)力,容器其實(shí)并不難掌握,大家可能在剛剛接觸的時(shí)候很迷茫,不知道這是個(gè)啥。其實(shí)沒有關(guān)系,在你用著用著之后,容器的概念就會(huì)在你的腦子里漸漸形象起來。很感謝你看了這里,我也很希望能讓你對(duì)容器,有一定的認(rèn)識(shí),哈哈哈,就先寫到這兒吧,以后我還會(huì)更新其他內(nèi)容的,歡迎大家的關(guān)注。文章來源地址http://www.zghlxwxcb.cn/news/detail-778209.html

到了這里,關(guān)于docker入門,這一篇就夠了。的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 如何學(xué)習(xí)及計(jì)算機(jī)編程,入門看這一篇就夠了---以c語言為例

    如何學(xué)習(xí)及計(jì)算機(jī)編程,入門看這一篇就夠了---以c語言為例

    用計(jì)算機(jī)爬取信息(爬蟲) 進(jìn)行數(shù)據(jù)分析,數(shù)據(jù)可視化(大數(shù)據(jù)的某個(gè)方面) 處理海量的數(shù)據(jù),如excel(百萬條數(shù)據(jù)) example1. 來看下面一段代碼 大家一定會(huì)說 這太簡(jiǎn)單了 輸出hello world 學(xué)習(xí)計(jì)算機(jī)的入門程序嘛!! 那么請(qǐng)問 這是什么?我們第一次編程應(yīng)該不會(huì)知道這是什

    2024年02月08日
    瀏覽(27)
  • Docker Volume 看這一篇就夠了

    Docker Volume 看這一篇就夠了

    默認(rèn)情況下,在容器內(nèi)創(chuàng)建的所有文件都存儲(chǔ)在可寫容器層上。這意味著: 當(dāng)該容器不再存在時(shí),數(shù)據(jù)不會(huì)持續(xù)存在,并且如果另一個(gè)進(jìn)程需要數(shù)據(jù),則可能很難將數(shù)據(jù)從容器中取出。 容器的可寫層與運(yùn)行容器的主機(jī)緊密耦合。您無法輕松地將數(shù)據(jù)移動(dòng)到其他地方。 寫入容

    2024年02月02日
    瀏覽(106)
  • kafka入門用這一篇就夠了!

    kafka入門用這一篇就夠了!

    目錄 1,kafka簡(jiǎn)單介紹 2,kafka使用場(chǎng)景 3,kafka基本概念 kafka集群 數(shù)據(jù)冗余 分區(qū)的寫入 讀取分區(qū)數(shù)據(jù) 順序消費(fèi) 提交策略 零拷貝技術(shù)(netty) kafka是一款分布式、支持分區(qū)的、多副本,基于zookeeper協(xié)調(diào)的分布式消息系統(tǒng)。最大的特性就是可以實(shí)時(shí)處理大量數(shù)據(jù)來滿足需求。

    2024年01月25日
    瀏覽(23)
  • MASA Blazor入門這一篇就夠了

    MASA Blazor入門這一篇就夠了

    ASP.NET Core Blazor 簡(jiǎn)介 Blazor 是一個(gè)使用 Blazor 生成交互式客戶端 Web UI 的框架: 使用 C# 代替 JavaScript 來創(chuàng)建信息豐富的交互式 UI。 共享使用 .NET 編寫的服務(wù)器端和客戶端應(yīng)用邏輯。 將 UI 呈現(xiàn)為 HTML 和 CSS,以支持眾多瀏覽器,其中包括移動(dòng)瀏覽器。 與新式托管平臺(tái)(如 Docke

    2024年02月05日
    瀏覽(16)
  • JavaScript 入門(簡(jiǎn)單易懂) 看這一篇就夠了

    目錄 1、什么是JavaScript 1.1、概述 1.2、歷史 2、快速入門 2.1、引入引入JavaScript 2.2、基本語法 2.3、數(shù)據(jù)類型 2.4、嚴(yán)格檢查模式 3、數(shù)據(jù)類型 3.1、字符串 3.2、數(shù)組 3.3、對(duì)象 3.4、流程控制 3.5、Map和Set 3.6 iterator 3.7數(shù)據(jù)類型轉(zhuǎn)換字符串類型 3.8數(shù)據(jù)類型轉(zhuǎn)換數(shù)字型(重點(diǎn)) 3.9標(biāo)識(shí)

    2024年02月02日
    瀏覽(21)
  • 學(xué)習(xí)SpringSecurity這一篇就夠了

    學(xué)習(xí)SpringSecurity這一篇就夠了

    案例源碼地址:https://gitee.com/gzl_com/spring-security.git 1.1、概要 Spring Security 是 Spring 家族中的成員。Spring Security 基于 Spring 框架,提供了一套 Web 應(yīng)用安全性的完整解決方案。 安全方面的兩個(gè)主要區(qū)域是“ 認(rèn)證 ”和“ 授權(quán) ”。在Web 應(yīng)用又稱之為 用戶認(rèn)證 和 用戶授權(quán) 兩個(gè)部

    2024年02月11日
    瀏覽(88)
  • Docker快速部署RabbitMq教程,這一篇就夠了!

    Docker快速部署RabbitMq教程,這一篇就夠了!

    目錄 1、拉取RabbitMQ鏡像 2、創(chuàng)建RabbitMQ容器? 3、驗(yàn)證是否安裝成功 4、后臺(tái)管理頁面無法打開問題 要快速部署RabbitMQ,可以使用Docker容器來簡(jiǎn)化過程。下面是使用Docker快速部署RabbitMQ的教程。 1、拉取RabbitMQ鏡像 在終端中執(zhí)行以下命令,拉取RabbitMQ的鏡像到本地: 注意:在此處

    2024年03月21日
    瀏覽(19)
  • 大數(shù)據(jù)超全面入門干貨知識(shí),看這一篇就夠了!

    大數(shù)據(jù)超全面入門干貨知識(shí),看這一篇就夠了!

    隨著科技的飛速發(fā)展和互聯(lián)網(wǎng)的普及,大數(shù)據(jù)已成為 21 世紀(jì)最炙手可熱的話題之一。它像一面神秘的面紗,覆蓋著現(xiàn)實(shí)世界,隱藏著無窮無盡的可能性。今天將帶領(lǐng)大家一起揭開大數(shù)據(jù)這個(gè)未知世界的神秘面紗,帶你了解大數(shù)據(jù)的概念、應(yīng)用以及大數(shù)據(jù)相關(guān)組件。 大數(shù)據(jù)是

    2024年04月26日
    瀏覽(29)
  • 學(xué)習(xí)C++這一篇就夠了(進(jìn)階篇)

    學(xué)習(xí)C++這一篇就夠了(進(jìn)階篇)

    C++在執(zhí)行程序的時(shí)候,將內(nèi)存方向劃分為4個(gè)區(qū)域: 代碼區(qū):存放二進(jìn)制代碼,由操作系統(tǒng)進(jìn)行管理 全局區(qū):存放全局變量、靜態(tài)變量、常量,程序結(jié)束后由操作系統(tǒng)釋放 棧區(qū):存放函數(shù)參數(shù)、局部變量,由編譯器自動(dòng)分配和釋放 堆區(qū):由開發(fā)者申請(qǐng)分配和釋放,若程序員

    2024年02月12日
    瀏覽(55)
  • 超圖(HyperGraph)學(xué)習(xí),看這一篇就夠了

    超圖(HyperGraph)學(xué)習(xí),看這一篇就夠了

    最近事多,好久沒更新了,隨便寫寫(Ctrl+V)點(diǎn) 一、超圖定義 通常圖論中的圖,一條edge只能連接2個(gè)vertex,在超圖中,不限量 如何理解呢,就用我正在做的KT問題來看:7道題目-7個(gè)頂點(diǎn);4種概念-4條超邊,其中第1,2,3題都是考察概念1的,則構(gòu)建一個(gè)包含了這仨的超邊,以此類

    2024年02月02日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包