最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Docker網(wǎng)絡(luò)配置的三種方式

 更新時間:2024年01月18日 09:20:57   作者:Java方文山  
在使用Docker時,網(wǎng)絡(luò)通信是必不可少的,它可以使不同的Docker容器相互通信,也可以將容器與外部網(wǎng)絡(luò)連接起來,本文給大家介紹了Docker網(wǎng)絡(luò)配置的三種方式,文中通過圖文給大家講解非常詳細,需要的朋友可以參考下

前言

在使用Docker時,網(wǎng)絡(luò)通信是必不可少的,它可以使不同的Docker容器相互通信,也可以將容器與外部網(wǎng)絡(luò)連接起來。以下是一個場景的示例:

假設(shè)你正在開發(fā)一個包含前端和后端的Web應用程序。你可以使用Docker來創(chuàng)建兩個容器,一個用于運行前端代碼,另一個用于運行后端代碼。

在這種情況下,網(wǎng)絡(luò)通信非常重要。前端容器需要能夠與后端容器進行通信,以便從后端獲取數(shù)據(jù)并將其呈現(xiàn)給用戶。同時,前端容器還需要能夠通過網(wǎng)絡(luò)將用戶的請求發(fā)送到后端容器。

通過創(chuàng)建一個自定義的Docker網(wǎng)絡(luò),你可以實現(xiàn)這種通信。你可以將兩個容器連接到同一個網(wǎng)絡(luò)中,使它們能夠通過網(wǎng)絡(luò)進行通信。這樣,前端容器就可以通過網(wǎng)絡(luò)請求來獲取后端容器提供的數(shù)據(jù),然后將結(jié)果呈現(xiàn)給用戶。

此外,你還可以配置Docker網(wǎng)絡(luò),使得外部網(wǎng)絡(luò)可以通過特定端口訪問你的應用程序。這樣,用戶可以通過他們的Web瀏覽器訪問你的應用程序,并與前端容器進行通信,通過網(wǎng)絡(luò)請求與后端容器進行交互。

一、網(wǎng)絡(luò)相關(guān)

在學習網(wǎng)絡(luò)模式的配置之前我們需要了解以下幾個東西,分別是子網(wǎng)掩碼、網(wǎng)關(guān)、規(guī)則,這些東西對于后面我們對ip的理解有很大的幫助。

1.子網(wǎng)掩碼

IP地址是以網(wǎng)絡(luò)號和主機號來標示網(wǎng)絡(luò)上的主機的,我們把網(wǎng)絡(luò)號相同的主機稱之為本地網(wǎng)絡(luò),網(wǎng)絡(luò)號不相同的主機稱之為遠程網(wǎng)絡(luò)主機,本地網(wǎng)絡(luò)中的主機可以直接相互通信;遠程網(wǎng)絡(luò)中的主機要相互通信必須通過本地網(wǎng)關(guān)(Gateway)來傳遞轉(zhuǎn)發(fā)數(shù)據(jù)。

  • 子網(wǎng)掩碼是“255.255.255.0”的網(wǎng)絡(luò):

最后面一個數(shù)字可以在 0~255 范圍內(nèi)任意變化,因此可以提供 256 個 IP 地址。但是實際可用的 IP 地址數(shù)量是256-2 ,即 254 個,因為主機號不能全是 “0” 或全是 “1” 。

  • 子網(wǎng)掩碼是“255.255.0.0”的網(wǎng)絡(luò):

后面兩個數(shù)字可以在 0~255 范圍內(nèi)任意變化,可以提供 255² 個 IP 地址。但是實際可用的 IP 地址數(shù)量是255²-2 ,即 65023 個。

1.1.子網(wǎng)掩碼的組成

①同IP地址一樣,子網(wǎng)掩碼是由長度為32位二進制數(shù)組成的一個地址。
②子網(wǎng)掩碼32位與IP地址32位相對應,IP地址如果某位是網(wǎng)絡(luò)地址,則子網(wǎng)掩碼為1,否則為0。
③舉個栗子:如:11111111.11111111.11111111.00000000

注:左邊連續(xù)的1的個數(shù)代表網(wǎng)絡(luò)號的長度,(使用時必須是連續(xù)的,理論上也可以不連續(xù)),右邊連續(xù)的0的個數(shù)代表主機號的長度。

1.2.子網(wǎng)掩碼的表示方法

①、點分十進制表示法
二進制轉(zhuǎn)換十進制,每8位用點號隔開
例如:子網(wǎng)掩碼二進制11111111.11111111.11111111.00000000,表示為255.255.255.0

②、CIDR斜線記法
IP地址/n
例1:192.168.1.100/24,其子網(wǎng)掩碼表示為255.255.255.0,二進制表示為11111111.11111111.11111111.00000000
例2:172.16.198.12/20,其子網(wǎng)掩碼表示為255.255.240.0,二進制表示為11111111.11111111.11110000.00000000
不難發(fā)現(xiàn),例1中共有24個1,例2中共有20個1,所以n是這么來的。運營商ISP常用這樣的方法給客戶分配IP地址。

注:n為1到32的數(shù)字,表示子網(wǎng)掩碼中網(wǎng)絡(luò)號的長度,通過n的個數(shù)確定子網(wǎng)的主機數(shù)=2^(32-n)-2(-2的原因:主機位全為0時表示本網(wǎng)絡(luò)的網(wǎng)絡(luò)地址,主機位全為1時表示本網(wǎng)絡(luò)的廣播地址,這是兩個特殊地址)。

1.3.子網(wǎng)掩碼的分類

①、缺省子網(wǎng)掩碼

也叫默認子網(wǎng)掩碼,即未劃分子網(wǎng),對應的網(wǎng)絡(luò)號的位都置 1 ,主機號都置 0 。

未做子網(wǎng)劃分的IP地址:網(wǎng)絡(luò)號+主機號

A類網(wǎng)絡(luò)缺省子網(wǎng)掩碼: 255.0.0.0,用CIDR表示為/8

B類網(wǎng)絡(luò)缺省子網(wǎng)掩碼: 255.255.0.0,用CIDR表示為/16

C類網(wǎng)絡(luò)缺省子網(wǎng)掩碼: 255.255.255.0,用CIDR表示為/24

②、自定義子網(wǎng)掩碼

將一個網(wǎng)絡(luò)劃分子網(wǎng)后,把原本的主機號位置的一部分給了子網(wǎng)號,余下的才是給了子網(wǎng)的主機號。其形式如下:

做子網(wǎng)劃分后的IP地址:網(wǎng)絡(luò)號+子網(wǎng)號+子網(wǎng)主機號

舉個例子:

如:192.168.1.100/25,其子網(wǎng)掩碼表示:255.255.255.128

意思就是將192.168.1.0這個網(wǎng)段的主機位的最高1位劃分為了子網(wǎng)。關(guān)于子網(wǎng)劃分將在下篇文章講到,這里不在闡述。

2.網(wǎng)關(guān)

網(wǎng)關(guān)實質(zhì)上是一個網(wǎng)絡(luò)通向其他網(wǎng)絡(luò)的 IP 地址。 路由器( Windows 下叫默認網(wǎng)關(guān),網(wǎng)關(guān)就是路由,路由就是網(wǎng)關(guān)不要蒙)

在如下拓撲圖示例中,A與B,C與D,都可以直接相互通信(都是屬于各自同一網(wǎng)段,不用經(jīng)過路由器),但是A與C,A與D,B與C,B與D它們之間不屬于同一網(wǎng)段,所以它們通信是要經(jīng)過本地網(wǎng)關(guān),然后路由器根據(jù)對方IP地址,在路由表中查找恰好有匹配到對方IP地址的直連路由,于是從另一邊網(wǎng)關(guān)接口轉(zhuǎn)發(fā)出去實現(xiàn)互連。

注意:網(wǎng)關(guān)的主機部分通常占用的是.1

3.規(guī)則

計算機的 IP 地址由兩部分組成,一部分為網(wǎng)絡(luò)標識,一部分為主機標識,同一網(wǎng)段內(nèi)的計算機網(wǎng)絡(luò)部分相同,主機部分不同同時重復出現(xiàn)。 路由器連接不同網(wǎng)段,負責不同網(wǎng)段之間的數(shù)據(jù)轉(zhuǎn)發(fā),交換機連接的是同一網(wǎng)段的計算機。通過設(shè)置網(wǎng)絡(luò)地址和主機地址,在互相連接的整個網(wǎng)絡(luò)中保證每臺主機的IP 地址不會互相重疊,即 IP 地址具有了唯一性。

在計算機網(wǎng)絡(luò)中,主機 ID 全部為 0 的地址為網(wǎng)絡(luò)地址,而主機 ID 全部為 1 的地址為廣播地址 這 2 個地址是不能分配給主機用的

二、Dockers的網(wǎng)絡(luò)配置

當你安裝了 docker, 它會自動創(chuàng)建 3 個網(wǎng)絡(luò),可以使用 docker network ls 命令來查看

docker network ls

Docker提供了以下常用的網(wǎng)絡(luò)模式:

Bridge模式(橋接模式):默認的網(wǎng)絡(luò)模式,容器通過虛擬網(wǎng)橋連接到主機的物理網(wǎng)絡(luò)接口上,可以通過端口映射將容器的端口映射到主機上。

Host模式(主機模式):容器與主機共享網(wǎng)絡(luò)命名空間,容器直接使用主機的網(wǎng)絡(luò)棧,可以輕松訪問主機上的網(wǎng)絡(luò)資源,但會損失一定的隔離性。

None模式(無網(wǎng)絡(luò)模式):容器不連接到任何網(wǎng)絡(luò),只能通過內(nèi)部與其他容器進行通信,不能與外部進行網(wǎng)絡(luò)通信。

當你運行一個容器的時候,可以使用 --network 參數(shù)來指定你的容器連接到哪一個網(wǎng)絡(luò)。

1.bridge模式

當 Docker 進程啟動時,會在主機上創(chuàng)建一個名為 docker0 的虛擬網(wǎng)橋,此主機上啟動的 Docker 容器會連接到這個虛擬網(wǎng)橋上。

虛擬網(wǎng)橋的工作方式和物理交換機類似,這樣主機上的所有容器就通過交換機連在了一個二層網(wǎng)絡(luò)中。 從 docker0 子網(wǎng)中分配一個 IP 給容器使用,并設(shè)置 docker0 的 IP 地址為容器的默認網(wǎng)關(guān)。 在主機上創(chuàng)建一對虛擬網(wǎng)卡 veth pair 設(shè)備, Docker 將 veth pair 設(shè)備的一端放在新創(chuàng)建的容器中,并命名為eth0 (容器的網(wǎng)卡),另一端放在主機中,以 vethxxx 這樣類似的名字命名,并將這個網(wǎng)絡(luò)設(shè)備加入 到 docker0 網(wǎng)橋中。

bridge模式是docker的默認網(wǎng)絡(luò)模式,不寫--net參數(shù),就是bridge模式。每個bridge模式的容器都有一個獨立的IP,如果外部需要訪問需要進行端口映射。

docker run -itd --name t1 -p 8080:8080 tomcat:8.5.20

創(chuàng)建一個容器后我們查看一下它的bridge信息

docker inspect t1

可以看到它網(wǎng)橋是172.17.0.2,它的網(wǎng)關(guān)是172.17.0.1,網(wǎng)絡(luò)模式是bridge

我們再來看一下這個網(wǎng)絡(luò)模式bridge

docker inspect bridge

這里有個Containers容器集合,bridge的容器中就會有個“t1”容器它的IP是172.17.0.2/16說明它的子網(wǎng)掩碼是255.255.0.0,用CIDR表示為/16

docker0 就像是一個路由器,容器就像是路由器下的設(shè)備,它們在同一個網(wǎng)段內(nèi)可以互相 ping 通。

注意:
-p 參數(shù)可以出現(xiàn)多次,綁定多個端口號
docker run - itd -- name t1  - p 8082:8080 - p 8083:8080 tomcat:8.5.20

2.host模式

如果啟動容器的時候使用 host 模式,那么這個容器將不會獲得一個獨立的 Network Namespace ,而是 和宿主機共用一個Network Namespace 。 容器將不會虛擬出自己的網(wǎng)卡,配置自己的 IP 等,而是使用宿主機的 IP 和端口。 但是,容器的其他方面,如文件系統(tǒng)、進程列表等還是和宿主機隔離的。

創(chuàng)建一個容器指定為host模式

docker run -itd --name t2  --net=host tomcat:8.5.20

如果你的虛擬機是和主機一個網(wǎng)絡(luò)那么可直接訪問8080,不需要做端口映射

使用host模式可能會導致安全隱患。由于容器共享主機網(wǎng)絡(luò)棧,容器內(nèi)的進程可以訪問主機上的所有網(wǎng)絡(luò)資源,包括主機上未公開的端口和共享文件。因此,如果容器本身存在安全漏洞,則容易受到攻擊。

三、容器之間相互通訊

我們了解了bridge模式,下面我們來嘗試一下看看是否真的可以建立連接

docker run -it --name c1   centos
 
docker run -it --name c2   centos

首先創(chuàng)建兩個容器,因為默認是bridge模式所以不用指定,下面再查看一下c2的IP是多少

ip addr

可以看到我們的c2的IP是172.17.0.3我們使用c1連接一下

四、自定義IP通訊

1.容器之間連接mysql

我們現(xiàn)在宿主機上創(chuàng)建一個目錄名為soft并往目錄下放入一個war包

創(chuàng)建一個基于tomcat的容器并進行目錄掛載

docker run -it \
--name t1 \
-p 8080:8080 \
-v /soft:/usr/local/tomcat/webapps \
tomcat:8.5.20

可以看到跑成功了

但是我們接下來做一個操作進行數(shù)據(jù)訪問

進行數(shù)據(jù)訪問它會去連接我們的mysql,因為沒有mysql所以報錯,現(xiàn)在我們來搞一個mysql,創(chuàng)建mysql之前需要做一個事情,mysql需要一個my.cnf的配置文件,目前我們還沒有所以需要在宿主機上創(chuàng)建一個將該文件放入到目錄中

mkdir -p /mysql/{conf,data}

這是my.cnf的內(nèi)容

[client]
default-character-set=utf8
 
[mysql]
default-character-set=utf8
 
[mysqld]
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
 
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
 
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
 
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
# default: sql_mode= STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# modeified: 
sql_mode= STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
max_allowed_packet=10M
default-time_zone='+8:00'
default_authentication_plugin=mysql_native_password

我們進入到mysql/data目錄下創(chuàng)建mysql容器

docker run \
--name m1 \
-v /mysql/conf/my.cnf:/etc/my.cnf \
-v /mysql/data:/var/lib/mysql \
--privileged=true \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql/mysql-server:5.7

進入我們的mysql容器進行登錄

 docker exec -it m1 bash
 
 
mysql -uroot -p

登錄成功以后,我們現(xiàn)在需要一個賬戶進行遠程連接所以創(chuàng)建一個賬戶并賦予權(quán)限

grant all on *.* to ww@'%' identified by '密碼'

記得重啟一下docker restart m1

我們進入到被解壓的war的配置文件中修改配置文件中的mysql連接

我們查看指定容器的日志并以實時方式跟蹤輸出看一下現(xiàn)在會怎么樣。

docker -logs -f t1

2.自定義容器IP

雖然現(xiàn)在容器之間是可以相互訪問了,但是我們的ip是docker0發(fā)放的,也就是說,這個ip和創(chuàng)建容器的順序有關(guān)系,如果我是先創(chuàng)建mysql容器后創(chuàng)建tomcat容器,那么我們的ip是不是又發(fā)生了改變,是不是有需要去修改mysql的配置連接?太麻煩了我只能說。

我們就可以使用自定義網(wǎng)絡(luò)的方式,自定義網(wǎng)絡(luò)不但支持自定義IP還可以支持以容器名的方式進行訪問。

①我們首先需要創(chuàng)建一個網(wǎng)絡(luò)

docker network create --subnet 172.18.0.0/16 --gateway 172.18.1.1 [name]

②我們需要查看該網(wǎng)絡(luò)的網(wǎng)段是多少

docker inspect net

③為我們的容器指定IP

docker run -it \
--name t1 \
-p 8080:8080 \
-v /soft:/usr/local/tomcat/webapps \
--net net \
--ip 172.18.0.2 \
tomcat:8.5.20
docker run \
--name m1 \
-v /mysql/conf/my.cnf:/etc/my.cnf \
-v /mysql/data:/var/lib/mysql \
--privileged=true \
-e MYSQL_ROOT_PASSWORD=123456 \
--net net \
--ip 172.18.0.3 \
-d mysql/mysql-server:5.7

④修改mysql連接的配置文件

我們前面說過自定義網(wǎng)絡(luò)的方式可以通過容器名來訪問

五、注意事項

①根據(jù)自定義網(wǎng)絡(luò)創(chuàng)建容器失敗

如果在使用自定義網(wǎng)絡(luò)創(chuàng)建容器的時候出現(xiàn)這個問題

因為docker中,只有使用 --subnet創(chuàng)建的網(wǎng)絡(luò)才能指定靜態(tài)IP。因此在使用docker-compose或者docker run命令創(chuàng)建容器時,如果需要指定,則可以使用 :

  • –subnet創(chuàng)建網(wǎng)絡(luò)(用來指定ip段)
  • –gateway(用來指定網(wǎng)關(guān))
  • name為創(chuàng)建的名字
docker network create --subnet 172.18.0.0/16 --gateway 172.18.1.1 [name]

②不同容器相互連接

我現(xiàn)在有兩個容器他們的IP分別是172.17.0.2和172.18.0.2根本不在一個網(wǎng)段里面,此時我想要172.17.0.2的這個容器去ping172.18.0.2是根本不可能的

運行以下命令將c1容器連接到自定義的net網(wǎng)絡(luò)

docker network connect net c1

現(xiàn)在我們看一下我們c1有幾個網(wǎng)絡(luò)

現(xiàn)在就可以進行連接了?

以上就是Docker網(wǎng)絡(luò)配置的三種方式的詳細內(nèi)容,更多關(guān)于Docker網(wǎng)絡(luò)配置的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Docker Runc容器生命周期詳細介紹

    Docker Runc容器生命周期詳細介紹

    這篇文章主要介紹了Docker Runc容器生命周期詳細介紹的相關(guān)資料,文章分析runc的容器生命周期的抽象、內(nèi)部實現(xiàn)以及狀態(tài)轉(zhuǎn)換圖。理解了runc的容器狀態(tài)轉(zhuǎn)換再對比理解docker client提供的容器操作命令的語義會更容易些
    2016-12-12
  • windows安裝Docker與docker-compose套裝的詳細教程

    windows安裝Docker與docker-compose套裝的詳細教程

    這篇文章主要介紹了windows安裝Docker與docker-compose套裝的詳細教程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Docker如何多步構(gòu)建生成dubbo-admin鏡像詳解

    Docker如何多步構(gòu)建生成dubbo-admin鏡像詳解

    dubbo-admin是dubbo框架的管理平臺,下面這篇文章主要給大家介紹了關(guān)于Docker如何多步構(gòu)建生成dubbo-admin鏡像的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2018-04-04
  • 使用Docker部署Python Flask應用的完整教程

    使用Docker部署Python Flask應用的完整教程

    Docker是一種開源的容器化平臺,可以將應用程序及其依賴項打包成一個獨立的容器,實現(xiàn)快速部署和跨平臺運行,本文將詳細介紹如何使用Docker來部署Python Flask應用程序,幫助開發(fā)者更高效地構(gòu)建和部署應用,需要的朋友可以參考下
    2024-06-06
  • Docker  Registry 私有倉庫搭建詳細步驟

    Docker Registry 私有倉庫搭建詳細步驟

    這篇文章主要介紹了Docker Registry 私有倉庫搭建的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • 解決執(zhí)行docker daemon命令時出錯的問題

    解決執(zhí)行docker daemon命令時出錯的問題

    daemon 這是docker 操作中十分常用的命令指定項,最近在運行docker daemon命令卻發(fā)生了錯誤,后來通過測試各種方法終于解決了,現(xiàn)在將方法分享給大家,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-11-11
  • 使用Docker部署Nginx+Flask+Mongo的應用

    使用Docker部署Nginx+Flask+Mongo的應用

    這篇文章主要介紹了使用Docker部署Nginx+Flask+Mongo的應用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • 使用docker部署influxdb與 mongo的常用命令

    使用docker部署influxdb與 mongo的常用命令

    這篇文章主要介紹了使用docker部署influxdb與 mongo的常用命令,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • docker搭建lnmp環(huán)境的實現(xiàn)步驟

    docker搭建lnmp環(huán)境的實現(xiàn)步驟

    DNMP(Docker + Nginx + MySQL + PHP7/5 + Redis)是一款全功能的LNMP一鍵安裝程序,本文就來介紹一下docker搭建lnmp環(huán)境的實現(xiàn)步驟,具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • Docker Compose 網(wǎng)絡(luò)設(shè)置詳解

    Docker Compose 網(wǎng)絡(luò)設(shè)置詳解

    這篇文章主要介紹了Docker Compose 網(wǎng)絡(luò)設(shè)置詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10

最新評論

峨边| 吴堡县| 南川市| 安达市| 北海市| 洪江市| 新宾| 平安县| 喀喇沁旗| 宿州市| 淳安县| 麻城市| 平罗县| 巴马| 南华县| 兴山县| 宣城市| 石景山区| 峨山| 延川县| 冀州市| 望谟县| 新安县| 海林市| 安宁市| 五河县| 韩城市| 舒城县| 稻城县| 卢龙县| 铜山县| 云南省| 澳门| 定边县| 大石桥市| 惠水县| 台湾省| 江孜县| 高雄县| 关岭| 曲沃县|