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.5下docker安裝更換國內源的處理過程
清空 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
【Docker】Docker學習筆記(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
Win10下Docker學習(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