日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker小白到实战之Docker网络简单了解一下

發(fā)布時間:2023/12/4 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker小白到实战之Docker网络简单了解一下 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

現(xiàn)在對于Docker容器的隔離性都有所了解了,但對容器IP地址的分配、容器間的訪問等還是有點小疑問,如果容器的IP由于新啟動導(dǎo)致變動,那又怎么才能保證原有業(yè)務(wù)不會被影響,這就和網(wǎng)絡(luò)有掛鉤了,接下來就大概說說。

正文

1. Docker網(wǎng)絡(luò)模式簡介

當Docker進程啟動時,會在主機上創(chuàng)建一個名為docker0的虛擬網(wǎng)橋,此主機上啟動的Docker容器默認會連接到這個虛擬網(wǎng)橋上。這樣所有容器通過這個虛擬網(wǎng)橋就打通了,所以這里的docker0工作方式和物理交換機很像。

在主機上可以執(zhí)行命令ip link show docker0查看:

Docker在啟動容器時可以指定網(wǎng)絡(luò)模式,如果不指定,默認就是采用Bridge模式;Docker的網(wǎng)絡(luò)模式有如下幾種:

  • Bridge(橋接)模式:默認的網(wǎng)絡(luò)模式,比較適用于在同一Docker Daemon主機上運行的容器,用戶也可以自定義bridge網(wǎng)絡(luò),優(yōu)于默認的bridge網(wǎng)絡(luò);如果需要不同Docker主機進行通信,可以通過操作系統(tǒng)網(wǎng)絡(luò)配置,也可以使用Overlay模式。

  • Host模式:和宿主機共用一個Network Namespace。即容器不會虛擬出自己的網(wǎng)卡和配置自己的IP等,而是使用宿主機的IP和端口;

  • Overlay模式:覆蓋網(wǎng)絡(luò)可以將多個 Docker Daemon主機連接在一起,并使 swarm 服務(wù)能夠相互通信;也可以讓Docker Daemon主機上的兩個獨立容器進行通信。

  • Macvlan模式:Macvlan 網(wǎng)絡(luò)允許為容器分配 MAC 地址,使其在網(wǎng)絡(luò)上顯示為物理設(shè)備。Docker Deamon通過容器的 MAC 地址將流量路由到容器。

  • None模式:Docker容器擁有自己的Network Namespace,但是并不為容器進行任何網(wǎng)絡(luò)配置。即容器沒有網(wǎng)卡、IP、路由等信息。需要單獨為Docker容器添加網(wǎng)卡、配置IP

Docker在啟動容器的時候可以通過--net指定網(wǎng)絡(luò)模式,不指定,默認就是bridge模式,如下:

#?--net指定網(wǎng)絡(luò)模式,這里指定為host模式 docker?run?-d?--name?testnet?--net?host?nginx #?通過docker?inspect?容器?看網(wǎng)絡(luò)細節(jié),如下圖 docker?inspect?testnet

2. Bridge默認模式了解一下

這里就以默認的Bridge(橋接)展開來說說,其他模式后續(xù)根據(jù)應(yīng)用場景再具體細說。

這里主要看看主機和容器之間的網(wǎng)絡(luò)、容器和容器之間的網(wǎng)絡(luò)。

在Bridge模式下,當啟動容器時,Docker會分配一個IP給容器,并設(shè)置docker0的IP地址為容器的默認網(wǎng)關(guān);這個時候會在主機上創(chuàng)建一對虛擬網(wǎng)卡veth pair設(shè)備接口,Docker將veth pair設(shè)備的一端配置在新啟動的容器中,并命名為eth0@ifxxx(容器的網(wǎng)卡),另一端在主機中以veth***@ifxxx這樣類似的名字命名,并將這個網(wǎng)絡(luò)設(shè)備加入到docker0網(wǎng)橋中。

容器沒有啟動時主機的網(wǎng)絡(luò)配置如下:

當啟動容器時,Docker主機就會創(chuàng)建一對虛擬網(wǎng)卡vethpair設(shè)備接口,如下:

可以進入到容器看看IP分配情況,如果ip addr命令在容器內(nèi)找不到,那是因為基礎(chǔ)鏡像只包含核心命令,如果要執(zhí)行其他命令,需要額外安裝。可以在容器內(nèi)執(zhí)行如下命令進行安裝。

apt?update?&&?apt?install?-y?iproute2

安裝好之后,就可以查看容器內(nèi)的IP情況了,如下:

這里有沒有發(fā)現(xiàn)容器內(nèi)的IP是和主機多出來的虛擬網(wǎng)卡是成對出現(xiàn),這樣主機網(wǎng)絡(luò)和容器之間肯定能通;

當然容器內(nèi)部也可以ping通主機。

那容器之間能不能訪問呢?

容器內(nèi)ping命令也找不到,需要進行安裝,執(zhí)行如下命令:

apt?update?&&?install?iputils-ping

這里新啟動一個容器mynginx2,IP內(nèi)部分配如下:

mynginx容器內(nèi)能ping通mynginx2,那是因為兩個容器之間共用了docker0,通過docker0進行轉(zhuǎn)發(fā)。

大概一個網(wǎng)絡(luò)流程如下:

這里的Docker0就好比是交換機,形成了網(wǎng)絡(luò)橋梁。

3. 如何能通過容器名進行訪問

默認情況,容器間的訪問只能通過IP,不能通過容器名訪問;

這種情況對于線上項目很不靈活,比如數(shù)據(jù)庫備份需要臨時遷移,IP可能會不一樣,所以項目中的地址要重新配置,如果能通過容器名訪問,那么就不用操心更換啦,只要容器名一樣即可,就好比域名和IP的關(guān)系一樣,IP再怎么變,域名不變就行。

3.1 通過--link方式;

新啟動一個容器mynginx3,如下:

#?通過--link關(guān)聯(lián)?mynginx容器 docker?run?-d?--name?mynginx3?--link?mynginx?nginx

容器啟動之后,可以進入到容器測試:

#?進入容器 docker?exec?-it?mynginx3?/bin/bash? #?安裝ping工具 apt?update?&&?apt?install?iputils-ping

內(nèi)部原理其實是在mynginx3內(nèi)部做了個映射配置,容器mynginx3的hosts內(nèi)容如下:

這樣只能在容器mynginx3內(nèi)部通過mynginx容器名ping通,不能在mynginx內(nèi)部通過容器名mynginx3訪問,如果要達到同樣的效果,就得在啟動mynginx時通過--link和mynginx3關(guān)聯(lián)起來。

如果每個容器都這樣的顯示指定的話,感覺就有點麻煩啦,通常的做法都是通過自定義網(wǎng)絡(luò)方式來達到這個目的。

3.2 通過自定義網(wǎng)絡(luò)方式;

首先新創(chuàng)建一個網(wǎng)絡(luò),如下:

命令解析:

#?--driver?指定網(wǎng)絡(luò)模式,這里為bridge橋接模式 #?--subnet?指定子網(wǎng)IP??192.168.0.0/16 #?--gateway?指定網(wǎng)關(guān)?192.168.0.1 #?my-net?創(chuàng)建的網(wǎng)絡(luò)名 docker?network?create?--driver?bridge?--subnet?192.168.0.0/16?--gateway?192.168.0.1?my-net #?顯示網(wǎng)絡(luò) docker?network?ls

讓啟動的容器使用自定義的網(wǎng)絡(luò),即在啟動容器時使用--net指定即可:

啟動容器時不需要--link,只需要接入到自定義網(wǎng)絡(luò)就可以通過容器名ping通了,如下:

自定義網(wǎng)絡(luò)之所以能通過容器名ping通,那是容器內(nèi)運行了一個本地DNS解析器,該解析器將請求轉(zhuǎn)發(fā)到Docker內(nèi)部DNS服務(wù)器當中,DNS服務(wù)器中記錄了容器啟動時通過--name或--net-alias參數(shù)指定的名稱與容器之間的關(guān)系。

另外還有一個點,現(xiàn)在分配給容器的IP是按照預(yù)先設(shè)置的子網(wǎng)范圍進行分配的,而不是默認的docker0子網(wǎng)范圍,執(zhí)行如下命令看詳細:

#?看容器詳細信息 docker?inspect?testmynetnginx1

總結(jié)

關(guān)于Docker網(wǎng)絡(luò)簡單先說這么多,后續(xù)根據(jù)實際應(yīng)用場景再好好細說,這里主要的目的是了解一下默認的網(wǎng)絡(luò)模式和自定義網(wǎng)絡(luò)方式的使用和解決的問題。

Docker之前文章目錄:

  • Docker小白到實戰(zhàn)之開篇概述

  • Docker小白到實戰(zhàn)之常用命令演示,通俗易懂

  • Docker小白到實戰(zhàn)之容器數(shù)據(jù)卷,整理的明明白白

  • Docker小白到實戰(zhàn)之Dockerfile解析及實戰(zhàn)演示,果然順手

  • 到目前為止,一般的Docker使用沒問題了,但當容器比較多時,一個一個的拉取鏡像和啟動容器就顯得有點不方便了,所以下次我們來學(xué)學(xué)Docker Compose,關(guān)注“Code綜藝圈”,和我一起學(xué)習(xí)吧;最后祝小伙伴們中秋快樂~~~

    總結(jié)

    以上是生活随笔為你收集整理的Docker小白到实战之Docker网络简单了解一下的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。