1. 程式人生 > >docker學習8--同主機下容器通訊

docker學習8--同主機下容器通訊

     本系列docker學習都是在centos7下學習的。


1.容器放主機/主機訪問容器

     啟動一個已經配置好JDK、tomcat的映象,命名為tomcat01。

     

   使用route -n檢視主機的路由,ifconfig檢視主機的ip。

   

    docker0網絡卡是docker安裝啟動的時候就在主機上生成,所有的容器都會經docker0網絡卡發出資料。容器的centos是個簡單版,許多命令沒有安裝,所以使用docker inspect檢視執行中的容器ip(容器啟動時,才隨機生成一個ip)。


   通過檢視,知道主機ip 192.168.174.129,容器tomcat01的ip是172.17.0.2,那麼接下來測試下主機ping容器ip,容器ping主機ip是否通。



2.外網訪問容器(-p 主機埠:容器埠)

   可見預設情況下,主機和容器是可以相互通訊的。如果容器tomcat01內啟動tomcat,毫無疑問,在主機上也是可以訪問web tomcat的,但是容器一旦停止,然後重新啟動,那容器的ip是可能會發生變化的,那這對於開發員來說是不能接受的,所以可以使用-p來繫結主機和容器的對映埠,比如-p 主機埠80:容器埠8080,這樣外網訪問時,就可以主機ip:80,這樣實際訪問的就是容器內的8080,這樣外網訪問時,就不必關心容器的ip是埠是什麼了。

    停止容器tomcat01並刪除,然後docker -i -t --name tomcat01 -p 80:8080 web/tomcat /bin/bash啟動,然後啟動容器內的tomcat(埠8080)


   然後主機curl http://127.0.0.1:80


3.容器和容器的通訊

    上面都是容器和主機的相互通訊,那容器和容器之間的通訊呢?

    先試試,容器A能否直接平通容器B。

    經測試也是OK的,因為容器A和容器B,其實都是預設橋接到docker0網絡卡。


     雖然通主機上的容器也是可以相互通訊的,但是也存在上面所說的問題,容器是啟動的時候才分配ip的,它是多變的。加入容器dbdata是用來共享資料的,容器A要和dbdata通訊,一旦容器dbdata重啟ip發生了變化,那容器A也要修改嗎?那肯定是無法接受的。docker提供了--link 容器名:別名,執行容器啟動的時候通過--link來指定要和哪個容器通訊。Docker 會在  iptable
中為 兩個容器分別新增一條  ACCEPT  規則,允許相互訪問開放的埠(取決於 Dockerfile 中的 EXPOSE
行)。

   建立dbdata容器,並啟動裡面的tomcat(預設埠8080)。


   建立一個容器container_A,並且--link到dbdata:db,然後通過curl http://db:8080測試,看是否能訪問到dbdata。


   經測試是OK的,我們再來看看容器container_A的hosts檔案


  發現container_A的/etc/hosts檔案中寫明瞭如果是db/dbdata/容器id都會解析到172.17.0.2上。那就有點疑問了,container_A的hosts檔案寫死了dbdata的ip,那如果dbdata的ip發生了變化呢?難道container_A也要重啟嗎?那把dbdata停止,然後重啟(重啟前,先建立另一個容器B,作用是佔用dbdata的ip,這樣重啟dbdata時,dbdata的ip應該就是新的)。


    接下來我們再看看容器container_B的/etc/hosts檔案,有沒有自動更新。


   發現容器container_B對容器dbdata的ip也自動更新了。這樣就解決了dbdata的ip變化時帶來的通訊麻煩。

容器的連線(linking)系統是除了埠對映外,另一種跟容器中應用互動的方式。
該系統會在源和接收容器之間建立一個隧道,接收容器可以看到源容器指定的資訊。

相關推薦

docker學習8--主機容器通訊

     本系列docker學習都是在centos7下學習的。 1.容器放主機/主機訪問容器      啟動一個已經配置好JDK、tomcat的映象,命名為tomcat01。          使用

Docker-5:主機自定義網段通訊

一、建立自定義網路 docker network create --subnet=172.172.0.0/24 docker-br0 二、啟動zookeeper並繫結到自定義網路的網段(0.81) docker run -d --name zk --ip 172.172

Docker學習筆記——運行nginx容器

nginx docker dockerfile 1、通過Docker hub或者私有倉庫pull nginx鏡像拉取鏡像docker pull nginx或者docker pull registry.abc.com:5000/nginx:zx創建nginx容器運行項目目錄mkdir -p /opt

docker學習------記錄centos7.5docker安裝更換國內源的處理過程

清空 mirror 邏輯 TP img 其他 準備 過程 直接 一、centos7.5下更換阿裏源 1.裝好centos7.5鏡像,將yum源更換為阿裏源   第一步:剛出的centos7.5是解析不到阿裏的東西的,所以找了臺centos7.4,下載一些包     (1

Docker學習筆記-(5)容器數據管理,鏈接容器,構建私有庫

控制 st2 容器數據 pan 備份文件 data- 否則 所有 連接 五、容器數據管理,鏈接容器,構建私有庫 ① 容器數據管理 docker管理數據的方式有兩種: 數據卷 數據卷容器 1. 數據卷 數據卷是一個或多個容器專門指定繞過Union File System的

Docker學習(8)-執行建立的映象

我們已經建立了自己的映象Jpress,本節來學習如何執行建立映象   上一節:Docker學習(7)-建立映象 執行流程 1: 訪問jpress映象主頁 QuickStart終端輸入docker im

DockerDocker學習筆記(1)-Windows的配置與安裝

第一次接觸Docker是15年夏天,那時候在七牛學習Go語言,周圍的大牛們突然提到Docker容器這個東西,而且非常火爆~直到一年多後才想起來要學習一下Docker到底是個什麼東西(我真是怠惰啊),廢話不多說,開始正文。 配置Hyper-V環境並安裝Doc

docker學習7--宿主機和容器時間不一致問題

    啟動一個以centos為基礎的映象,進入容器內date '+%Y-%m-%d %H:%M:%S'檢視時間,發現容器時間和宿主機不一致。     一臺宿主機可以有多個docker容器,宿主機的

Docker學習(九)Volumn容器間共享資料

Docker學習(九)Volumn容器間共享資料 volume是什麼 volume在英文中是容量的意思, 在docker中是資料卷的意思,是用來儲存資料的容器 為什麼要進行資料共享 在叢集中有多臺tomcat,對於叢集中的tomcat部署的程式碼是同一份程式碼的副本,如果頁面檔案發生變化,意味著每個

Docker學習筆記:映象、容器、資料卷

## 核心概念 - 映象:一個只讀的模板,類似虛擬機器的映象。 - 容器:可以理解為映象的一個執行例項。執行時類似於沙箱,多個容器互相獨立。 - 倉庫:存放映象檔案的地方。 ## 映象 ### 命令表格 命令|解釋|選項 -|-|- docker pull NAME[:TAG\|@DIGEST]|拉取映象

DOCKER容器與宿主機網段互相通訊

相關閱讀: 博主最近在解決docker與宿主機同網段通訊的問題,寫此文章記錄一下整個過程。 遇到的問題 博主用兩臺docker容器做datanode,當時配置Docker網路時,使用了Bridge模式,docker0網段(172.

Docker學習(1):在Ubuntu安裝Docker和關於容器的常用命令

一、Docker的安裝條件   1.執行64位CPU架構的計算機,Docker目前不支援32位CPU;   2.建議採用Linux3.8或更高版本的核心;   3.核心必須支援一種適合的儲存驅動  

Docker學習三兩事(二)容器主機共享檔案(掛載目錄)

前言及準備 在開始學習docker一段時間後,對於docker的部分命令也算是都試了一遍,在平時使用虛擬機器是就會有檔案與本地主機共享,現在雲伺服器上一堆檔案指令碼,想在容器裡測試,於是就想著掛載個文到容器,其實就是本地主機與容器之間共享檔案。 操作實錄

Docker學習筆記 — Weave實現跨主機容器互聯

Docker的原生網路支援非常有限,且沒有跨主機的叢集網路方案。目前實現Docker網路的開源方案有Weave、Kubernetes、Flannel、Pipework以及SocketPlane等,其中Weave被評價為目前最靠譜的,那麼這裡就對Weave的基本原

Docker學習(八)容器間單向通訊

Docker學習(八)容器間單向通訊 前言 在之前的文章中介紹的內容都是容器映象和容器執行,沒有涉及到多個容器之前通訊,如果是多個容器之間需要互相呼叫,如何通訊呢? docker維護著每個容器的元資訊,可以通過IP通訊,但是在docker環境中每個容器重啟之後,容器的虛擬IP都會變動,這樣的情況下我們該如

DOCKER 學習筆記9 Kubernetes (K8s) 彈性伸縮容器

前言 從上一篇看來,我們已經對於Kubernetes ,通過minikube 建立叢集,而後使用kubectl 進行互動,對Deployment 部署以及服務的暴露等。這節,將學習彈性的將服務部署到多個節點上。 檢查 檢查部署情況 kubectl get deployments $ kubectl get d

Win10Docker學習(1)安裝

ner table 組成 高效率 down 提高 打開 cpu 其他人 Docker簡介 Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發布到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,

Docker學習系列(一):windows安裝docker

阻止 statistic pro nta 雙擊 copyright ner notebook 現在 本文目錄如下: windows按照docker的基本要求 具體安裝步驟 開始使用 安裝遠程連接工具連接docker 安裝中遇到的問題 Docker的更新 Dock

[docker]使用quaaga實現(rip ospf)實現主機容器互通

png ner direct ipv6 mon eth0 area stdout get 使用quaaga實現(rip ospf)實現主機間容器互通 - n1設置 brctl addbr br0 ip a a 10.1.1.1/24 br0 ip a a 10.1.1.1

Docker學習Docker容器基本使用

rest 刪除 圖片 -c 容器 run bcd user git Docker學習之Docker容器基本使用 新建容器並啟動 命令格式:docker run --options repository:tag 後臺運行 命令格式:-d 已存在的容器相關操作 啟動:docke