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的連通性,發現兩個網路就是通暢的了;

結束

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

Tags: