docker中容器的網(wǎng)絡配置常用命令詳解
網(wǎng)絡基礎配置
雖然Docker可以根據(jù)鏡像“多開”容器,并而每個容器互不影響,但并不代表容器與容器之間是完全決裂的。Docker在運行鏡像的時候提供了映射容器端口到宿主主機、容器端口到另一個容器的網(wǎng)絡互聯(lián)功能,使得容器與宿主主機、容器與容器之間可以相互通信。
### 從外部訪問容器應用
在啟動容器的時候,如果不指定對應的參數(shù),在容器外是無法通過網(wǎng)絡來訪問容器內(nèi)的網(wǎng)絡應用和服務的。當容器中運行一些需要被外部訪問的網(wǎng)絡應用時,可以通過-P或者-p參數(shù)來指定端口映射。當使用-P標記時,Docker會隨機映射一個49000~49900的端口至容器內(nèi)部開放的網(wǎng)絡端口:
docker run -d -p [mirror ID or TAG]
使用-p (小寫)則可以指定要映射的端口,并且在一個指定端口上只可以綁定一個容器。支持的格式有ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort。
映射所有接口地址
使用hostPort:containerPort將本地的5000端口映射到容器的5000端口:
docker run -d -p 5000:5000 training/webapp python app.py
此時默認會綁定本地所有接口上的所有地址。多次使用-p標記可以綁定多個端口:
docker run -d -p 5000:5000 -p 3000:80 training/webapp python app.py
映射到指定地址的指定端口
可以使用ip:hostPort:containerPort格式指定映射使用一個特定地址,比如localhost地址127.0.0.1:
docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
也可以是內(nèi)部其它容器的IP地址。
映射到指定地址的任意端口
使用ip::containerPort綁定localhost的任意端口到容器5000端口,本地主機會自動分配一個端口:
docker run -d -p 127.0.0.1::5000 training/webapp python app.py
還可以使用udp標記來指定udp端口:
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
查看映射端口配置
使用docker port查看當前映射的端口配置,也可以查看到綁定的地址:
docker port nostalgic_morse 5000
容器有自己的內(nèi)部網(wǎng)絡和IP地址(使用docker inspect+容器ID可以獲取所有的變量值)。
容器互聯(lián)實現(xiàn)容器間的互通信
容器的連接系統(tǒng)是除了端口映射外另一種可以與容器中應用進行交互的方式。它會在源和接收容器之間創(chuàng)建一個隧道,接收容器可以看到源容器指定的信息。
自定義容器命名
連接系統(tǒng)依據(jù)容器的名稱來執(zhí)行。因此首先需要自定義一個好記的容器命名。
雖然當創(chuàng)建容器的時候,系統(tǒng)默認會分配一個名字,但自定義命名容器有兩個好處:
- 自定義的命名比較好記
- 當要連接其它容器時,可以作為一個有用的參數(shù)點,比如連接web容器到db容器。
使用--name標記可以為容器自定義命名:
docker run -d -p --name web training/webapp python app.py
使用docker ps可以查看命名,或者使用docker inspect來查看容器的名字:
docker inspect -f "{{name}}" [mirror ID]
容器的名稱是唯一的,如果已經(jīng)命名了一個叫web的容器,必須先用docker rm命令來刪除這個容器,才能再以web這個名稱創(chuàng)建新容器。
容器互聯(lián)
使用--link參數(shù)可以讓容器之間安全地進行交互。
--link參數(shù)格式是--link name:alias,其中name是要鏈接容器的名稱,alias是這個連接的別名。
比如我們先創(chuàng)建一個新的數(shù)據(jù)庫容器:
docker run -d --name db training/postgres
然后再創(chuàng)建一個web容器,并將它連接到db容器:
docker run -d -p --name web --link db:db training/webapp python app.py
這個時候db容器就與web容器可以互相通信了??梢允褂胐ocker ps來查看容器的連接。
使用--link參數(shù)可以讓Docker在兩個容器之間通過一個安全的隧道互相通信,而不用通過開放端口的方式來實現(xiàn),避免了把端口暴露到外部網(wǎng)絡上。
查看公開容器的接連信息
環(huán)境變量:使用env命令來查看容器的環(huán)境變量
docker run --name web --link db:db training/webapp env
/etc/hosts文件:使用link參數(shù)時,Docker會添加host信息到父容器的/etc/hosts的文件。下面是父容器web的hosts文件
docker run -t -i --link db:db training/webapp /bin/bash root@aed84ee21bd3:/opt/webapp# cat /etc/hosts 127.17.0.7 aed84ee21bde ... 172.17.0.5 db
第一個是web容器的host信息,默認用自己的id為主機名。第二個是db容器的ip和主機名。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Docker安裝Redis并使用Another?Redis?Desktop?Manager連接的方法
Redis?是一個使用C語言編寫的、開源的(遵守?BSD?協(xié)議)、高性能的、支持網(wǎng)絡、可基于內(nèi)存亦可持久化的日志型、Key-Value的NoSQL數(shù)據(jù)庫,這篇文章主要介紹了Docker安裝Redis并使用Another?Redis?Desktop?Manager連接,需要的朋友可以參考下2022-09-09
簡述Docker 安裝influxDB分布式時間序列數(shù)據(jù)庫及相關操作
influxDB是一個分布式時間序列數(shù)據(jù)庫。這篇文章主要介紹了Docker 安裝influxDB分布式時間序列數(shù)據(jù)庫及相關操作,需要的朋友可以參考下2019-10-10
Jenkins+docker發(fā)布Springbot服務的實現(xiàn)
本文主要介紹了Jenkins+docker發(fā)布Springbot服務的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-03-03

