摘要:到現在為止我們會從拉取自己需要的文件并執行起來還會基于已有的來制作自己特殊需要的但是如果我們完成一個功能需要多個組合起來使用該怎么辦呢雖然可以通過來制作一個這樣的但是如果所有的功能都做在一個中如果有一個模塊需呀改變的話就需要重新構建整個作為
到現在為止,我們會從 docker hub 拉取自己需要的 image 文件并執行起來. 還會基于已有的 image 來制作自己特殊需要的 image . 但是如果我們完成一個功能需要多個 image 組合起來使用該怎么辦呢?
雖然可以通過 Dockerfile 來制作一個這樣的 image , 但是如果所有的功能都做在一個 image 中, 如果有一個模塊需呀改變的話就需要重新構建整個 image.
作為一個程序員你知道,如果把所有的功能做到一個 image 里面相當于不斷的"繼承" 不同 image 的功能, 顯然這個而不是一個好方法. 而且有前人告訴我們 "組合優于繼承"!
在前一節,我們做好了一個 hello world 的 http 服務器工作在3000端口上. 現在我想用 nginx
作為反向代理到8080端口上訪問這個服務.
如何將兩個 container 組合起來呢? 通過網絡. docker 安裝之后應創建一些 network
$docker network ls NETWORK ID NAME DRIVER SCOPE a3ccacd179e5 bridge bridge local 10768aaf02ae host host local c2df063c31ab none null local
其中最常用的就是這個叫 bridge 的網絡. 通過命令 docker network inspect bridge 來查看 network 的具體情況. 可以發現默認方式啟動的 continer 都是在這個 bridge 的網絡下. 而這些container 之間是相同的. 只是相互之間訪問必須才用 ip 的方式來訪問, 而且每次 container 啟動的時候 ip 地址會是變化的. 所以要在 bridge network 下相互訪問網路服務非常的麻煩.
$docker network inspect bridge [ { "Name": "bridge", # 忽略.... "Containers": { "91c3adde0212956c4cc2800dc9795165b1aea2a59547f74b441ec27e2427ac5a": { "Name": "graphite", "EndpointID": "f1e4c35371035e7149d80b9bb567282e686ae99cb118bc81bb6e7996efbe1993", "MacAddress": "02:42:ac:11:00:02", "IPv4Address": "172.17.0.2/16", "IPv6Address": "" }, "d7ae7809b8530b4ee473991bd65cb6446c382c462e7d4702b7b81b8ec58b4362": { "Name": "grafana", "EndpointID": "9341a8a43bff28fb9077ba1a3d2b6609fd6a91214109e075658acbd9ba7ef840", "MacAddress": "02:42:ac:11:00:03", "IPv4Address": "172.17.0.3/16", "IPv6Address": "" } }, # 忽略... } ]
好在 docker 在用戶自己創建的網絡中提供了從 container 名字到對應 ip 的解析. 換句話說, 可以直接通過 container 的名字來訪問需要的服務.
完成剛才的例子首先我們為我們的 nginx 和 helloworld 網絡服務器創建一個叫 "supernet" 的網絡.
$docker network create supernet
然后通過--network 和 --name 啟動一個加入到 supernet 網絡的 hello world 網路服務.
$ docker run --network supernet --name hello --rm pshu/helloworld:1.0.0
接著創建一個 default.conf 文件作為 nginx 服務器的反向代理配置文件, 將所有http 請求代理到 hello 容器的3000端口上.
server { listen 8080; server_name localhost; location / { proxy_pass http://hello:3000; } }
同樣采用 --network 將運行 nginx 的容器也加入到 supernet 的網絡中去;同時映射對應的配置文件和端口.
$docker run -it --rm --network supernet -v $PWD/conf.d:/etc/nginx/conf.d -p 8080:8080 nginx
最后我就能通過 http://127.0.0.0:8080 訪問到來自 hello container 中的 http 服務了.
完希望大家喜歡.
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27080.html
摘要:通過的我們可以將多個有機的組合起來構建出自己需要的服務但是這里有幾個小問題就是不利于分享步驟麻煩需要自己創建指定使用那如何解決上面的兩個問題呢第節例子中的服務可以通過創建一個這樣的文件來解決通過下面的命令就能將所有需要的啟動起來 通過docker 的 network我們可以將多個 container 有機的組合起來構建出自己需要的服務. 但是這里有幾個小問題就是 不利于分享. 步驟麻...
摘要:由于公司沒有運維又需要監控服務器的一些數據信息想盡快的啟動一個數值監控系統技術評估了下打算的方式來建設是一個時間數列數據庫并且自帶一些簡單圖形展示功能雖然展示方面不是很完美但是在收集時間數據上非常的方便和簡單根據官網的例子只需要一個連接就能 由于公司沒有運維, 又需要監控服務器的一些數據信息, 想盡快的啟動一個數值監控系統. 技術評估了下打算 graphite + grafana 的...
摘要:通過將執行起來了不是為了看看容器的狀態而是想使用中的功能介紹兩種方式來使用容器中的功能通過端口訪問中的服務通過端口的方式來使用提供的服務是最簡單的了只要通過或者選項來向宿主機暴露服務端口就可以了比如我們可以這樣在后臺啟動一個服務并將中 通過docker 將 container 執行起來了,不是為了看看容器的狀態,而是想使用 container 中的功能.介紹兩種方式來使用容器中的功能....
摘要:本來想在一篇里面就寫完所有的內容的但是考慮考慮到文章太長會和風格相背離所以就按連載的形式來容器是物質基礎有了這個才能讓能運行起來運行起來的稱之為容器它使用中的一等公民直接啟動使用啟動一個容器如果你沒有下載過的話會自動下載一個的指定方法和刪除 本來想在一篇 blog 里面就寫完所有的內容的,但是考慮考慮到文章太長會和 egghead 風格相背離,所以就按連載的形式來. 容器 contai...
摘要:通過能獲得很多別人定制好的但是如果自己想制作一個自己容器該怎么弄呢用就像一個腳本文件告訴如何創建一個新的下面舉例來用來制作一個服務器的指令剛才提到了社區已經有很多很好用的那我們要構建自己的的話就可以在這些的基礎上來做我們要做一個基于的服務器 通過 docker hub 能獲得很多別人定制好的image, 但是如果自己想制作一個自己容器該怎么弄呢? 用 Dockerfile Docker...
閱讀 1847·2021-11-25 09:43
閱讀 3688·2021-11-24 10:32
閱讀 1076·2021-10-13 09:39
閱讀 2328·2021-09-10 11:24
閱讀 3344·2021-07-25 21:37
閱讀 3464·2019-08-30 15:56
閱讀 858·2019-08-30 15:44
閱讀 1449·2019-08-30 13:18