Docker 端口映射與容器互聯(lián)的實(shí)現(xiàn)
前言
Docker的端口映射和容器互聯(lián)是構(gòu)建和管理微服務(wù)架構(gòu)時(shí)重要的概念。這些功能使你能夠可以將服務(wù)暴露給外部世界,并讓容器間可以通過網(wǎng)絡(luò)通信。下面將詳細(xì)介紹這兩個(gè)概念以及如何在Docker中實(shí)現(xiàn)。
Docker端口映射
端口映射指的是將容器的端口映射到主機(jī)的端口,使得外部用戶能夠通過主機(jī)的IP地址和端口訪問容器內(nèi)運(yùn)行的服務(wù)。
啟動(dòng)容器并進(jìn)行端口映射
使用-p標(biāo)志可以在啟動(dòng)容器時(shí)進(jìn)行端口映射。語法如下:
docker run -p <host_port>:<container_port> <image_name>
- host_port:主機(jī)的端口號
- container_port:容器內(nèi)部的端口號
示例
假設(shè)我們有一個(gè)運(yùn)行在8080端口的Web應(yīng)用,并希望將其映射到主機(jī)的8080端口。
docker run -d -p 8080:8080 my-web-app
-d:后臺運(yùn)行容器my-web-app:鏡像名稱
Docker容器互聯(lián)
容器互聯(lián)指的是多個(gè)容器之間可以互相訪問。Docker為容器之間的通信提供了網(wǎng)絡(luò)支持。
創(chuàng)建自定義網(wǎng)絡(luò)
使用自定義網(wǎng)絡(luò)可以使容器之間更加安全和便捷地進(jìn)行通信。創(chuàng)建內(nèi)部網(wǎng)絡(luò)的命令如下:
docker network create my-network
啟動(dòng)容器并連接到網(wǎng)絡(luò)
啟動(dòng)容器并將其連接到創(chuàng)建的網(wǎng)絡(luò):
docker run -d --name web --network my-network -p 8080:8080 my-web-app docker run -d --name db --network my-network my-database-image
此處,--network標(biāo)志指定容器要連接的網(wǎng)絡(luò)。
在容器間通信
一旦容器在同一網(wǎng)絡(luò)中,它們就可以通過容器名稱訪問彼此的服務(wù)。例如,如果web容器需要連接到名為db的數(shù)據(jù)庫容器,它可以通過db主機(jī)名與之通信(例如使用db:5432來連接到數(shù)據(jù)庫服務(wù))。
示例:創(chuàng)建一個(gè)Web應(yīng)用和數(shù)據(jù)庫的互聯(lián)
假設(shè)我們有一個(gè)簡單的Web應(yīng)用,該應(yīng)用需要連接到PostgreSQL數(shù)據(jù)庫。
創(chuàng)建自定義網(wǎng)絡(luò):
docker network create my-network
運(yùn)行數(shù)據(jù)庫容器:
docker run -d --name db --network my-network -e POSTGRES_PASSWORD=mysecretpassword postgres
運(yùn)行Web應(yīng)用容器:
docker run -d --name web --network my-network -p 8080:8080 my-web-app
在Web應(yīng)用中連接數(shù)據(jù)庫:
在Web應(yīng)用的配置文件中,你可以使用db作為數(shù)據(jù)庫主機(jī)名進(jìn)行連接,例如:
import psycopg2
conn = psycopg2.connect(
dbname='postgres',
user='postgres',
password='mysecretpassword',
host='db', # 使用容器名稱
port=5432
)
查看網(wǎng)絡(luò)和容器
可以使用以下命令查看網(wǎng)絡(luò)中的容器:
docker network inspect my-network docker ps -a
小結(jié)
以上介紹了Docker中的端口映射和容器互聯(lián)的基本概念與實(shí)踐。通過端口映射,可以將容器服務(wù)暴露給主機(jī),供外部訪問;而通過自定義網(wǎng)絡(luò)與容器互聯(lián),可以安全高效地進(jìn)行容器間的通信。這些特性使得Docker在開發(fā)、測試和生產(chǎn)環(huán)境中成為管理應(yīng)用服務(wù)的強(qiáng)大工具。
補(bǔ)充
docker 的網(wǎng)絡(luò)原理
Docker的網(wǎng)絡(luò)功能是其核心特性之一,允許容器之間以及容器與外部之間進(jìn)行通信。Docker的網(wǎng)絡(luò)原理包括多個(gè)網(wǎng)絡(luò)模式、網(wǎng)絡(luò)驅(qū)動(dòng)程序和網(wǎng)絡(luò)的配置管理。下面將詳細(xì)介紹Docker網(wǎng)絡(luò)的原理及各個(gè)組成部分。
Docker網(wǎng)絡(luò)模型
Docker網(wǎng)絡(luò)模型主要包括以下幾種網(wǎng)絡(luò)類型:
橋接網(wǎng)絡(luò) (Bridge Network): 默認(rèn)網(wǎng)絡(luò)類型。當(dāng)你啟動(dòng)一個(gè)Docker容器時(shí),如果沒有指定網(wǎng)絡(luò)類型,它會(huì)自動(dòng)連接到名為
bridge的默認(rèn)網(wǎng)絡(luò)。容器連接到同一個(gè)橋接網(wǎng)絡(luò)時(shí),可以通過容器名稱進(jìn)行相互通信。主機(jī)網(wǎng)絡(luò) (Host Network): 在這種模式下,容器共享主機(jī)的網(wǎng)絡(luò)棧,容器不會(huì)取得自己的IP地址,而是直接使用主機(jī)的IP地址。這種模式適用于對性能要求高的網(wǎng)絡(luò)場景,但會(huì)犧牲網(wǎng)絡(luò)隔離。
疊加網(wǎng)絡(luò) (Overlay Network): 用于跨多個(gè)Docker主機(jī)的容器間通信,尤其用在Docker Swarm集群中。Overlay網(wǎng)絡(luò)在Docker主機(jī)之間創(chuàng)建一個(gè)虛擬網(wǎng)絡(luò),使得不同主機(jī)上的容器能夠以直觀的方式進(jìn)行通信。
容器網(wǎng)絡(luò) (Container Network): 允許一個(gè)容器直接使用另一個(gè)容器的網(wǎng)絡(luò)棧,這意味著它可以共享IP地址和端口。通過
--network container:<container_name>來連接到另一個(gè)容器的網(wǎng)絡(luò)。自定義網(wǎng)絡(luò): 用戶可以創(chuàng)建自定義的橋接網(wǎng)絡(luò)或疊加網(wǎng)絡(luò)。自定義網(wǎng)絡(luò)允許用戶更加靈活地配置網(wǎng)絡(luò)策略和容器之間的通信。
網(wǎng)絡(luò)驅(qū)動(dòng)程序
Docker提供了多種網(wǎng)絡(luò)驅(qū)動(dòng)程序來支持不同的網(wǎng)絡(luò)接口:
bridge: 當(dāng)沒有指定網(wǎng)絡(luò)時(shí),Docker容器默認(rèn)使用的驅(qū)動(dòng)程序。適合于在單個(gè)主機(jī)上的容器之間的通信。
host: 直接使用宿主機(jī)的網(wǎng)絡(luò)。這種方式在性能上可得到提升,但容器間缺少隔離。
overlay: 用于跨多個(gè)Docker主機(jī)通信,支持Docker Swarm集群的網(wǎng)絡(luò)模式。
macvlan: 允許容器獲取物理網(wǎng)絡(luò)接口的MAC地址,適用于需要在物理網(wǎng)絡(luò)上與其他設(shè)備直接通信的情況。
Docker網(wǎng)絡(luò)的工作機(jī)制
網(wǎng)絡(luò)命名空間
每個(gè)Docker容器在啟動(dòng)時(shí)會(huì)創(chuàng)建一個(gè)獨(dú)立的網(wǎng)絡(luò)命名空間。命名空間對容器的網(wǎng)絡(luò)資源進(jìn)行隔離,確保不同容器之間的網(wǎng)絡(luò)不會(huì)相互干擾。每個(gè)容器都有自己的網(wǎng)絡(luò)接口、IP地址和路由表。
假設(shè)路由和DNS
容器間通信:在同一Docker網(wǎng)絡(luò)內(nèi)的容器可以使用容器名稱或者容器內(nèi)的服務(wù)名進(jìn)行相互通信。Docker內(nèi)置了一個(gè)DNS服務(wù)器來處理容器名稱的解析。
默認(rèn)網(wǎng)關(guān)和路由: 每個(gè)Docker網(wǎng)絡(luò)都有自己的默認(rèn)網(wǎng)關(guān)。Docker在創(chuàng)建網(wǎng)絡(luò)時(shí)會(huì)自動(dòng)配置路由,以確保容器和主機(jī)的網(wǎng)絡(luò)流量正常。
網(wǎng)絡(luò)連接
- 使用
docker run命令時(shí),可以通過--network選項(xiàng)指定容器連接的網(wǎng)絡(luò)。容器啟動(dòng)后,可以通過IP地址、容器名稱、主機(jī)名等方式進(jìn)行互訪。
Docker的網(wǎng)絡(luò)管理
Docker CLI提供了一組命令用于網(wǎng)絡(luò)管理:
# 創(chuàng)建網(wǎng)絡(luò): docker network create my-network # 查看網(wǎng)絡(luò)列表 docker network ls # 查看特定網(wǎng)絡(luò)的詳細(xì)信息 docker network inspect my-network # 刪除網(wǎng)絡(luò) docker network rm my-network
到此這篇關(guān)于Docker 端口映射與容器互聯(lián)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Docker 端口映射與容器互聯(lián)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何使用Docker定時(shí)備份數(shù)據(jù)
這篇文章主要介紹了如何使用Docker定時(shí)備份數(shù)據(jù),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-04-04
使用Docker部署Nginx+Flask+Mongo的應(yīng)用
這篇文章主要介紹了使用Docker部署Nginx+Flask+Mongo的應(yīng)用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-03-03
docker?run容器運(yùn)行的方法實(shí)現(xiàn)
本文主要介紹了docker?run容器運(yùn)行的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
Docker 數(shù)據(jù)卷操作的實(shí)現(xiàn)
這篇文章主要介紹了Docker 數(shù)據(jù)卷操作的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
詳解Centos7 下建立 Docker 橋接網(wǎng)絡(luò)
本篇文章主要介紹了詳解Centos7 下建立 Docker 橋接網(wǎng)絡(luò),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01
docker離線安裝社區(qū)版(docker-18.06.3-ce)
在一些特定的環(huán)境下,由于網(wǎng)絡(luò)限制或者其他原因,我們可能需要在Linux系統(tǒng)上進(jìn)行離線安裝Docker,本文就來介紹一下docker離線安裝社區(qū)版,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03
使用Docker部署todo任務(wù)管理器的實(shí)現(xiàn)
本文介紹使用Docker部署Todo任務(wù)管理器的全過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-07-07

