linux 运行多个docker,Docker 中如何连接多个 Container 协同工作
在Docker使用部分我們接觸到了通過網絡端口來連接運行在Docker容器內的服務。這是同Docker容器內服務和應用互動的方法之一。在這一節中,我們將帶你復習一下通過網絡端口連接到Docker容器并給你介紹容器連接的概念。
網絡端口映射刷新
在Docker的使用部分中,我們創建了一個運行Python Flask應用的容器。
$ sudo docker run -d -P training/webapp python app.py
注意:容器有一個內部網絡和IP地址(還記得在使用Docker部分中我們曾使用docker的監控命令查看容器的IP地址)。Docker可以有各種不同的網絡配置。你可以在這里看到Docker網絡的更多相關信息。
當我們創建容器時,我們使用-P標志來自動映射任意網絡端口到我們Docker主機上介于49000到49900之間的隨機高位端口。隨后,當我們運行docker ps時,我們會看到5000端口綁定到了49155端口上了。
$ sudo docker ps nostalgic_morse
CONTAINER ID? IMAGE? ? ? ? ? ? ? ? ? COMMAND? ? ? CREATED? ? ? ? STATUS? ? ? ? PORTS? ? ? ? ? ? ? ? ? ? NAMES
bc533791f3f5? training/webapp:latest? python app.py 5 seconds ago? Up 2 seconds? 0.0.0.0:49155->5000/tcp? nostalgic_morse
我們同樣看到了怎樣使用-P標志將一個容器端口綁定到一個指定端口。
$ sudo docker run -d -p 5000:5000 training/webapp python app.py
另外,我們發現這并不是一個好辦法,因為它約束我們一個特定端口只能有一個容器.
還有一些其他的使用 -p 的方法。 默認的情況下 -p 會把container的Port綁到宿主機上的所有ip的該端口號上。 (譯者:如果你的宿主機有多個IP, 每個IP的那個端口都會被綁到container的那個port上) 我們可以通過指定接口, 例如下面的例子, 端口就只綁定到了 localhost 上。
$ sudo docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
這會吧container內部的5000端口綁定到宿主機的 127.0.0.1 的5000端口上去.
如果只指定了網絡接口而沒有指定端口號, 則container的端口會綁到這個網絡接口上的一個隨機端口上.
$ sudo docker run -d -p 127.0.0.1::5000 training/webapp python app.py
我們還可以使用UDP
$ sudo docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
使用 docker port 可以查看當前的container的端口的綁定情況, 和特殊的端口的配置。 例如, 如果我們吧container的端口綁到了宿主機的 localhost, 我們輸入 docker port 的時候輸出會是:
$ docker port nostalgic_morse
127.0.0.1:49155
注 -p 可以被多次使用用來吧多個container里的port綁定到宿主機上
Docker 容器鏈接
映射網絡端口不是吧container彼此連接起來的唯一方法。Docker的linking系統允許你吧多個 container連接起來, 讓他們彼此交互信息。Docker的linking會創建一種父子級別的關系。 父container可以看到他的子container提供的信息。
容器命名
Docker的linking系統依賴于container的名字。我們已經注意到了每個container都會被自動的 分配一個名字, 在本教程里大家可能已經熟悉了 nostalgic_morse 這個名字(譯者:docker 自動分配的名字都是確實存在的詞, 有些名字比較有意思 例如我的一個container就叫做tender einstein 溫柔的愛因斯坦, 對于大多數情況, 這些名字絕對是考驗你英語單詞量的機會, 比如 backstabbing nobel, stoic carson). 我們可以自己對container命名. 命名有兩個用處:
好記 比如命名一個承載web服務的container為web
container 之間可以互相引用, 例如一個 web container 使用一個 db container
通過 --name 可以給container命名, 例如:
$ sudo docker run -d -P --name web training/webapp python app.py
你可以看到我們啟動了一個新的container, 啟動的時候使用了 --name 命名這個container為 web。 我們可以通過命令 docker ps查看container的名字
$ sudo docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aed84ee21bde training/webapp:latest python app.py 12 hours ago Up 2 seconds 0.0.0.0:49154->5000/tcp web
我們也可以用 docker inspect 查看container的名字.
$ sudo docker inspect -f "{{ .Name }}" aed84ee21bde
/web
(譯者: 上面那個乖乖的語法源于golang自帶的模板語言)
注 Container的名字必須是唯一的。也就是說你只能命名一個container為 web。 要重新使用一個container的名字的時候必須把之前叫這個名字的container刪除, 才能 再使用。刪除container可以使用 docker rm. 還有個便利的方法就是在啟動container的時候 使用 --rm 標記. 這樣container停止的時候就會自動被刪除。 (譯者: 如果你使用過一段時間docker, 用docker ps -a 你可能會發現一大堆的已經停止了的container, 在很多的docker教程里, 在啟動container的時候都會帶上 --rm.)
總結
以上是生活随笔為你收集整理的linux 运行多个docker,Docker 中如何连接多个 Container 协同工作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux编译器6,Linux安装gcc
- 下一篇: linux线程并不真正并行,Linux系