docker的網絡模式:
1、橋接模式:創建docker時不需要指定網絡類型,默認模式。
2、host模式: 容器將不會虛擬出自己的網卡,也沒有自己的ip地址,全部使用宿主機的ip和端口。
3、container模式:容器和容器之間共用一個ip地址和端口。
4、nono模式:docker容器有自己的network-space,但是這個容器沒有任何網絡設置。這個容器沒有網卡,沒有ip,沒有路由,只有lo回環網絡。在none模式下,容器不可以聯網。
5、自定義網絡:我們可以給創建一個自己定義網段。
橋接模式(docker默認模式)
橋接模式:一種共享通信的方式,用于連接兩個不同網絡段的設備。
橋接設備工作在osi模型的第二層,數據鏈路層,轉發數據幀,根據mac地址。類似于交換機,只能轉發同一網段,通過泛洪廣播請求mac地址。
docker網絡就是基于橋接模式實現的:
1.虛擬網絡橋:安裝開啟docker之后, docker進程就會自動創建一個虛擬網絡橋(docker0),
是一個虛擬的網絡設備,類似于物理網絡設備的交換機。?
2、分配唯一的ip地址, 每次運行一個容器, docker進程都會分配唯一的且未被其他容器占用的ip地址給容器。這個IP地址是橋接模式網絡的子網中。
3、容器和主機通信:通過橋接模式,容器可以和主機直接通信,容器可以訪問主機上的運行服務。主機也可以通過橋接網絡docker:0,來訪問容器的進程(iptables的nat地址轉換,在主機上做了地址轉換)
docker的網橋是宿主機虛擬出來的,并不是一個真正存在的網絡設備,外部網絡無法找到。外部網絡無法直接訪問docker:0分配給容器的ip地址。
可以給容器做一個端口映射。容器創建完成后,端口不能做映射。
實際上,docker是在宿主機和容器之間做了一個iptables的Nat地址轉換。
隨機端口映射
docker run -itd --name 容器名 -P 鏡像:版本號 /bin/bash-P 在創建容器時。在宿主機和容器之間做一個端口映射。不加端口,隨機給。容器的端口是不變的。例
docker run -itd --name testl -P nginx:1.22.0 /bin/bash
指定端口映射
docker run -itd --name 容器名 -p linux端口:容器端口 鏡像:版本號 /bin/bash
-p:指定端口,人為設置固定的端口映射。指定端口進入容器開啟服務。
例
docker run -itd --name testl -p 4300:80 nginx:1.22.0 /bin/bash
host模式
容器將不會虛擬出自己的網卡,也沒有自己的ip地址,全部使用宿主機的ip和端口。
創建容器時可以指定網絡模式 --network host
docker run -itd --name 容器名 --network host 鏡像名:版本號 /bin/bash例
docker run -itd --name test1 --network host nginx /bin/bash
公用模式,如果是單個容器運行,可以使用host模式。
container模式:
容器和容器之間共用一個ip和端口
docker run -itd --name 容器名 -- network=container:容器名 鏡像名:版本號 /bin/bash例
docker run -itd --name test2 -- network=container:test1 nginx:latest /bin/bash
nono模式:
docker容器有自己的network-space,但是這個容器沒有任何網絡設置。這個容器沒有網卡,沒有ip,沒有路由,只有lo回環網絡。在none模式下,容器不可以聯網。用于容器功能測試。
docker run - itd --name 容器名 --network=none 鏡像名:版本號 /bin/bashdocker run - itd --name test4 --network=none nginx:laster /bin/bash
自定義網絡:
可以給docker創建一個自定義網段。虛擬機內可以訪問,win不可以
查看docker的網絡信息
docker network ls
-------------------------------------------------------------------------------------------NETWORK ID NAME DRIVER SCOPENETWORK ID這個是docker網絡唯一的網絡id
NAME docker網絡的名稱
DRIVER docker網絡的動程序
SCOPE 表示網絡的作用范圍-------------------------------------------------------------------------------------------
創建容器網絡
docker network create --subnet=網段 --opt "com.docker.network.bridge.name" ="自定義網卡名稱" 自定義網絡的名稱例:
docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name" ="docker1" mynetworkdocker network create創建一個docker虛擬網卡
--subnet=172.18.0.0/16:自定義一個網段和聲明子網掩碼
--opt "com.docker.network.bridge.name"="docker1":可以不加,但是網卡名稱比較難以識別。
mynetwork:自定義網絡的名稱
創建容器并指定IP地址
docker run -itd --name 容器名 --network bridge --ip ip地址 鏡像名:版本號 /bin/bash例
docker run -itd --name nginx1 --network bridge --ip 172.18.0.10 nginx:latest /bin/bash