成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

[afterCode] docker 速成班 5: 組合 container

neuSnail / 842人閱讀

摘要:到現(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)于繼承"!

那我們就試試如何組合使用 container.

在前一節(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ān)文章

  • [afterCode] docker 成班 6: docker-compose

    摘要:通過(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)題就是 不利于分享. 步驟麻...

    Integ 評(píng)論0 收藏0
  • [afterCode] docker 成班 7: 實(shí)戰(zhàn) 構(gòu)建基于graphtie/grafana監(jiā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 的...

    jhhfft 評(píng)論0 收藏0
  • [afterCode] docker 成班 3: 使用 container 中的功能

    摘要:通過(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)使用容器中的功能....

    Rainie 評(píng)論0 收藏0
  • [afterCode] docker 成班 2: container

    摘要:本來(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...

    stormjun 評(píng)論0 收藏0
  • [afterCode] docker 成班 4: 自建 Image

    摘要:通過(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...

    Charles 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<