Docker之bridge靜態網絡配置

一)補充說明

Docker的網絡子系統可通過driver擴展。默認已有幾種driver提供Docker聯網服務,如下:

bridge   //網橋,是docker的默認driver

host

none

overlay

macvlan

種driver針對不同的使用場景,具體可參見官網:https://docs.docker.com/network/#network-drivers ,這裏摘錄如下:

  • User-defined bridge networks are best when you need multiple containers to communicate on the same Docker host.

  • Host networks are best when the network stack should not be isolated from the Docker host, but you want other aspects of the container to be isolated.

  • Overlay networks are best when you need containers running on different Docker hosts to communicate, or when multiple applications work together using swarm services.

  • Macvlan networks are best when you are migrating from a VM setup or need your containers to look like physical hosts on your network, each with a unique MAC address.

  • Third-party network plugins allow you to integrate Docker with specialized network stacks.


二)bridge配置

根據官網說明,bridge的使用場景是同一宿主機上的多個container互聯。由於bridge是docker的默認driver,因此當未特別指定聯網模式時,啓動容器將使用默認的bridge。但默認的bridge有諸多限制(具體可參見官方說明),因此實際情況是常自定義bridge。

自定義的bridge有以下好處:

  1. 好的隔離性和互操作性:連到同一自定義的bridge的各個容器默認相互之間曝露所有端口,並且不對外部曝露

  2. 自動提供容器之間的DNS解析服務:連到同一自定義的bridge的各個容器不用做特殊DNS配置,可直接通過hostname訪問

  3. 運行中容器聯網配置:可對運行中的容器配置自定義或取消配置自定義bridge

  4. bridge之間相互獨立:用戶可創建N多個bridge,且連接於不同的bridge之上的容器相互獨立

A. 創建自定義bridge

$ docker network create [-d bridge] my-net   //-d指定聯網模式,缺省時默認爲bridge; 可以docker network create --help查看選項參數

B. 創建新的容器

$ docker create --name my-nginx \
  --network my-net \
  --publish 8080:80 \
  nginx:latest         //以--network指明連接哪個bridge; --publish可以用-p替代

C. 將運行中的容器連接至自定義的bridge

$ docker network connect my-net my-nginx

D. 將運行中的容器從自定義bridge上移除

$ docker network disconnect my-net my-nginx

注:資料參考https://docs.docker.com/network/bridge/ 

三)根據自定義的bridge配置靜態IP

A. 創建自定義網絡(bridge)

$ docker network create --subnet=172.18.0.0/16 my-net    //添加--subnet參數

B. 爲容器配置靜態IP

$ docker run -it --network my-net --ip 172.18.0.250 imageID bash   //添加--ip參數

C. 爲容器配置特定hostname

$ docker run -it --network my-net --ip 172.18.0.250 -h hostname imageID bash   //添加-h參數,或--hostname=Name

注:資料參考https://blog.csdn.net/gobitan/article/details/51104362 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章