天天看點

Docker入門與實踐:Docker中的網絡功能簡介Docker入門與實踐:Docker中的網絡功能簡介

Docker入門與實踐:Docker中的網絡功能簡介Docker入門與實踐:Docker中的網絡功能簡介

Docker入門與實踐:Docker中的網絡功能簡介

Docker提供網絡服務的方法包括兩種:

  • 通過外部通路docker容器的方式;
  • 通過Docker容器間互聯的方式。

一、外部通路docker容器

在docker容器中可以運作一些網絡應用,外部想要通路docker容器内的應用,可以通過

-p

-P

選項來指定端口映射,兩個選項的差別如下所示:

  • (1)

    -p

    :指定要映射的端口,通過該端口綁定一個docker容器;
  • (2)

    -P

    :docker會随機映射一個範圍的端口到内部容器開放的網絡端口。其中這個随機的端口範圍可以在

    /proc/sys/net/ipv4/ip_local_port_range

    檔案中檢視,如下圖所示,我的電腦中的端口範圍為

    32768-60999

Docker入門與實踐:Docker中的網絡功能簡介Docker入門與實踐:Docker中的網絡功能簡介

1.1 使用

-P

選項外部通路docker容器

如下圖所示,使用

docker run -d -P training/webapp python app.py

指令建立一個可以通過外部網絡通路的docker容器;然後使用

docker container ls -l

檢視容器的端口資訊。這樣就建立了一個本地主機

49159

端口映射到容器

5000

端口的容器。

Docker入門與實踐:Docker中的網絡功能簡介Docker入門與實踐:Docker中的網絡功能簡介

1.2 使用

-p

選項外部通路docker容器

如上所述,

-p

指定特定的端口綁定到一個容器上,其支援的格式有:

  • hostPort:containerPort

    :映射本地特定端口所有ip位址到容器的特定端口;
  • ip:hostPort:containerPort

    :映射本地特定端口的特定ip位址到容器的特定端口;
  • ip::containerPort

    :映射本地主機特定ip位址的随機端口到容器特定的端口;

其中,上面的

hostPort

表示主機端口或本地端口;

containerPort

表示容器端口;

ip

表示網址,下面分别羅列這三種格式的使用方法:

1、映射本地特定端口所有ip位址到容器的特定端口

使用

hostPort:containerPort

格式可以将本地主機特定端口映射到容器的特定端口,以實作外部通路容器的目的,指令如下所示:

docker run -d -p 5000:5000 training/webapp python app.py
           

複制

如下圖所示,預設會綁定本地接口

5000

上所有ip位址到容器的

5000

端口上。

Docker入門與實踐:Docker中的網絡功能簡介Docker入門與實踐:Docker中的網絡功能簡介

上圖中的

0.0.0.0:5000

表示本地主機

5000

端口上的所有ip位址。

2、映射本地特定端口的特定ip位址到容器的特定端口

使用

ip:hostPort:containerPort

格式可以将本地主機的特定端口的特定ip位址映射到容器的特定端口,以實作外部通路容器的目的,比如這裡的

ip

127.0.0.1

,指令如下所示:

docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
           

複制

如下圖所示,預設會綁定本地端口

5000

127.0.0.1

的ip位址到容器的

5000

端口上。

Docker入門與實踐:Docker中的網絡功能簡介Docker入門與實踐:Docker中的網絡功能簡介

3、映射本地主機特定ip位址的随機端口到容器特定的端口

使用

ip::containerPort

格式可以将本地主機特定的ip位址的随機端口到容器的特定端口,以實作外部通路容器的目的,比如這裡的

ip

127.0.0.1

,指令如下所示:

docker run -d -p 127.0.0.1::5000 training/webapp python app.py
           

複制

如下圖所示,綁定本地主機随機端口上的

127.0.0.1

ip位址到容器的

5000

端口上,這裡的随機配置設定的主機端口為

49154

Docker入門與實踐:Docker中的網絡功能簡介Docker入門與實踐:Docker中的網絡功能簡介
注意:

-p

可以多次使用來綁定多個端口,指令如下所示:
docker run -d \
    -p 5000:5000 \
    -p 3000:80 \
    training/webapp \
    python app.py
           

複制

執行完上面指令,使用

docker container ls

指令就可以看出綁定了兩組端口:

Docker入門與實踐:Docker中的網絡功能簡介Docker入門與實踐:Docker中的網絡功能簡介

二、Docker容器的互聯

Docker容器不僅可以通過網絡與本地主機互聯,容器還可以通過docker自定義的網絡來實作容器間互聯。

2.1 自定義docker網絡的建構

建構自定義docker網絡的指令如下所示:

docker network create -d bridge My_Net
           

複制

其中,

-d

指定了docker的網絡類型為

bridge

類型,并自定義docker網絡的名稱為

My_Net

。如下圖所示,可以使用

docker network ls

檢視系統的docker網絡:

Docker入門與實踐:Docker中的網絡功能簡介Docker入門與實踐:Docker中的網絡功能簡介

2.2 Docker容器的網絡連接配接

這裡示範兩個容器通過上面建立的docker網絡

My_Net

,進行互聯的過程:

1、建立連接配接docker網絡的容器

首先,啟動或建立一個

busybox_1

容器并連接配接到上面建立的

My_Net

docker網絡,指令如下所示:

docker run -it --rm \
    --name busybox_1 \
    --network My_Net busybox sh
           

複制

如下如所示,由于本地沒有

busybox:latest

鏡像,是以首先從遠端鏡像倉庫拉取鏡像,再建立連接配接的docker網絡

My_Net

的容器

busybox_2

Docker入門與實踐:Docker中的網絡功能簡介Docker入門與實踐:Docker中的網絡功能簡介

然後,再打開一個終端,使用同樣的方法建立一個

busybox_2

容器并連接配接到

My_Net

docker網絡:

docker run -it --rm \
    --name busybox_2 \
    --network My_Net busybox sh
           

複制

Docker入門與實踐:Docker中的網絡功能簡介Docker入門與實踐:Docker中的網絡功能簡介

再打開一個終端,如下圖所示,使用

docker container ls

檢視容器資訊:

Docker入門與實踐:Docker中的網絡功能簡介Docker入門與實踐:Docker中的網絡功能簡介

2、測試通過docker網絡互聯的容器

通過

ping

來測試

busybox_1

容器和

busybox_2

容器的互聯:

如下圖所示,在

busybox_2

容器内輸入

ping busybox_1

,即用

ping

指令來測試

busybox_2

容器連接配接

busybox_1

的情況,到如下圖的結果則表示兩個容器互聯成功:

Docker入門與實踐:Docker中的網絡功能簡介Docker入門與實踐:Docker中的網絡功能簡介