這節(jié)學(xué)下網(wǎng)絡(luò)的配置,上一節(jié)我們做了三個容器 其中一個nginx容器 兩個使用apache做的簡單模擬網(wǎng)站 通過容器和容器之間完成一個負載均衡 如果把nginx容器放在主機上 這個過程就很簡單了 因為主機和容器之間可以進行端口映射 主要在nginx里面做下配置 就可以完成 但是如果nginx容器本身也在一個容器里面 那樣就涉及到一個容器和容器之間的訪問
那容器之間到底如何訪問 以及容器的ip是什么呢 下面學(xué)習(xí)下這部分知識
上節(jié)學(xué)到了compose編排工具 在配置文件里可以非常方便的對容器啟動方式以及端口映射進行編排 只要通過一句命令就可以方便的啟動多個容器 上節(jié)把web1和web2容器寫在了配置文件里
這節(jié)首先把我們的nginx鏡像也寫入配置文件
接下來首先把之前創(chuàng)建的mynginx容器刪掉 否則 會報錯 容器名沖突
下面是用docker-compose編排啟動容器
可以看見啟動了三個容器 到了后面我們可以把里面復(fù)雜的業(yè)務(wù)全部寫在yml配置文件里面 傳給隊友一個文件即可 啟動并且生成相關(guān)鏡像啟動容器
下面看下三個容器里面內(nèi)容是否能訪問
下面看下容器之間如何通過ip方式(互相)訪問
首先看下文檔
docker容器啟動必定有個網(wǎng)絡(luò)存在 今天學(xué)下簡單并且經(jīng)典的模式 橋接模式
文檔中說明了如何創(chuàng)建虛擬網(wǎng)絡(luò)以及默認值是什么
可以看見默認值是我們創(chuàng)建的mycompose里面的yml配置文件啟動后自動創(chuàng)建的一個網(wǎng)絡(luò)叫做mycompose_default 是默認的網(wǎng)絡(luò)
如果我們創(chuàng)建并啟動一個容器 如果沒有設(shè)置并且沒有指定網(wǎng)絡(luò)名稱自動會加入bridge(橋接模式)
一般會采用bridge模式使主機和容器互通
下面看下mycompose_default里面有什么內(nèi)容
其中config里面的事子網(wǎng)和網(wǎng)關(guān)
containers表示加入的容器 當(dāng)容器啟動時候會有三個容器加入 因為配置文件里面就是這樣配置的 并且自動為我們分配了ip地址
以交互式方式進入nginx容器下
其中 cat /ect/hosts 這個下面專門記錄了我們的ip地址 可以發(fā)現(xiàn)與nginx的ip地址一模一樣
所以在這個(nginx)容器里面訪問另外的容器(web1或者web2)
首先我們ping 下ip
這樣容器之間可以通過ip方式進行互通 這里ip的分配依賴默認的橋接模式(創(chuàng)建一個虛擬的網(wǎng)絡(luò)地址)
上節(jié)課我們使用docker-compose 啟動容器 沒有做任何設(shè)置 可以看到會自動幫我們設(shè)置一個mycompose_default的名字 這個部分是可以自定義的 當(dāng)我們創(chuàng)建并且啟動時候會自己創(chuàng)建一個網(wǎng)絡(luò) 這個時候 下面看下通過單獨的命令怎么去啟動創(chuàng)建一個網(wǎng)絡(luò)并且自己設(shè)置子網(wǎng)產(chǎn)生一些ip
首先停掉我們啟動的三個容器
把這三個容器不加入默認的mycompose_default中 而是我們自己創(chuàng)建的網(wǎng)絡(luò)中
創(chuàng)建一個網(wǎng)絡(luò)(一般需要指定子網(wǎng))
下面看下子網(wǎng)
設(shè)置子網(wǎng)后可以自動幫我們計算有效ip(第一個及最后一個)
通過這個工具可以算出有效ip個數(shù)
我們在啟動容器時候可以自己指定ip(如果不指定 則默認分配里面的ip)
下面查看下我們創(chuàng)建的網(wǎng)絡(luò)mynginx
可以發(fā)現(xiàn)子網(wǎng)地址是我們指定的 containers里面什么都沒有 因為當(dāng)前沒有任何容器加入到該網(wǎng)絡(luò)里
我們可以使用命令的方式啟動容器 加入網(wǎng)絡(luò)配置參數(shù)
但是上節(jié)課我們學(xué)到了docker-compose方式啟動容器
所以使用docker-compose
需要對compose配置文件進行網(wǎng)絡(luò)設(shè)置 這里面可以自動創(chuàng)建的 不需要我們在外部手動創(chuàng)建 今天我們先演示下在外部創(chuàng)建好了 然后我們在配置文件去啟用并且映射它
下面修改下docker-compose.yml
其中我們的外部網(wǎng)絡(luò)mynginx一定要存在 networks下面的name名字mynginx-net和services里面的容器部分的networks名字相同
由于我們使用的是外部容器 所以不需要使用up命令重新創(chuàng)建容器刪除容器啟動容器 我們可以直接使用start來進行啟動
可以發(fā)現(xiàn)出現(xiàn)了三個容器 加入的不是默認的網(wǎng)絡(luò) 而是加入到了我們新建的自己的 ip變成192.128.0.4
然后我們再次進入容器內(nèi)部
外部可以訪問 容器之間可以互通 到這一步 我們可以自行來完成一個nginx的基本配置