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