Docker端口映射是將Docker容器內(nèi)部的端口映射到主機(jī)的端口上,使得可以通過主機(jī)的IP地址和端口訪問容器內(nèi)的服務(wù)。
Docker使用Linux的網(wǎng)絡(luò)命名空間來實(shí)現(xiàn)端口映射。在Linux中,每個(gè)容器都有自己的網(wǎng)絡(luò)命名空間,包括獨(dú)立的IP地址和端口空間。當(dāng)啟動(dòng)一個(gè)容器時(shí),Docker會(huì)為容器創(chuàng)建一個(gè)虛擬網(wǎng)絡(luò)接口,該接口綁定到容器的網(wǎng)絡(luò)命名空間。
在端口映射中,Docker將容器內(nèi)的端口和主機(jī)的端口進(jìn)行綁定。當(dāng)容器內(nèi)有服務(wù)監(jiān)聽某個(gè)端口時(shí),Docker會(huì)將主機(jī)上的某個(gè)端口轉(zhuǎn)發(fā)到容器內(nèi)的對(duì)應(yīng)端口。這樣,當(dāng)主機(jī)收到來自外部的請(qǐng)求時(shí),就會(huì)將請(qǐng)求轉(zhuǎn)發(fā)到容器內(nèi)部的服務(wù)上。
具體地,Docker通過iptables工具來實(shí)現(xiàn)端口映射。當(dāng)容器啟動(dòng)時(shí),Docker會(huì)在主機(jī)上創(chuàng)建一個(gè)iptables規(guī)則,該規(guī)則會(huì)將主機(jī)的某個(gè)端口轉(zhuǎn)發(fā)到容器內(nèi)的對(duì)應(yīng)端口。這樣,所有請(qǐng)求發(fā)送到主機(jī)上的指定端口時(shí),iptables會(huì)將請(qǐng)求轉(zhuǎn)發(fā)到容器內(nèi)部。
總結(jié)起來,Docker端口映射的原理是通過創(chuàng)建iptables規(guī)則,將主機(jī)的端口和容器內(nèi)的端口進(jìn)行綁定,實(shí)現(xiàn)對(duì)外服務(wù)的訪問。