使用Compose變數定製Docker網路
使用[Docker 多節點網路]來創建虛擬網路,把容器接入虛擬網路,能實現應用中所需要的網路拓撲。具體來說,Bridge網路能用來創建單節點網路,Overlay網路能創建多節點網路。通過這樣給應用定製專用網路,能為容器提供絕對的隔離性。
Docker Compose的目標是實現單節點網路,通過用<code>--x-networking</code> 來創建一個應用程序獨有的橋接網路,如果應用程序需要多節點部署,可以使用Docker Swarm集群來創建一個overlay網路。
那如果一個橋接網路或overlay網路已經存在,而你想要把這個網路分配給運行中的容器呢?
Docker 1.9 引入了變數替換的特性,我們可以利用這特性實現把容器關聯到一個預創建的網路上。
創建Docker橋接網路
1. 創建網路:
sh
docker network create -d bridge mynet 47d6225ffe56ddd1a8bc0d6abb0ffd8f8ac3eec2090ff243f8cd6f77c170751b=2. 列出網路:
sh
docker network ls NETWORK ID NAME DRIVER feb6e9567439 bridge bridge29563a59abe8 none null
25ab737cd665 host host 47d6225ffe56 mynet bridgeDocker會為每個節點自動創建三個網路:
| 網路名稱 | 作用 || :-------- | :-- || bridge | 容器默認連接的網路,是所有Docker安裝時都默認安裝的docker0網路 || none | 容器定製的網路棧 || host | 在宿主網路棧上添加一個容器,容器中的網路配置會與宿主的一樣|上邊看到,我剛創建的mynet網路也在列表中。
使用<code>docker inspect</code>命令查看mynet網路的詳細信息:
json
[ { "Name": "mynet", "Id": "47d6225ffe56ddd1a8bc0d6abb0ffd8f8ac3eec2090ff243f8cd6f77c170751b", "Scope": "local", "Driver": "bridge", "IPAM": { "Driver": "default","Config": [
{} ] }, "Containers": {}, "Options": {} } ]從Containers這節可以看到,目前還沒有容器關聯上去。
Docker Compose 與 網路
1. 上面新建的網路能在新的容器中使用,只要在運行時使用<code>docker run --net=<NETWORK></code>命令。不過本文會用Compose文件實現:
json
mycouchbase: container_name: "db" image: couchbase/server ports: - 8091:8091 - 8092:8092 - 8093:8093- 11210:11210
net: ${NETWORK} mywildfly: image: arungupta/wildfly-admin environment: - COUCHBASE_URI=db ports: - 8080:8080 - 9990:9990 net: ${NETWORK}注意這裡<code>net</code>已經指定使用一個自定義網路。
2. 使用新創建的網路來啟動應用:
sh
NETWORK=mynet docker-compose up -d再查看網路詳細信息:
json
docker network inspect mynet [ {"Name": "mynet",
"Id": "47d6225ffe56ddd1a8bc0d6abb0ffd8f8ac3eec2090ff243f8cd6f77c170751b", "Scope": "local", "Driver": "bridge", "IPAM": { "Driver": "default", "Config": [ {} ] },"Containers": {
"300bebe6c3e0350ebf9b9d3746eb3a7b49444e14c00314770627a9f101442639": { "EndpointID": "82a3e2d7cd4f1bb03c9ef52bb6abf284942d7e9fcac89fe3700b0e0c4ed2654f", "MacAddress": "02:42:ac:14:00:03", "IPv4Address": "172.20.0.3/16", "IPv6Address": "" }, "4fdae4eb919f0934422513227fe541255557dd9e8b3317374685927e7f427249": { "EndpointID": "937605d716d144b55288d70817d611da5fb0f87e3aedd6b5074fca07f82c3953", "MacAddress": "02:42:ac:14:00:02", "IPv4Address": "172.20.0.2/16", "IPv6Address": "" } }, "Options": {} } ]可以看到現在已經有兩個容器關聯到這個網路上了。
使用<code>docker ps</code>查看容器ID:
sh
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 300bebe6c3e0 couchbase/server "/entrypoint.sh couch" 2 minutes ago Up 2 minutes 0.0.0.0:8091-8093->8091-8093/tcp, 11207/tcp, 11211/tcp, 0.0.0.0:11210->11210/tcp, 18091-18092/tcp db 4fdae4eb919f arungupta/wildfly-admin "/opt/jboss/wildfly/b" 2 minutes ago Up 2 minutes 0.0.0.0:8080->8080/tcp, 0.0.0.0:9990->9990/tcp wildflycouchbasejavaee7network_mywildfly_1查看其中一個容器的網路設置:
sh docker inspect -f {{ .HostConfig.NetworkMode }} 300 mynet 查看這個容器的詳細網路信息:sh
docker inspect -f {{ .NetworkSettings.Networks.mynet }} 300 {82a3e2d7cd4f1bb03c9ef52bb6abf284942d7e9fcac89fe3700b0e0c4ed2654f 172.20.0.1 172.20.0.3 16 0 02:42:ac:14:00:03}這個容器的更多細節能用<code>docker inspect</code>看到,相關的部分在這裡:
json
"Networks": { "mynet": { "EndpointID": "82a3e2d7cd4f1bb03c9ef52bb6abf284942d7e9fcac89fe3700b0e0c4ed2654f", "Gateway": "172.20.0.1", "IPAddress": "172.20.0.3", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:14:00:03" } }創建新的Docker Overlay網路
創建Overlay網路需要預先搭建好一個鍵值對服務和一個Docker Swarm集群。
如了解更多docker相關知識,請觀看培訓視頻:https://csphere.cn/training!
如需要docker相關產品,請訪問希雲官網首頁:https://csphere.cn!
推薦閱讀:
※求大神解讀下IaaS、PaaS、SaaS的區別?
※阿里雲獲得Docker在中國的運營權,對國內雲計算行業有什麼影響?
※Twilio - APIs for Text Messaging, VoIP & Voice in the Cloud
※阿里巴巴集團當前的收入來源主要來自哪些業務?未來又可能會來自哪些業務?
TAG:Docker | PaaS | DockerCompose |