docker network_mode: "host" 網(wǎng)絡(luò)配置方式
docker network_mode: "host" 網(wǎng)絡(luò)配置
[root@ECS02 ~]# cat /etc/hostname ECS02 [root@ECS02 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.18.150.42 ECS02 ECS02 [root@ECS02 ~]# cat /etc/sysconfig/network # Created by anaconda
docker network 模式
Docker network 有五種模式:
- host 模式
- container 模式
- none 模式
- bridge 模式
- 用戶 自定義
Host 模式
docker run -it --name myubuntu --net=host ubuntu /bin/bash
眾所周知,Docker使用了Linux的Namespaces技術(shù)來進行資源隔離,如PID Namespace
隔離進程,Mount Namespace
隔離文件系統(tǒng),Network Namespace
隔離網(wǎng)絡(luò)等。一個Network Namespace
提供了一份獨立的網(wǎng)絡(luò)環(huán)境,包括網(wǎng)卡、路由、Iptable規(guī)則等都與其他的Network Namespace隔離。
一個Docker容器一般會分配一個獨立的Network Namespace。但如果啟動容器的時候使用host模式,那么這個容器將不會獲得一個獨立的Network Namespace,而是和宿主機共用一個Network Namespace。容器將不會虛擬出自己的網(wǎng)卡,配置自己的IP等,而是使用宿主機的IP和端口。
例如,如果宿主機的Ip地址是192.168.1.100
,使用host模式新建一個容器,加入容器中運行的是Nginx應(yīng)用,綁定在容器的80端口上,外部主機可以直接通過192.168.1.100:80
訪問容器中的web應(yīng)用,而使用docker run
運行容器時不需要指定-p參數(shù).即在使用host模式時,容器中的應(yīng)用都直接綁定在宿主機的端口上,沒有NAT轉(zhuǎn)換.但容器的其他如文件系統(tǒng)等還是隔離的.
這種模式下,在容器中運行ifconfig
命令會顯示宿主機eth0的信息.
Container 模式
docker run -it --name myubuntu --net=container:NAME_OR_ID ubuntu /bin/bash
Container模式,顧名思義,就是在運行容器時通過--net
指定另一個已經(jīng)在運行的有單獨Network Namespace
的容器,然后與這個容器共享一個Network Namespace
.在這種情況下,新建的容器沒有自己的網(wǎng)卡,也不會給它分配IP,而是兩個容器共享IP和端口空間.
此時,在當(dāng)前容器中執(zhí)行ifconfig
命令會顯示container指定的容器的eth0信息.
none 模式
docker run -it --name myubuntu --net=none ubuntu /bin/bash
none模式下,Docker會為新創(chuàng)建的容器分配自己的Network Namespace
,但不會為這個容器的網(wǎng)絡(luò)進行任何配置,容器也沒有自己的IP網(wǎng)卡等信息,需我們?yōu)槠渑渲?
bridge 模式
這是Docker的默認(rèn)模式.
當(dāng)Docker服務(wù)啟動時,Docker會在宿主機上建立一個虛擬網(wǎng)橋docker0
,宿主機上啟動的容器會連接到這個虛擬網(wǎng)橋上.
Docker會在一個可用網(wǎng)段(一般是172.17.0.0/16這個網(wǎng)段)中為docker0
分配一個IP地址(一般是172.17.0.1),而每創(chuàng)建一個使用bridge網(wǎng)絡(luò)模式的新的容器,Docker就會在上面的網(wǎng)段中選擇一個尚未分配的IP地址分配給容器的eth0網(wǎng)卡.
實際的網(wǎng)絡(luò)配置過程是這樣的:
Docker在主機上創(chuàng)建一對veth pair
虛擬網(wǎng)卡設(shè)備,veth設(shè)備總是成對出現(xiàn),它的工作模式類似于管道,數(shù)據(jù)從一頭進去,從另一頭出來.Docker將這對虛擬網(wǎng)卡的一段連接到容器的eth0端口上,另一端與docker0
網(wǎng)橋相連.這樣,docker容器就能與宿主機通信了.
在給docker容器分配IP時,默認(rèn)將docker0的地址作為容器的網(wǎng)關(guān).
用戶自定義網(wǎng)絡(luò)
用戶可以通過Docker網(wǎng)絡(luò)驅(qū)動器或其他的網(wǎng)絡(luò)驅(qū)動器自定義網(wǎng)絡(luò)。你可以將許多容器連接到同一個網(wǎng)絡(luò)上,一旦連接到了自定義的網(wǎng)絡(luò)上,容器之間就可以通過對方的IP地址和主機名來進行通信了。
如果容器連接到了用戶自定義的網(wǎng)絡(luò)上,容器的/etc/hosts
文件會加入在同一個網(wǎng)絡(luò)中的其他所有容器的IP地址。
由于容器有可能隨時改變/etc/hosts
文件,容器中的程序可能會讀取到不完整的甚至空的/etc/hosts
文件。通常重新讀取可以解決這個問題。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Docker 基礎(chǔ)網(wǎng)絡(luò)配置詳解
這篇文章主要介紹了Docker 基礎(chǔ)網(wǎng)絡(luò)配置詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09Jenkins+docker發(fā)布Springbot服務(wù)的實現(xiàn)
本文主要介紹了Jenkins+docker發(fā)布Springbot服務(wù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03Docker 容器監(jiān)控原理及 cAdvisor的安裝與使用說明
這篇文章主要介紹了Docker 容器監(jiān)控原理及 cAdvisor的安裝與使用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11docker 安裝TDengine 時序數(shù)據(jù)庫的技術(shù)指南
TDengine是一個高性能、分布式a的時序數(shù)據(jù)庫,專為物聯(lián)網(wǎng)(loT)和大數(shù)據(jù)分析日設(shè)計,下面給大家分享docker 安裝TDengine 時序數(shù)據(jù)庫的技術(shù)指南,感興趣的朋友一起看看吧2025-04-04docker部署微信小程序自動構(gòu)建發(fā)布和更新的詳細步驟
通過 Jenkins 和 Docker 部署微信小程序,并實現(xiàn)自動構(gòu)建、發(fā)布和版本更新,主要涉及到幾個步驟,下面給大家分享docker部署微信小程序自動構(gòu)建發(fā)布和更新的詳細步驟,感興趣的朋友一起看看吧2024-12-12