docker network_mode: "host" 網絡配置方式
docker network_mode: "host" 網絡配置
[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技術來進行資源隔離,如PID Namespace隔離進程,Mount Namespace隔離文件系統(tǒng),Network Namespace隔離網絡等。一個Network Namespace提供了一份獨立的網絡環(huán)境,包括網卡、路由、Iptable規(guī)則等都與其他的Network Namespace隔離。
一個Docker容器一般會分配一個獨立的Network Namespace。但如果啟動容器的時候使用host模式,那么這個容器將不會獲得一個獨立的Network Namespace,而是和宿主機共用一個Network Namespace。容器將不會虛擬出自己的網卡,配置自己的IP等,而是使用宿主機的IP和端口。
例如,如果宿主機的Ip地址是192.168.1.100,使用host模式新建一個容器,加入容器中運行的是Nginx應用,綁定在容器的80端口上,外部主機可以直接通過192.168.1.100:80訪問容器中的web應用,而使用docker run運行容器時不需要指定-p參數.即在使用host模式時,容器中的應用都直接綁定在宿主機的端口上,沒有NAT轉換.但容器的其他如文件系統(tǒng)等還是隔離的.
這種模式下,在容器中運行ifconfig命令會顯示宿主機eth0的信息.
Container 模式
docker run -it --name myubuntu --net=container:NAME_OR_ID ubuntu /bin/bash
Container模式,顧名思義,就是在運行容器時通過--net指定另一個已經在運行的有單獨Network Namespace的容器,然后與這個容器共享一個Network Namespace.在這種情況下,新建的容器沒有自己的網卡,也不會給它分配IP,而是兩個容器共享IP和端口空間.
此時,在當前容器中執(zhí)行ifconfig命令會顯示container指定的容器的eth0信息.
none 模式
docker run -it --name myubuntu --net=none ubuntu /bin/bash
none模式下,Docker會為新創(chuàng)建的容器分配自己的Network Namespace,但不會為這個容器的網絡進行任何配置,容器也沒有自己的IP網卡等信息,需我們?yōu)槠渑渲?
bridge 模式
這是Docker的默認模式.
當Docker服務啟動時,Docker會在宿主機上建立一個虛擬網橋docker0,宿主機上啟動的容器會連接到這個虛擬網橋上.
Docker會在一個可用網段(一般是172.17.0.0/16這個網段)中為docker0分配一個IP地址(一般是172.17.0.1),而每創(chuàng)建一個使用bridge網絡模式的新的容器,Docker就會在上面的網段中選擇一個尚未分配的IP地址分配給容器的eth0網卡.
實際的網絡配置過程是這樣的:
Docker在主機上創(chuàng)建一對veth pair虛擬網卡設備,veth設備總是成對出現,它的工作模式類似于管道,數據從一頭進去,從另一頭出來.Docker將這對虛擬網卡的一段連接到容器的eth0端口上,另一端與docker0網橋相連.這樣,docker容器就能與宿主機通信了.
在給docker容器分配IP時,默認將docker0的地址作為容器的網關.
用戶自定義網絡
用戶可以通過Docker網絡驅動器或其他的網絡驅動器自定義網絡。你可以將許多容器連接到同一個網絡上,一旦連接到了自定義的網絡上,容器之間就可以通過對方的IP地址和主機名來進行通信了。
如果容器連接到了用戶自定義的網絡上,容器的/etc/hosts文件會加入在同一個網絡中的其他所有容器的IP地址。
由于容器有可能隨時改變/etc/hosts文件,容器中的程序可能會讀取到不完整的甚至空的/etc/hosts文件。通常重新讀取可以解決這個問題。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
docker部署OceanBase-ce cluster方式
這篇文章主要介紹了docker部署OceanBase-ce cluster方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03
docker-compose如何定義一個橋接網絡,并為該網絡配置一個IP地址池
在DockerCompose中定義橋接網絡并配置IP地址池,可以實現服務的自動IP地址分配,通過定義網絡、指定子網范圍、設置網關和啟用自動分配功能,可以輕松管理服務的網絡配置,確保IP地址在子網范圍內且不與其他網絡沖突,以避免網絡沖突2025-01-01
docker 部署 Elasticsearch kibana及ik分詞器詳解
這篇文章主要介紹了docker 部署 Elasticsearch kibana及ik分詞器詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-05-05

