1. 程式人生 > >理解docker部署springboot-容器網路使用(三)

理解docker部署springboot-容器網路使用(三)

這篇主要是學習了docker網路相關的知識,主要參考以下三篇文章:容器預設網路bridge使用 Docker 容器網Docker網路詳解及pipework原始碼解讀與實踐,最後一篇原理更清楚一些。要構建具有安全的一致行為的 Web 應用程式,可以使用 Docker 網路特性,網路為容器實現了完全隔離,所以,控制您的應用程式所在的網路很重要。

安裝 Docker 時,它會自動建立 3 個網路。可以使用 docker network ls命令列出這些網路。
$ docker network ls 
NETWORK ID          NAME                DRIVER 
7fca4eb8c647        bridge              bridge 
9f904ee27bf5        none                null 
cf03ee007fb4        host                host  
  • bridge 網路表示所有 Docker 安裝中都存在的 docker0 網路。除非使用 docker run --net=<NETWORK>選項另行指定,否則 Docker 守護程序預設情況下會將容器連線到此網路。在主機上使用 ifconfig命令,可以看到此網橋是主機的網路堆疊的一部分。
  • none 網路在一個特定於容器的網路堆疊上添加了一個容器。該容器缺少網路介面。
  • host 網路在主機網路堆疊上新增一個容器。您可以發現,容器中的網路配置與主機相同。
當Docker server啟動時,會在主機上建立一個名為docker0的虛擬網橋,此主機上啟動的Docker容器會連線到這個虛擬網橋上。虛擬網橋的工作方式和物理交換機類似,這樣主機上的所有容器就通過交換機連在了一個二層網路中。接下來就要為容器分配IP了,Docker會從RFC1918所定義的私有IP網段中,選擇一個和宿主機不同的IP地址和子網分配給docker0,連線到docker0的容器就從這個子網中選擇一個未佔用的IP使用。如一般Docker會使用172.17.0.0/16這個網段,並將172.17.42.1/16分配給docker0網橋(在主機上使用ifconfig命令是可以看到docker0的,可以認為它是網橋的管理介面,在宿主機上作為一塊虛擬網絡卡使用)。單機環境下的網路拓撲如下,主機地址為10.10.101.105/24。

在bridge模式下,連在同一網橋上的容器可以相互通訊,容器也可以與外部通訊,通過inspect命令檢視各個網路中的容器,下邊是檢視網路bridge中的容器
[
[email protected]
~]# docker network inspect bridge [ { "Name": "bridge", "Id": "ac1d92e5a5686ec83a9f5c1081214515729248af992dd063107dcbe37aaaac49", "Scope": "local", "Driver": "bridge", "IPAM": { "Driver": "default", "Config": [ { "Subnet": "172.17.42.1/16", "Gateway": "172.17.42.1" } ] }, "Containers": { "33225198ecc3be768993ba548394f94c062c7ab2b5acf47362b812b409a9d059": { "EndpointID": "2266dae6f2c5821b72914df9a2779cc48e0dde530321d1b54fd88d452e33ea04", "MacAddress": "02:42:ac:11:00:04", "IPv4Address": "172.17.0.4/16", "IPv6Address": "" }, "812b841b54229210f8c261ee6c976327caf1e6d823936557b8e68ccdac43bb34": { "EndpointID": "8c1f8fe852443f631d3737a0747605ee76bc2ef55562429026512ff5fa6bb21c", "MacAddress": "02:42:ac:11:00:05", "IPv4Address": "172.17.0.5/16", "IPv6Address": "" }, "c0a44b2116c88c6c0e708814d4cfcd323fb20867f71180fcfbf59a934e4a7add": { "EndpointID": "b269af7709921df6ad07863d5a9d638c73f3eb92b07e469cf454b2b3cadc5430", "MacAddress": "02:42:ac:11:00:03", "IPv4Address": "172.17.0.3/16", "IPv6Address": "" }, "d01019ff4818378f5d8cebd87ed606c3f02443fa05fdbc74e1cd04bbc2531cdd": { "EndpointID": "f74b74f2d66162fb5e7772e808b7e28035a22ded00571966fa4ecb9d85363c95", "MacAddress": "02:42:ac:11:00:01", "IPv4Address": "172.17.0.1/16", "IPv6Address": "" }, "eb7b3e268ff248d41b0d421852d1491c862279eacc971664bc28ddd3eac396c9": { "EndpointID": "779a2530227b7f3e30539fd6f807d0c4824ce8660a4b2e99cc5155e84ed5416d", "MacAddress": "02:42:ac:11:00:02", "IPv4Address": "172.17.0.2/16", "IPv6Address": "" } }, "Options": { "com.docker.network.bridge.default_bridge": "true", "com.docker.network.bridge.enable_icc": "true", "com.docker.network.bridge.enable_ip_masquerade": "true", "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", "com.docker.network.bridge.name": "docker0", "com.docker.network.driver.mtu": "1500" } } ]

在containers中看到的是5個,表示目前有5個容器加入到這個網路中
[[email protected] ~]# docker ps
CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS              PORTS                    NAMES
812b841b5422        daocloud.io/mysql           "docker-entrypoint.sh"   8 days ago          Up 8 days           0.0.0.0:3308->3306/tcp   mysql-slave
33225198ecc3        daocloud.io/mysql           "docker-entrypoint.sh"   8 days ago          Up 8 days           0.0.0.0:3307->3306/tcp   mysql-master
c0a44b2116c8        txxs/springbootdocker:1.0   "java -jar /app.jar"     2 weeks ago         Up 8 days           0.0.0.0:8083->8080/tcp   insane_noyce
eb7b3e268ff2        txxs/springbootdocker:1.0   "java -jar /app.jar"     2 weeks ago         Up 8 days           0.0.0.0:8082->8080/tcp   stoic_mayer
d01019ff4818        txxs/springbootdocker:1.0   "java -jar /app.jar"     2 weeks ago         Up 8 days           0.0.0.0:8081->8080/tcp   stoic_morse
可以通過container的ID,找到其在bridge中的對映的配置,比如d01019ff4818這個ID對應的網路配置就是:
            "d01019ff4818378f5d8cebd87ed606c3f02443fa05fdbc74e1cd04bbc2531cdd": {
                "EndpointID": "f74b74f2d66162fb5e7772e808b7e28035a22ded00571966fa4ecb9d85363c95",
                "MacAddress": "02:42:ac:11:00:01",
                "IPv4Address": "172.17.0.1/16",
                "IPv6Address": ""
            },
docker run啟動容器的時候會預設使用bridge這個網路,進入mysql-slave這個容器中可以檢視對應的對應的IP
docker exec -it mysql-slave /bin/bash
[email protected]:/# more /etc/hosts
172.17.0.5	812b841b5422
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
對應於bridge網路中的這個容器
            "812b841b54229210f8c261ee6c976327caf1e6d823936557b8e68ccdac43bb34": {
                "EndpointID": "8c1f8fe852443f631d3737a0747605ee76bc2ef55562429026512ff5fa6bb21c",
                "MacAddress": "02:42:ac:11:00:05",
                "IPv4Address": "172.17.0.5/16",
                "IPv6Address": ""
            },
進入到mysql-master這個容器後可以ping 172.17.0.5可以獲取相關的資料,原因就是在同一個bridge網路內,在同一個網路下的容器是可以相互ping通的
[[email protected] ~]# docker exec -it mysql-master /bin/bash
[email protected]:/# more /etc/hosts
172.17.0.4	33225198ecc3
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
[email protected]:/# ping 172.17.0.5
PING 172.17.0.5 (172.17.0.5): 56 data bytes
64 bytes from 172.17.0.5: icmp_seq=0 ttl=64 time=0.204 ms
64 bytes from 172.17.0.5: icmp_seq=1 ttl=64 time=0.070 ms
64 bytes from 172.17.0.5: icmp_seq=2 ttl=64 time=0.066 ms
瞭解完預設的bridge網路後,可以建立一個自己的網路,使用create命令,預設的驅動方式也是bridge,除此之外還可以建立overlay型別的網路。bridge網路適用於單臺宿主機執行的單Docker引擎環境,而overlay網路允許我們跨多臺宿主機進行通訊。使用預設的建立結果如下:
docker network create springboot-app-net
[[email protected] springboot-docker-test]# docker network inspect springboot-app-net
[
    {
        "Name": "springboot-app-net",
        "Id": "cf4ca23bcb27914148c822d6f675469a5e8bd87dbf6066890e6aba1593eec9f5",
        "Scope": "local",
        "Driver": "bridge",
        "IPAM": {
            "Driver": "default",
            "Config": [
                {}
            ]
        },
        "Containers": {},
        "Options": {}
    }
]
docker Version: 1.9.1的情況下使用docker run --net=<NETWORK>將新建立的容器加入到自定義的網路中,執行結果如下
docker run --net=springboot-app-net -d -p 8084:8080 -it --name syway txxs/springbootdocker:1.0
[[email protected] springboot-docker-test]# docker network inspect springboot-app-net
[
    {
        "Name": "springboot-app-net",
        "Id": "cf4ca23bcb27914148c822d6f675469a5e8bd87dbf6066890e6aba1593eec9f5",
        "Scope": "local",
        "Driver": "bridge",
        "IPAM": {
            "Driver": "default",
            "Config": [
                {}
            ]
        },
        "Containers": {
            "9313ea5d190e6675cfa36a0327e81f480e8d0d8e530e21037d2948b7772b8c6f": {
                "EndpointID": "d1054b8bb430e68a504df200f6d81efb3b7cd62e45534f272659cc40c1bb936c",
                "MacAddress": "02:42:ac:13:00:02",
                "IPv4Address": "172.19.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {}
    }
]
將在bridge網路中的stoic_mayer重新調整網路加入到springboot-app-net中,在原有的網路bridge中的對映關係沒有發生改變
docker network connect springboot-app-net stoic_mayer
[email protected] /]# docker network inspect springboot-app-net
[
    {
        "Name": "springboot-app-net",
        "Id": "cf4ca23bcb27914148c822d6f675469a5e8bd87dbf6066890e6aba1593eec9f5",
        "Scope": "local",
        "Driver": "bridge",
        "IPAM": {
            "Driver": "default",
            "Config": [
                {}
            ]
        },
        "Containers": {
            "9313ea5d190e6675cfa36a0327e81f480e8d0d8e530e21037d2948b7772b8c6f": {
                "EndpointID": "d1054b8bb430e68a504df200f6d81efb3b7cd62e45534f272659cc40c1bb936c",
                "MacAddress": "02:42:ac:13:00:02",
                "IPv4Address": "172.19.0.2/16",
                "IPv6Address": ""
            },
            "eb7b3e268ff248d41b0d421852d1491c862279eacc971664bc28ddd3eac396c9": {
                "EndpointID": "6a6d9bb12e66a9994e4ffd79f50d1a3fbfdf44ff8a355d7fb2eac28a074fc38d",
                "MacAddress": "02:42:ac:13:00:03",
                "IPv4Address": "172.19.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {}
    }
]
容器僅能在網路內通訊,不能跨網路進行通訊。一個連線到兩個網路的容器可與每個網路中的成員容器進行通訊。當一個容器連線到多個網路時,外部連線通過第一個(按詞典順序)非內部網路提供。還可以使用--link命令將兩個容器連線起來,通過--link選項建立的容器可以對連結的容器名(container-name)作為hostname進行直接訪問

當解除網路關係的時候使用命令:

docker network disconnet springboot-app-net stoic_mayer

刪除網路:

docker network rm springboot-app-net
docker網路這部分不懂的還有很多,需要花時間繼續學習,如果有不正確的請多指正!

相關推薦

理解docker部署springboot-容器網路使用

這篇主要是學習了docker網路相關的知識,主要參考以下三篇文章:容器預設網路bridge,使用 Docker 容器網,Docker網路詳解及pipework原始碼解讀與實踐,最後一篇原理更清楚一些。要構建具有安全的一致行為的 Web 應用程式,可以使用 Docker

理解docker部署springboot-容器日誌處理

將jdk和需要的執行的jar構建成映象之後,執行成容器之後,可以實時的輸出日誌,但是當容器掛掉之後,日誌也便消失不見。在容器中可以執行bash命令的前提下,容器執行的時候會根據jar中配置的日誌目錄生成相應的日誌檔案,當容器停止的時候在容器中的所有的東西也會消失不見,查詢

理解docker部署springboot-容器記憶體優化的反思

寫這篇部落格的目的可能反思多一些,前些日子一直想做docker記憶體的優化,沒有做成,一直困在這地方。經過大致這樣,我把jar和jdk做成一個映象之後,一個映象佔用記憶體大概181.8M,我虛機是2G的記憶體,除了其他程式佔用的之外,我就只能啟動5個映象,然後記憶體就沒了,

Docker 部署NetCore 接口

rem asp core 工作 code ram rom ros service 前面兩篇文章介紹了Docker一些基本概念和環境搭建,下面我們來學習一下如何將開發好的Net Core 接口項目在Docker中跑起來。 本文不關註安全方面的信息,所以,在操作之前,先關閉防火

docker+pipework配置容器網路

第二部分: 使用pipework為容器配置宿主機物理網路的地址1. 安裝pipeworkyum install git -ycd pipeworkcp pipework /usr/bin/2.pipework介紹pipework是一個軟體定義網路的工具,用來在任何複雜的場景

理解docker部署springboot-構建和執行

通過這個文章的總結希望弄明白docker至少在執行層面的原理,以及docker結合springboot在生產環境的應用。 首先要在虛機上安裝docker,docker對虛機的版本有要求,因此在安裝的時候需要注意,關於對docker概念性的知識的理解,可以參考以下這兩篇文章,

理解docker部署springboot-為什麼要用docker

為什麼要用docker,在最開始接觸docker的時候,我們應該都能看到下邊的這段話,下邊的摘自這裡,這可能就是當時擁抱docker的原因,寫這個的目的主要是回過頭來結合我對docker的實踐說一下對下邊這些的理解,當然我的理解和大神比起來肯定是小巫見大巫,但是有觀點還是要表達出來的,有問題繼續更新,我堅信學

神經網路 反向傳播直觀理解

oid 得到 文本分類 默認 img 自己 src 模型 com 這是典型的三層神經網絡的基本構成,Layer L1是輸入層,Layer L2是隱含層,Layer L3是隱含層,我們現在手裏有一堆數據{x1,x2,x3,...,xn},輸出也是一堆數據{y1,y2,y3,.

Docker入門與應用系列容器管理

輸出 clear tag 程序 ipaddr one 停止 1.2 標準 一、啟動容器   啟動容器有兩種方式,一種是基於鏡像新建一個容器並啟動,另一個是將終止狀態的容器重新啟動。 1.1 新建並啟動 主要命令為 docker run 下面的命令輸出一個&rd

SpringBoot入門筆記SpringBoot專案打war包部署至伺服器

相對於傳統的Spring專案而言,SpringBoot官方推薦使用打jar包的形式,所以若是需要打war包需經過一些處理 1.修改pom.xml 首先要去除springboot內嵌的Tomcat服務,開發測試時記得註釋掉 原生Tomcat依賴移除 <dependency>

自動化docker部署私有IPFS網路用於本地debug

在上一篇中,總結了部署私有IPFS網路的具體步驟。後來覺得可以把整個流程做成自動化的部署工具,以後用起來會比較方便。 閒言少敘,直接上程式碼。要用的話直接copy到一個start.sh檔案,然後執行就可以了。引數只有一個peerNumber,用於指定IPFS網路的容量。比如:./star

基於Docker技術的容器PaaS平臺基礎理解轉載

  作者:胡偉煌;原文:http://blog.csdn.net/huwh_/article/details/75935700   目前很多的容器雲平臺通過Docker及Kubernetes等技術提供應用執行平臺,從而實現運維自動化,快速部署應用、彈性伸縮和動

Docker容器虛擬化:映象原理與生成新映象

一、映象原理         映象是一種輕量級、可執行的獨立軟體包,用來打包軟體執行環境和基於執行環境開發的軟體,他包含執行某個軟體所需的所有內容,包括程式碼、執行時、庫、環境變數和配置檔案。 UnionFS(聯合檔案系統):Union檔案系統(UnionFS)是一種

docker 部署springboot容器日誌處理

將jdk和需要的執行的jar構建成映象之後,執行成容器之後,可以實時的輸出日誌,但是當容器掛掉之後,日誌也便消失不見。在容器

Springboot學習筆記-常用註入組件方式

TP 情況 生效 data lec 同時 pri select registry 本文把註入的類型分為普通類和配置文件類兩種 普通類 包掃描@ComponentScan+組件標註註解(@Controller、@Service、@Repository、@Component)

springboot+cloud 學習消息中間件 RibbitMQ

inf mon set window下 info 五類 http users 中間件 安裝RabbitMQ window下安裝: (1):下載erlang,原因在於RabbitMQ服務端代碼是使用並發式語言erlang編寫的,下載地址:http://www.erlang.

機器學習之貝葉斯網路

引言   貝葉斯網路是機器學習中非常經典的演算法之一,它能夠根據已知的條件來估算出不確定的知識,應用範圍非常的廣泛。貝葉斯網路以貝葉斯公式為理論接觸構建成了一個有向無環圖,我們可以通過貝葉斯網路構建的圖清晰的根據已有資訊預測未來資訊。貝葉斯網路適用於表達和分析不確定性和概率性的事件,應用於有條件地依賴多種控

ballerina 學習二十六 專案docker 部署&& 執行

ballerina 從釋出,到現在官方文件的更新也是很給力的,同時也有好多改進,越來越好用了 可以參考官方文件 https://ballerina.io/learn/by-guide/restful-service/ 專案初始化 專案結構 └── guide └──

Hadoop建設工具Ambari的安裝部署及完整使用——部署安裝

三.部署安裝 1.安裝Ambari-server 線上安裝 1) 在hortonworks公共資源庫,選擇ambari倉庫地址並下載 wget http://s3.amazonaws.com/public-repo-1.hortonworks.com/ambari/centos

搭建簡單圖片分類的卷積神經網路-- 模型的測試和運用

兩個功能都在同一個檔案中 一、新建Disimage.py檔案 import tensorflow as tf from PIL import Image import os import numpy as np import matplotlib.pyplot as plt from Get