大量的互聯(lián)網(wǎng)應(yīng)用服務(wù)包括多個(gè)服務(wù)組件,這往往需要多個(gè)容器之間通過網(wǎng)絡(luò)通信進(jìn)行相互配合。
Docker目前提供了映射容器端口到宿主主機(jī)和容器互聯(lián)機(jī)制來為容器提供網(wǎng)絡(luò)服務(wù)
本章講解如何使用docker的網(wǎng)絡(luò)功能。包括使用端口映射機(jī)制來將容器內(nèi)應(yīng)用服務(wù)提供給外部網(wǎng)絡(luò),以及通過容器互聯(lián)系統(tǒng)讓多個(gè)容器之間進(jìn)行快捷的網(wǎng)絡(luò)通信。
1. 從外部訪問容器應(yīng)用
在啟動(dòng)容器的時(shí)候,如果不指定對(duì)應(yīng)參數(shù),在容器外部無法通過網(wǎng)絡(luò)訪問容器內(nèi)的應(yīng)用。需要通過 -p 參數(shù)來指定端口映射。當(dāng)使用 -p 標(biāo)記時(shí),docker 會(huì)隨機(jī)映射一個(gè)49000~49900 的端口到外部開放的網(wǎng)絡(luò)端口。
docker run -d -P training/webapp python app.py
docker ps -l
-p(小寫)這可以指定要映射的端口,并且在指定端口上可以綁定一個(gè)容器。格式
ip:hostPort:containerPort
ip::containerPort
hostport:containerPort
映射所有接口地址
使用hostPort:containerPort 格式將本地的5000端口映射到容器的5000端口
docker run -d -p 5000:5000 training/webapp python app.py
此時(shí)默認(rèn)會(huì)綁定本地所有接口上的所有地址。多次使用-p 可以綁定多個(gè)端口。
docker run -d -p 5000:5000 -p 3000:80 training/webapp python app.py
映射到指定地址的指定端口
可以使用 ip:hostPort:containerPort格式指定映射使用一個(gè)特定地址,比如localhost 地址127.0.0.1:
docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
映射指定地址的任意端口
使用ip::containerPort板頂localhost的任意端口到容器的5000端口,本地主機(jī)會(huì)自動(dòng)分配一個(gè)端口。
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 來查看當(dāng)前映射的端口配置。也可以查看到綁定的地址:
docker port nostalgic_morse 5000
2. 容器互聯(lián)實(shí)現(xiàn)容器間通信
容器的連接(linking)系統(tǒng)是除了端口映射外領(lǐng)一種可以與容器中應(yīng)用進(jìn)行交互的方式。它會(huì)在源和接受容器之間創(chuàng)建一個(gè)隧道,接收容器可以看到源容器指定的信息。
自定義容器命名
連接系統(tǒng)一句容器的名稱來執(zhí)行。因此。首要自頂一個(gè)好幾的容器命名。
雖然當(dāng)創(chuàng)建容器的時(shí)候,系統(tǒng)默認(rèn)會(huì)分配一個(gè)名字,但自定義容器有兩個(gè)好處:1.好記,2作為有用的參考點(diǎn)。
docker run -d -P --name web training/webapp python app.py
使用docker ps 來驗(yàn)證設(shè)定的命名:
docker ps -l
也可以使用docker inspect 來查看容器的名字:
docker inspect -f "{{.Name}}" aed84ee21bde
在執(zhí)行docker run 的時(shí)候如果添加--rm標(biāo)記,則容器在終止后會(huì)立即刪除,注意 --rm 和-d 參數(shù)不能同時(shí)使用。
容器互聯(lián)
使用 --link 參數(shù)可以讓容器之間安全的進(jìn)行交互。
下面先創(chuàng)建一個(gè)新的數(shù)據(jù)庫容器;
docker run -d --name db training/postgres
刪除之前的web容器:
docker rm -f web
然后創(chuàng)建一個(gè)新的web容器,并將它連接到db容器
docker run -d -P --name web --link db:db training/webapp python app.py
此時(shí),db 容器和web容器建立互聯(lián)關(guān)系。
--link 參數(shù)的格式: --link name:alias,其中name是要連接的容器的名稱,alias 是這個(gè)鏈接的別名。
使用 docker ps 查看容器的連接
docker ps
本章信息摘自《Docker技術(shù)入門與實(shí)戰(zhàn)》