溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Docker鏡像創(chuàng)建、數(shù)據(jù)管理與網(wǎng)絡(luò)通信

發(fā)布時(shí)間:2020-07-18 21:33:07 來(lái)源:網(wǎng)絡(luò) 閱讀:338 作者:mb5c7bb57d7f7e8 欄目:系統(tǒng)運(yùn)維

本章架構(gòu):

  • Docker的創(chuàng)建方法
  • Docker的數(shù)據(jù)管理
  • Docker的網(wǎng)絡(luò)通信

Docker鏡像除了是Docker的核心技術(shù)之外,也是應(yīng)用發(fā)布的標(biāo)準(zhǔn)格式。一個(gè)完整的Docker鏡像可以支撐一個(gè)Docker容器的運(yùn)行,在Docker的整個(gè)使用過(guò)程中,進(jìn)入一個(gè)已經(jīng)定型的容器后,就可以在容器中進(jìn)行操作,最常見(jiàn)的操作技術(shù)在容器中安裝應(yīng)用服務(wù),如果要把已經(jīng)安裝的服務(wù)進(jìn)行遷移,就要把環(huán)境及搭建的服務(wù)生成新的鏡像。下面介紹這三種創(chuàng)建鏡像的方法:

一、Docker鏡像的創(chuàng)建方法

1.基于已有鏡像創(chuàng)建

基于已有鏡像創(chuàng)建主要使用docker commit 命令。其實(shí)質(zhì)就是把一個(gè)容器里面運(yùn)行的程序及該程序的運(yùn)行環(huán)境打包起來(lái)生成新的鏡像。

命令格式:

docker commit 【選項(xiàng)】容器id/名稱(chēng) 倉(cāng)庫(kù)名稱(chēng):【標(biāo)簽】
常用選項(xiàng):
-m:說(shuō)明信息
-a:作者信息
-p:生成過(guò)程中停止容器的運(yùn)行

方法如下:
(1)使用鏡像創(chuàng)建一個(gè)新的容器,并進(jìn)行修改。

[root@localhost ~]# docker images                        //查看本地的Docker鏡像
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/centos    latest              0f3e07c0138f        6 weeks ago         220 MB
[root@localhost ~]# docker run --privileged -d -it --name centos docker.io/centos init
794df7dc4cebeb43afb2a1d7cf424578a4f10c2344bcdb7208d6632609ce087c
//使用centos鏡像生成一個(gè)名為centos的容器,讓容器以root的身份權(quán)限加載init守護(hù)進(jìn)程
[root@localhost ~]# docker exec -it centos /bin/bash            //指定一個(gè)shell進(jìn)入容器
[root@794df7dc4ceb /]# yum -y install vsftpd                        //在容器中安裝一個(gè)ftp服務(wù)
[root@794df7dc4ceb /]# systemctl start vsftpd                     //安裝完成后,啟動(dòng)服務(wù)
[root@794df7dc4ceb /]# exit                                                //退出容器

(2)使用“docker commit”命令創(chuàng)建一個(gè)新的鏡像。

[root@localhost ~]# docker commit -m "vsftpd" -a "xxf" centos xxf:ftp
sha256:ccba2c39b90a56373139196c3dc079b6df5c7f4f280bc35a7f1abf578962b52
//基于剛才創(chuàng)建的容器生成一個(gè)新的鏡像,名稱(chēng)為lzj:ftp

(3)創(chuàng)建完成后,查看本地鏡像是否已經(jīng)有新生成的鏡像。

[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
lzj                 ftp                 ccba2c39b90a        57 seconds ago      279 MB
docker.io/centos    latest              75835a67d134        13 months ago       200 MB

2.基于本地模板創(chuàng)建

通過(guò)導(dǎo)入操作系統(tǒng)模板文件可以生成鏡像,模板可以從OPENVZ開(kāi)源項(xiàng)目下載,下載地址為:https://wiki.openvz.org/Download/template/precreated ,優(yōu)先使用OPENVZ開(kāi)源項(xiàng)目那個(gè)鏈接。

其實(shí),就把使用“docker load < 文件名”將一個(gè)文件導(dǎo)入成鏡像而已,這里就不多介紹了!

3.基于Dockerfile創(chuàng)建

除了手動(dòng)生成docker鏡像之外,還可以使用Dockerfile自動(dòng)生成鏡像。Dockerfile是由一組指令組成的文件,其中每條指令對(duì)應(yīng)Linux中的一條命令,Docker程序?qū)⒆x取Dockerfile中的指令生成指定鏡像。

Dockerfile結(jié)構(gòu)大致分為4個(gè)部分:基礎(chǔ)鏡像信息、維護(hù)者信息、鏡像操作指令和容器啟動(dòng)時(shí)候執(zhí)行指令。Dockerfile每行支持一條指令,每條指令可攜帶多個(gè)參數(shù),支持使用以“#”號(hào)開(kāi)頭的注釋。

一個(gè)簡(jiǎn)單的小例子:

[root@localhost ~]# vim Dokerfile
FROM centos
#第一行必須指明基于的基礎(chǔ)鏡像
MAINTAINER The CentOS project <cloud-ops@centos.org>
#維護(hù)該鏡像的用戶信息
RUN yum -y update
RUN yum -y install openssh-server
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
#鏡像操作指令
EXPOSE 22
#開(kāi)啟22端口
CMD ["/usr/sbin/sshd","-D"]
#啟動(dòng)容器時(shí)執(zhí)行指令

在編寫(xiě)Dockerfile時(shí),有嚴(yán)格的格式需要遵循:第一行必須使用FROM指令指明所基于的鏡像名稱(chēng);之后再使用MAINTAINER指令說(shuō)明維護(hù)該鏡像的用戶信息;然后是鏡像操作相關(guān)指令,如RUN指令,每運(yùn)行一條指令,都會(huì)給基礎(chǔ)鏡像添加新的一層;最后使用CMD指令來(lái)指定啟動(dòng)容器時(shí)要運(yùn)行的命令操作。
Dockerfile有十幾條命令可以用于構(gòu)建鏡像;其中常見(jiàn)的指令如下表:
Docker鏡像創(chuàng)建、數(shù)據(jù)管理與網(wǎng)絡(luò)通信

案例:

1.建立工作目錄

[root@localhost ~]# mkdir apache
[root@localhost ~]# cd apache/

2.創(chuàng)建并編寫(xiě)Dockerfile文件

[root@localhost apache]# vim Dockerfile
FROM docker.io/centos
MAINTAINER The CentOS Projects <cloud-ops@centos.org>
RUN yum -y update
RUN yum -y install httpd
EXPOSE 80
ADD index.html /var/www/html/index.html
ADD run.sh /run.sh
RUN chmod 775 /run.sh
RUN systemctl disable httpd
CMD ["/run.sh"]
此Dockerfile文件使用的基礎(chǔ)鏡像是centos,所以要保證首先獲取此基礎(chǔ)鏡像,使用“docker pull docker.io/centos” 獲取鏡像,之后的容器運(yùn)行才會(huì)有效;

3.編寫(xiě)執(zhí)行腳本內(nèi)容

[root@localhost apache]# vim run.sh
#!/bin/bash
rm -rf /run/httpd/*                                      //清理httpd的緩存
exec /usr/sbin/apachectl -D FOREGROUND                  //啟動(dòng)apache服務(wù)
//啟動(dòng)容器時(shí),進(jìn)程、腳本必須在前臺(tái)啟動(dòng)

4.創(chuàng)建測(cè)試頁(yè)面

[root@localhost apache]# echo "weclome" > index.html                     //創(chuàng)建首頁(yè)文件
[root@localhost apache]# ls  
Dockerfile  index.html  run.sh                                 //這三個(gè)文件最好是在同一目錄下

5.使用Dockerfile生成鏡像

編寫(xiě)完成Dockerfile及相關(guān)內(nèi)容后,可以通過(guò)“docker build”命令來(lái)創(chuàng)建鏡像。

命令格式:

docker build [選項(xiàng)] 路徑
//常用選項(xiàng)“-t”指定鏡像的標(biāo)簽信息
[root@localhost apache]# docker build -t httpd:centos .
使用剛才創(chuàng)鍵的Dockerfile 自動(dòng)生成鏡像,最后必須要有一個(gè)“.”表示當(dāng)前路徑

6.使用新的鏡像運(yùn)行容器

[root@localhost ~]# docker run -d -p 12345:80 httpd:centos 
ee9adf324443b006ead23f2d9c71f86d1a4eb73358fb684ee3a2d058a0ac4243
//使用新生成的鏡像加載到容器中運(yùn)行
//“-p”選項(xiàng)實(shí)現(xiàn)從本地端口12345到容器中80端口的映射
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                     PORTS                   NAMES
ee9adf324443        httpd:centos        "/run.sh"                About a minute ago   Up About a minute          0.0.0.0:12345->80/tcp   admiring_bardeen
//查看該鏡像已經(jīng)在容器中的狀態(tài)

驗(yàn)證訪問(wèn)結(jié)果:
Docker鏡像創(chuàng)建、數(shù)據(jù)管理與網(wǎng)絡(luò)通信

7.將鏡像上傳到倉(cāng)庫(kù)中
隨著創(chuàng)鍵的鏡像增多,就需要有一個(gè)保存鏡像的地方,這就是倉(cāng)庫(kù)。目前有兩種倉(cāng)庫(kù):公共倉(cāng)庫(kù)和私有倉(cāng)庫(kù)。最方便的就是使用公共倉(cāng)庫(kù)上傳和下載,下載公共倉(cāng)庫(kù)的鏡像是不需要注冊(cè)的,但是上傳時(shí),是需要注冊(cè)的。下面介紹如何創(chuàng)建私有倉(cāng)庫(kù)。

方法如下:
(1)在構(gòu)建私有倉(cāng)庫(kù)的服務(wù)器上下載registry鏡像;


[root@localhost ~]# docker pull registry

(2)修改配置文件指定私有路徑的URL,否則在自定義的私有倉(cāng)庫(kù)中上傳鏡像時(shí)會(huì)報(bào)錯(cuò),修改完畢后重啟Docker服務(wù)。


[root@localhost ~]# vim /etc/sysconfig/docker

Docker鏡像創(chuàng)建、數(shù)據(jù)管理與網(wǎng)絡(luò)通信


[root@localhost ~]# systemctl restart docker                   //重啟docker服務(wù)

(3)使用下載好的registry鏡像啟動(dòng)一個(gè)容器,默認(rèn)情況下倉(cāng)庫(kù)存放于容器內(nèi)的/tmp/registry目錄下,使用“-v”選項(xiàng)可以將本地目錄掛載到容器內(nèi)的/tmp/registry目錄下使用,這樣就不怕容器被刪除后鏡像也會(huì)隨之丟失。


[root@localhost ~]# docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
d5ecd77aa852df0c67935888009116325025cab49b7a4807196d251ce35a2b3b
//本地的目錄不用事先創(chuàng)建

(4)使用“docker tag”命令將要上傳的鏡像docker.io/registry 標(biāo)記為

192.168.1.1:5000/registry 。

[root@localhost ~]# docker tag docker.io/registry 192.168.1.1:5000/registry
[root@localhost ~]# docker push 192.168.1.1:5000/registry                   //上傳本地鏡像到服務(wù)器上
[root@localhost registry]#  curl -XGET http://192.168.1.1:5000/v2/_catalog
{"repositories":["registry"]}                                          //查看倉(cāng)庫(kù)類(lèi)的鏡像
[root@localhost registry]# curl -XGET http://192.168.1.1:5000/v2/registry/tags/list
{"name":"registry","tags":["latest"]}                                 //獲取鏡像的標(biāo)簽列表
[root@localhost registry]# docker rmi -f 192.168.1.1:5000/registry               //刪除本地鏡像進(jìn)行測(cè)試
[root@localhost registry]# docker pull 192.168.1.1:5000/registry                   //從本地私有倉(cāng)庫(kù)進(jìn)行下載
[root@localhost registry]# docker images | grep 192.168.1.1:5000/registry
192.168.1.1:5000/registry   latest              f32a97de94e1        8 months ago        25.8 MB 
 //本地進(jìn)行驗(yàn)證

私有倉(cāng)庫(kù)搭建完成,驗(yàn)證成功!

二、docker的數(shù)據(jù)管理

在docker中,為了方便查看容器內(nèi)產(chǎn)生的數(shù)據(jù)或者將多個(gè)容器之間的數(shù)據(jù)實(shí)現(xiàn)共享,會(huì)涉及到容器的數(shù)據(jù)管理操作,管理docker容器中的數(shù)據(jù)主要有兩種方式:數(shù)據(jù)卷和數(shù)據(jù)卷容器。

1、數(shù)據(jù)卷
數(shù)據(jù)卷是一個(gè)供容器使用的特殊目錄,位于容器中,可將宿主機(jī)的目錄掛載到數(shù)據(jù)卷上,對(duì)數(shù)據(jù)卷的修改操作立即可見(jiàn),并且更新數(shù)據(jù)不會(huì)影響鏡像,從而實(shí)現(xiàn)數(shù)據(jù)在宿主機(jī)與容器之間的遷移,數(shù)據(jù)卷的使用類(lèi)似于Linux下對(duì)目錄進(jìn)行的mount掛載操作(注意:是將宿主機(jī)本地的目錄掛載到容器中,舉例:若宿主機(jī)本地/data目錄掛載的是/dev/sdb1,那么要將/data做數(shù)據(jù)卷映射時(shí),容器中指定的目錄使用的文件系統(tǒng)也是/dev/sdb1,我不知道這樣解釋?zhuān)銈兡懿荒芾斫馑墓ぷ髟恚?/p>

掛載宿主機(jī)目錄作為數(shù)據(jù)卷舉例:

使用-v選項(xiàng)可以創(chuàng)建數(shù)據(jù)卷(只是運(yùn)行容器時(shí),創(chuàng)建一個(gè)目錄),創(chuàng)建數(shù)據(jù)卷的同時(shí)將宿主機(jī)的目錄掛載到數(shù)據(jù)卷上使用,以實(shí)現(xiàn)宿主機(jī)與容器之間的數(shù)據(jù)遷移。

需要注意的是,宿主機(jī)本地目錄的路徑必須是使用絕對(duì)路徑,如果路徑不存在,Docker會(huì)自動(dòng)創(chuàng)建相應(yīng)的路徑。

[root@localhost ~]# docker run -d -p 5000:5000 -v /data/registry/:/tmp/registry docker.io/registry
#這是運(yùn)行了一個(gè)私有倉(cāng)庫(kù)的容器,其中-p是端口映射的選項(xiàng),這里不做解釋。
# -v才是目錄映射,將本地/data/registry/目錄映射到容器中的/tmp/registry目錄。
#然后容器中的/tmp/registry目錄下的內(nèi)容就和宿主機(jī)的/data/registry/內(nèi)容一樣了。
[root@localhost ~]# df -hT /data/registry/           #先查看本地/data/registry/ 掛載的文件系統(tǒng)
文件系統(tǒng)         類(lèi)型            容量  已用  可用 已用% 掛載點(diǎn)
node4:dis-stripe fuse.glusterfs   80G  130M   80G    1% /data/registry
[root@localhost ~]# docker exec -it a6bf726c612b /bin/sh #進(jìn)入私有倉(cāng)庫(kù)的容器中,該容器沒(méi)有/bin/bash,所以使用的是/bin/sh。
/ # df -hT /tmp/registry/    #查看發(fā)現(xiàn),該目錄掛載的和宿主機(jī)掛載的文件系統(tǒng)是同一個(gè),說(shuō)明沒(méi)問(wèn)題。
Filesystem           Type            Size      Used Available Use% Mounted on
node4:dis-stripe     fuse.glusterfs
                                    80.0G    129.4M     79.8G   0% /tmp/registry

2、數(shù)據(jù)卷容器
如果需要在容器之間共享一些數(shù)據(jù),最簡(jiǎn)單的方法就是使用數(shù)據(jù)卷容器。數(shù)據(jù)卷容器就是一個(gè)普通的容器,專(zhuān)門(mén)提供數(shù)據(jù)卷給其他容器掛載使用。使用方法如下:首先,需要?jiǎng)?chuàng)建一個(gè)容器作為數(shù)據(jù)卷容器,之后在其他容器創(chuàng)建時(shí)用--volumes-from掛載數(shù)據(jù)卷容器中的數(shù)據(jù)卷使用。

容器卷創(chuàng)建及使用舉例:

[root@localhost ~]# docker run -itd --name datasrv -v /data1 -v /data2  docker.io/sameersbn/bind /bin/bash
#創(chuàng)建運(yùn)行一個(gè)容器,容器名為datasrv,并創(chuàng)建兩個(gè)數(shù)據(jù)卷:data1和data2。
d9e578db8355da35637d2cf9b0a3406a647fe8e70b2df6172ab41818474aab08
[root@localhost ~]# docker exec -it datasrv /bin/bash     #進(jìn)入創(chuàng)建的容器
root@d9e578db8355:/# ls | grep data             #查看是否有對(duì)應(yīng)的數(shù)據(jù)卷
data1
data2
[root@localhost ~]# docker run -itd --volumes-from datasrv --name ftpsrv docker.io/fauria/vsftpd /bin/bash
#運(yùn)行一個(gè)名為ftpsrv的容器,使用--volumes-from來(lái)將datasrv容器中的數(shù)據(jù)卷掛載到這個(gè)ftpsvr新容器上。
eb84fa6e85a51779b652e0058844987c5974cf2a66d1772bdc05bde30f8a254f
[root@localhost ~]# docker exec -it ftpsrv /bin/bash         #進(jìn)入新創(chuàng)建的容器
[root@eb84fa6e85a5 /]# ls | grep data          #查看新的容器是否可以看到datasrv提供的數(shù)據(jù)卷
data1
data2
[root@eb84fa6e85a5 /]# echo " data volumes test" > /data1/test.txt       #在ftpsrv容器中向data1目錄寫(xiě)入文件進(jìn)行測(cè)試
[root@eb84fa6e85a5 /]# exit          #退出該容器
exit
[root@localhost ~]# docker exec -it datasrv /bin/bash     #進(jìn)入提供數(shù)據(jù)卷的datasrv容器
root@d9e578db8355:/# cat /data1/test.txt            #可以看到剛在ftpsrv容器創(chuàng)建的文件,OK。
 data volumes test

注意,生產(chǎn)環(huán)境中最注重的就是存儲(chǔ)的可靠性,以及存儲(chǔ)的可動(dòng)態(tài)擴(kuò)展性,一定要在做數(shù)據(jù)卷時(shí)考慮到這一點(diǎn),在這方面比較出色的還要數(shù)GFS文件系統(tǒng)了,我上面只是做了簡(jiǎn)單的配置,若在生產(chǎn)環(huán)境中,一定要好好考慮,就比如上面做的鏡像卷容器,就可以在宿主機(jī)本地掛載GFS文件系統(tǒng),然后創(chuàng)建鏡像卷容器時(shí),將掛載GFS的目錄映射到容器中的鏡像卷,這樣才是一個(gè)合格的鏡像卷容器。

三、docker網(wǎng)絡(luò)通信

1、端口映射
docker提供了映射容器端口到宿主機(jī)和容器互聯(lián)機(jī)制來(lái)為容器提供網(wǎng)絡(luò)服務(wù)。

在啟動(dòng)容器的時(shí)候,如果不指定對(duì)應(yīng)的端口,在容器外是無(wú)法通過(guò)網(wǎng)絡(luò)來(lái)訪問(wèn)容器內(nèi)的服務(wù)的。docker提供端口映射機(jī)制來(lái)將容器內(nèi)的服務(wù)提供給外部網(wǎng)絡(luò)訪問(wèn),實(shí)質(zhì)上就是將宿主機(jī)的端口映射到容器中,使外部網(wǎng)絡(luò)訪問(wèn)宿主機(jī)的端口可訪問(wèn)容器內(nèi)的服務(wù)。

實(shí)現(xiàn)端口映射,需要在運(yùn)行docker run命令時(shí)使用-P(大寫(xiě))選項(xiàng)實(shí)現(xiàn)隨機(jī)映射,Docker一般會(huì)隨機(jī)映射到一個(gè)端口訪問(wèn)在49000~49900的端口到容器內(nèi)部開(kāi)放的網(wǎng)絡(luò)端口,但不是絕對(duì)的,也有例外情況不會(huì)映射到這個(gè)范圍;也可以使用在運(yùn)行docker run命令時(shí)使用-p(小寫(xiě))選項(xiàng)實(shí)現(xiàn)指定要映射的端口(常用此種方法)。

端口映射舉例:

[root@localhost ~]# docker run -d -P docker.io/sameersbn/bind      #隨機(jī)映射端口
9b4b7c464900df3b766cbc9227b21a3cad7d2816452c180b08eac4f473f88835
[root@localhost ~]# docker run -itd -p 68:67 docker.io/networkboot/dhcpd /bin/bash
#將容器中的67端口映射到宿主機(jī)的68端口
6f9f8125bcb22335dcdb768bbf378634752b5766504e0138333a6ef5c57b7047
[root@localhost ~]# docker ps -a     #查看發(fā)現(xiàn)沒(méi)問(wèn)題咯
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                                                                    NAMES
6f9f8125bcb2        docker.io/networkboot/dhcpd   "/entrypoint.sh /b..."   2 seconds ago       Up 1 second         0.0.0.0:68->67/tcp                                                       keen_brattain
9b4b7c464900        docker.io/sameersbn/bind      "/sbin/entrypoint...."   4 minutes ago       Up 4 minutes        0.0.0.0:32768->53/udp, 0.0.0.0:32769->53/tcp, 0.0.0.0:32768->10000/tcp   coc_gates
#此時(shí),訪問(wèn)宿主機(jī)的68端口就相當(dāng)于訪問(wèn)第一個(gè)容器的67端口;訪問(wèn)宿主機(jī)的32768端口,就相當(dāng)于訪問(wèn)容器的53端口。

2、容器互聯(lián)
容器互聯(lián)是通過(guò)容器的名稱(chēng)在容器之間建立一條專(zhuān)門(mén)的網(wǎng)絡(luò)通信隧道從而實(shí)現(xiàn)的互聯(lián)。簡(jiǎn)單說(shuō),就是會(huì)在源容器和接收容器之間建立一條隧道,接收容器可以看到源容器指定的信息。

在運(yùn)行docker run命令時(shí),使用--link選項(xiàng)實(shí)現(xiàn)容器之間的互聯(lián)通信,格式如下:


--link name: alias    #其中name是要連接的容器名稱(chēng),alias是這個(gè)連接的別名。

容器互聯(lián)是通過(guò)容器的名稱(chēng)來(lái)執(zhí)行的,--name選項(xiàng)可以給容器創(chuàng)建一個(gè)友好的名稱(chēng),這個(gè)名稱(chēng)是唯一的,如果已經(jīng)命名了一個(gè)相同名稱(chēng)的容器,當(dāng)要再次使用這個(gè)名稱(chēng)的時(shí)候,需要先使用docker rm命令來(lái)刪除之前創(chuàng)建的同名容器。

容器互聯(lián)舉例:

[root@localhost ~]# docker run -tid -P --name web1  docker.io/httpd /bin/bash    #運(yùn)行容器web1
c88f7340f0c12b9f5228ec38793e24a6900084e58ea4690e8a847da2cdfe0b
[[root@localhost ~]# docker run -tid -P --name web2 --link web1:web1 docker.io/httpd /bin/bash
#運(yùn)行容器web2,并關(guān)聯(lián)web1容器
c7debd7809257c6375412d54fe45893241d2973b7af1da75ba9f7eebcfd4d652
[root@localhost ~]# docker exec -it web2 /bin/bash     #進(jìn)入web2容器
root@c7debd780925:/usr/local/apache2# cd
root@c7debd780925:~# ping web1        #對(duì)web1進(jìn)行ping測(cè)試
bash: ping: command not found        #sorry,提示沒(méi)有ping命令,下載一個(gè)咯
root@c7debd780925:~#apt-get update    #更新一下
root@c7debd780925:~#apt install iputils-ping     #安裝ping命令
root@c7debd780925:~#apt install net-tools      #這個(gè)是安裝ifconfig命令,可以不安裝,我這里只是做個(gè)筆記
root@c7debd780925:~# ping web1     #再對(duì)web1進(jìn)行ping測(cè)試
PING web1 (172.17.0.2) 56(84) bytes of data.
64 bytes from web1 (172.17.0.2): icmp_seq=1 ttl=64 time=0.079 ms
64 bytes from web1 (172.17.0.2): icmp_seq=2 ttl=64 time=0.114 ms
              ..............#省略部分內(nèi)容
#ping通了,所以可以說(shuō)這兩個(gè)容器肯定是互聯(lián)的咯
#若此時(shí)又創(chuàng)建了web3這個(gè)新容器,要同時(shí)和web1、web2進(jìn)行互聯(lián),命令如下:
[root@localhost ~]# docker run -dit -P --name web3 --link web1:web1 --link web2:web2 docker.io/httpd /bin/bash
#運(yùn)行容器時(shí),關(guān)聯(lián)web1和web2。
#以下是進(jìn)入web3
[root@localhost ~]# docker exec -it web3 /bin/bash
root@433d5be6232c:/usr/local/apache2# cd
#以下是安裝ping命令
root@433d5be6232c:~# apt-get update
root@433d5be6232c:~# apt install iputils-ping
#以下是分別對(duì)web1,web2進(jìn)行ping測(cè)試
root@433d5be6232c:~# ping web1
PING web1 (172.17.0.2) 56(84) bytes of data.
64 bytes from web1 (172.17.0.2): icmp_seq=1 ttl=64 time=0.102 ms
64 bytes from web1 (172.17.0.2): icmp_seq=2 ttl=64 time=0.112 ms
              ..............#省略部分內(nèi)容
root@433d5be6232c:~# ping web2
PING web2 (172.17.0.3) 56(84) bytes of data.
64 bytes from web2 (172.17.0.3): icmp_seq=1 ttl=64 time=0.165 ms
64 bytes from web2 (172.17.0.3): icmp_seq=2 ttl=64 time=0.115 ms
              ..............#省略部分內(nèi)容
#OK,沒(méi)問(wèn)題

———————— 本文至此結(jié)束,感謝閱讀 ————————

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI