Docker單機網絡實戰


前言

Docker系列文章:

此篇是Docker系列的第八篇,大家一定要按照我做的Demo都手敲一遍,印象會更加深刻的,加油!

  1. 為什么要學習Docker
  2. Docker基本概念
  3. Docker鏡像基本原理
  4. Docker容器數據卷
  5. Dockerfile
  6. Docker單機網絡上
  7. Docker單機網絡下

基本命令

img
img

--net網絡模式驗證

img
img

bridge模式已在在網絡初探的小節已經驗證過了,這里就不再進行驗證,接下來我們主要驗證的是剩下的三總模式;

none

  1. 后台方式啟動一個版本為最新的centos名字為centosworktest03網絡模式為none的容器;

    docker run -d -it --name centosworktest03 --net none centos:latest
  2. 交互模式進入容器內部;

    docker ps
    docker exec -it 9a97610ae54a /bin/bash
  3. 驗證網絡模型,當你使用yum install net-tools 安裝命令的時候他會提示下載失敗;img

  4. 我們使用自帶的ip addr來查看網路,我們會發現只有一個網絡回環地址,使用none模式整個容器的網絡是與其他網絡隔離的;

host

  1. 后台方式啟動一個版本為最新的centos名字為centosworktest04網絡模式為host的容器;

    docker run -d -it --name centosworktest04 --net host centos:latest
  2. 交互模式進入容器內部;

    docker ps
    docker exec -it 2958410a53c5 /bin/bash
  3. ip addr查看網絡模式,會發現與宿主機的網絡模型是一致的;

container

  1. 后台方式啟動一個版本為最新的centos名字為centosworktest05網絡模式為container的容器采用centosworktest的網絡模式;

    docker run -d -it --name centosworktest05 --net container:centosworktest centos:latest
  2. 交互模式進入容器內部;

    docker exec -it 0a8ea7a39e1a /bin/bash
  3. ip addr查看網絡模式,會發現與容器centosworktest的網絡模式是一致的;

--link

容器在啟動的IP地址是動態分配的,如何做到本地服務的發現?也就是說容器的IP變了,如何還能夠調用到對應的服務,link可以通過名稱調用來解決這個問題,但是不推薦使用link來解決該問題,這里的介紹只是來了解一下這個知識點的優缺點。

使用

簡單介紹一下我們的案例,這里我們使用的容器名稱為centosworktest03的容器,該容器的網絡膜模型為none,只能在網絡內部通信,我們使用--link啟動一個centoslinktest的容器,來測試link的作用。這里我們因為centosworktest03容器一直在啟動着,我們就直接啟動centoslinktest做實驗了。

  1. 后台方式啟動一個版本為最新的centos名字為centoslinktest容器鏈接到centosworktest03這個容器;

    docker run -d -it --name centoslinktest --link centosworktest02:centosworktest02 centos:latest
  2. 檢查容器centoslinktest與容器centosworktest02網絡是否通暢;

    docker exec -it centoslinktest ping centosworktest02
  3. 檢查容器centosworktest02與容器centoslinktest的網絡是否通暢;

    docker exec -it centosworktest02 ping centoslinktest
  4. 查看centoslinktest的hosts文件,會發現在配置文件中存在了centosworktest02配置;

缺點
  1. link的網絡是單向的,也不具備傳遞的特性;
  2. link的配置是靜態的,當容器的IP發生改變的話,配置的鏈接就失效了;

自定義網絡

  1. 創建一個networktest的網絡,使用--subnet指定容器分配網段,使用--gateway指定網關;

    docker network create --driver bridge --subnet  192.168.1.0/24 --gateway 192.168.1.1 networktest
  2. 查看網絡列表;

    docker network ls
  3. 查看具體配置docker network inspect networktest;

實戰
  1. 后台方式分別啟動名字叫customernetwork1和customernetwork2,網絡模式為networktest的容器;

    docker run -d -it --name customernetwork1 --net networktest  centos:latest
    docker run -d -it --name customernetwork2 --net networktest  centos:latest
  2. 測試customernetwork1和customernetwork2網絡的連通性,發現網絡之間是聯通的;

  3. 測試customernetwork1與docker0網絡中容器的連通性,發現兩個網絡是不通的,因為屬於不同的網段;

    docker exec -it e34051b19cfe ping 172.17.0.2
優點

自定義bridge網絡與默認bridge網絡docker0的優點如下:

  1. 自定義bridge具有更好的隔離性和容器間的互操作性,連接到同一個自定義bridge網絡的容器會自動將所有端口相互暴露,並且無法連接到容器外的網絡,使得容器化的應用能輕松地相互通信,並且與外部環境產生了良好的隔離性。

  2. 自定義bridge提供容器間通過名稱自動發現的機制,也就是DNS解析,默認bridge網絡上的容器只能通過IP地址互相訪問,除非使用link命令,在用戶定義橋接網絡上,容器可以通過容器名稱或別名來解析。

  3. 自定義bridge網絡使用docker network create創建和配置。如果不同的應用程序組具有不同的網絡要求,則可以在創建時分別配置每個用戶定義的 bridge網絡,增加了靈活性和可控性。

不同網段的容器如何通信
img
img
  1. 將容器centosworktest加入到自定義網絡networktest中;

    docker network connect networktest centosworktest
  2. 測試centosworktest與customernetwork1的連通性,發現兩個網絡就是通暢的了;

結束

歡迎大家點點關注,點點贊!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM