原文出自:http://blog.csdn.net/anxpp/article/details/52495295
我們使用Docker發布的組件,通常都離不開網路的,下面介紹Docker的網路基礎配置。 1、連接埠映射 從外部存取容器應用
啟動容器時,如果不知道對應參數,在容器外部是無法通過網路訪問容器內部的。
可以通過-p或-P參數指定連接埠映射。
使用-P時,Docker會隨機映射一個49000~49900的連接埠到容器內部開放的連接埠。
-p會映射到指定的連接埠,支援的格式:
ip地址:主機連接埠:容器連接埠 ip地址::容器連接埠 主機連接埠:容器連接埠
映射所有介面地址
主機連接埠:容器連接埠 格式將本地連接埠映射到容器連接埠的命令如下:
docker run -d -p 3306:3306 mysql
此時預設會幫頂本地所有介面上的地址,可以多次使用-p幫頂多個連接埠。
映射到指定地址的指定連接埠
ip地址:主機連接埠:容器連接埠 格式的參數幾乎與上面的差不多,不過多限制了地址,比如需要指定特定的地址的訪問(如127.0.0.1):
docker run -d -p 127.0.0.1:3306:3306 mysql
映射到指定地址的任意連接埠
ip地址::容器連接埠 格式的參數,可以綁定localhost的任意連接埠到容器的指定連接埠上,本地主機會自動分配一個連接埠:
doccker run -d -p 127.0.0.1::3306 mysql
也可以使用udp來標記udp連接埠:
doccker run -d -p 127.0.0.1:3386:3386/udp 某個鏡像
查看連接埠映射配置
使用docker port命令查看連接埠映射配置:
docker port 容器ID 3306
容器有自己的內部往來和IP地址:
docker inspect 容器ID
然後會輸出一大堆資訊。
2、容器互聯 容器的串連系統是除了連接埠映射外另一種可以與容器中應用進行互動的方式。
它會在源和接收容器之間建立一個隧道,接收容器可以看到源容器指定的資訊。
自訂容器名 串連系統根據容器的名稱執行,所以需要自訂一個較為簡單容易區分的容器名。
自訂命名使用--name參數,這個在之前的文章中已經遇到過了:
docker run -d -p --name db mysql
容器的命名必須是唯一的。
執行docker run時,如果加上--rm參數,容器在終止後悔立即被刪除,但是不能與-d參數一同使用。
容器互聯 使用--link參數可以讓容器間建立安全的串連進行互動。
下面是一個樣本:
首先建立一個資料庫的容器:
docker run -d --name db training/postgres
然後建立web容器:
docker run -d -P --name web --link db:db training/webapp python app.py
此時db容器和web容器加你互聯關係。
--link參數:--link name:alias,name是要串連的容器的名字,alias是這個串連的別名。
可以使用docker ps查看容器資訊,其中names列就能看出互聯的狀態。
docker在兩個互聯的容器之間建立了一個安全隧道,不需要吧他們的連接埠映射到宿主主機上,也可以避免連接埠的暴露。
Docker通過兩種方式公開串連資訊:
環境變數 更新/etc/hosts檔案
使用env命令查看剛剛的web容器的環境變數:
docker run --rm --name web2 --link db:db training/webapp env
...
其中DB_開頭的環境變數是供web容器串連db容器使用,首碼採用大寫的串連別名。
除了環境變數,Docker還添加host資訊到父容器的/etc/hosts檔案。其中web容器會以自己的ID作為預設主控件名,db容器以db作為主機名稱。
比如多個web到db容器的情況,可以連結多個子容器到父容器上。
小結 Docker通過連接埠映射和容器互聯,優雅的提供了網路設定功能。