docker network ls 默認創建以下網路模式
bridge--為每一個容器分配、設置IP等,並將容器連接到一個docker0的虛擬網橋,默認為該模式
使用--network bridge指定,默認使用docker0
---------------------------
host--容器將不會虛擬出仔己的網咖,配置自己的IP等,而是使用宿主機的IP和端口
使用--network host指定
--------------------------
none--容器有獨立的network namespace,但並沒有對其進行任何網路設置,如分配veth pair和網橋連接,IP等
使用--network none指定
----------------------------
container--新創見的容器不會創建自己的網髂和配置自己的IP,而是和一個指定的容器共享IP端口範圍等
使用--network container:NAME或是容器ID指定
-----------------------------
自建
--------------------------------------------------------------
列出網路
docker network ls
------------------------------------------------------------------
自建網路
docker network create 網路名稱
例如:docker network create aa_network aa_network 默認網橋模式(bridge)
--------------------------------------------------------------------
刪除網路
docker network rm 網路名稱
例如:docker network rm aa_network
----------------------------------------------------------------------
列出網路明細(數據源)
docker network inspect 網路名稱
例如:docker network inspect bridge
----------------------------------------------------------------------
容器IP變動時,可以通過服務名稱直接網路通信而不受到影響--也就是說要有服務名稱,當容器IP變更時,不受其影響,只要服務名稱不變即可
-------------------------------------------
例如
docker run -it --name u1 ubuntu bash
docker inspect u1 看網路,內定bridge
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "16b96c434cc7a5a0200e9fc57ce35bf8d7c863865d30d9edf4ff79e5dfc8c415",
"EndpointID": "d52c26e1c2b0113499dab785cec3eefa260b0f268174d9003ae88566328de4c1",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
因inspect太多資訊可以下docker inspect u1 | tail -n 20 --列出最後20行
---------------------------------------------------------
bridge模式
Host 網路-->en33
docker0網路-->vethxxxx@ifzz
container網路-->eth0@ifyy
-------------------------------------------------------
host模式
container網路-->Host網路 --與HOST共用網路
例如:
docker run -d -p 8083:8080 --network host --name tomcat83 billygoo/tomcat8-jdk8 --會警告
docker run -d --network host --name tomcat83 billygoo/tomcat8-jdk8 --正確
訪問container -->http://宿主機IP:8080
容器IP借用宿主機的IP
------------------------------------------
none模式(少用)
禁用網路功能,只有lo標誌(127.0.0.1) -->進入container中,打ip addr
------------------------------------------
container模式
使用--network container:NAME或者容器ID指定
錯誤範例
docker run -d -p 8081:8080 --name tomcat81 billygoo/tomcat8-jdk8
docker run -d -p 8082:8080 --network container:tomcat85 --name tomcat82 billygoo/tomcat8-jdk8
會出現問題,相當於tomcat82和tomcat81公用同一個ip同一個端口,導致端口沖突
正確範例
docker run -it --name alpine1 alpine /bin/sh
docker run -it --network container:alpine1 --name alpine2 alpine /bin/sh
假如此時關閉alpine1,再看看alpine2,網路剩lo
----------------------------------------------------
網路自定義
未使用網路名
docker run -d -p 8081:8080 --name tomcat81 billygoo/tomcat8-jdk8
docker run -d -p 8082:8080 --name tomcat82 billygoo/tomcat8-jdk8
上述成功啟動後用docker exec進入各自容器實例內部
按照IP地址ping是OK的,但按照服務名ping出現Name or service not know,且容器IP會因容器關閉後重啟後有所改變
使用網路名
自定義橋接網路,自定義網路默認使用的是橋接網路bridge
新建自定義網路
例如
docker network create abc_network
docker run -d -p 8081:8080 --network abc_network --name tomcat81 billygoo/tomcat8-jdk8
docker run -d -p 8082:8080 --network abc_network --name tomcat82 billygoo/tomcat8-jdk8
成功啟動後用docker exec進入各自容器實例內部
按照IP地址ping是OK的,但按照服務名ping也是OK
自定義網路本身就維護好了主機名和ip的對應關係(ip和域名都能通)
沒有留言:
張貼留言