容器的互联

Docker提供了两个方便的功能满足服务访问的基本需求。一个是允许映射容器内应用的服务端口到本地宿主机;一个是互联机制实现多个容器间通过容器名来快速访问。

一、容器互联

容器的互联是一种让多个容器中的应用进行快速交互的方式。它会在源和接收容器之间创建连接关系,接收容器可以通过容器名快速访问到源容器,而不用指定具体的IP地址。

使用--link参数可以让容器之间安全的进行交互,单方向的

--link name:alias

其中:name是要连接的容器名称,alias是别名

1.创建一个新的数据容器

[root@web01 ~]# docker run -d --name test01 httpd:latest
b1e66bd41f1a25895e89665ee1c57ec415f36bde821c63a5fa8986e7df6f4d25

2.创建一个新的容器,并将它连接到test01容器上

[root@web01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b1e66bd41f1a httpd:latest "httpd-foreground" 8 seconds ago Up 7 seconds 80/tcp test01
[root@web01 ~]# docker run -it --name test02 --link test01:web01 centos:6.8

[root@823eaf28a634 /]#

3. 查看test01容器的ip地址

[root@web01 kod]# docker inspect test01

...

"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "b85c5759b409bb38d2442227696e4fb7cff768a7f1c4ea4942aa6707c87bdb02",
"EndpointID": "3a7cc9880c21f686276e83b806a02072534eb472221582889436b9ce3d93e289",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
....

4. 测试联通性

[root@823eaf28a634 /]# curl -I 172.17.0.2
HTTP/1.1 200 OK
Date: Sun, 13 Sep 2020 13:29:42 GMT
Server: Apache/2.4.46 (Unix)
Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
ETag: "2d-432a5e4a73a80"
Accept-Ranges: bytes
Content-Length: 45
Content-Type: text/html

[root@823eaf28a634 /]# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:03
inet addr:172.17.0.3 Bcast:172.17.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:14 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1237 (1.2 KiB) TX bytes:660 (660.0 b)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

#也可以不通过ip地址互通,通过容器名快速访问

[root@823eaf28a634 /]# curl -I test01
HTTP/1.1 200 OK
Date: Sun, 13 Sep 2020 13:37:18 GMT
Server: Apache/2.4.46 (Unix)
Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
ETag: "2d-432a5e4a73a80"
Accept-Ranges: bytes
Content-Length: 45
Content-Type: text/html

[root@823eaf28a634 /]# curl -I web01
HTTP/1.1 200 OK
Date: Sun, 13 Sep 2020 13:37:23 GMT
Server: Apache/2.4.46 (Unix)
Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
ETag: "2d-432a5e4a73a80"
Accept-Ranges: bytes
Content-Length: 45
Content-Type: text/html

二、端口的映射实现容器访问

1. 从外部访问容器应用

   在启动容器的时候,如果不指定对应得参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。

   当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-P或者-p参数指定端口映射。当使用-P标记时,Docker会随机映射端口到内部容器开放的网络端口。

[root@web01 ~]# docker run -d -P training/webapp python app.py
037e49f0b5f890b333504e558486fcb414c45ac1556411e23cb5fad76b3e6a3f

[root@web01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
037e49f0b5f8 training/webapp "python app.py" 7 seconds ago Up 6 seconds 0.0.0.0:32768->5000/tcp funny_hermann

 可以看出宿主机的32768端口映射到容器的5000端口。此时访问宿主机的32768端口即可访问容器内web应用提供的界面

 使用docker logs命令查看应用信息

[root@web01 ~]# docker logs -f funny_hermann
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
10.0.0.253 - - [13/Sep/2020 15:10:12] "GET / HTTP/1.1" 200 -
10.0.0.253 - - [13/Sep/2020 15:10:12] "GET /favicon.ico HTTP/1.1" 404 -
10.0.0.253 - - [13/Sep/2020 15:10:16] "GET / HTTP/1.1" 200 -
10.0.0.253 - - [13/Sep/2020 15:10:17] "GET /favicon.ico HTTP/1.1" 404 -

2. 查看端口配置

使用docker port 来查看当前映射的端口配置,也可以查看绑定的地址

[root@web01 ~]# docker port funny_hermann 5000
0.0.0.0:32768

posted @ 2020-09-13 23:16  出水芙蓉·薇薇  阅读(385)  评论(0编辑  收藏  举报