暴露端口和端口绑定

暴露端口

此方法用于在同一网络或者 docker 主机内。
同一网络上的容器可以通过它们公开的端口相互通信,我们可以通过以下方法之一公开端口。

将 EXPOSE 80(或者任何你想要的端口)放在你的 Dockerfile 中,它会告诉 Docker 你的容器的服务可以连接到端口 80。

通过'run -expose [端口号]'从docker容器中使用'-expose [端口号]'公开端口:

# docker run --expose=[port number] test

端口绑定

此方法用于同一网络外。
要允许通过定义的端口与同一网络外的容器进行通信,我们需要使用 docker run 上的 -p 标志发布和映射一个或者多个端口,或者使用 -P 标志发布所有暴露的端口并映射他们到高阶端口。
我们可以通过以下方式之一进行端口移植:

-通过 Dockerfile 通过 -expose 公开端口并使用 -P 标志发布它。
它会将暴露的端口绑定到随机端口上的 Docker 主机。

  • 通过 Dockerfile 通过 -expose 公开端口并使用 -p 21:21 标志发布它,这会将公开端口绑定到特定端口 21 上的 Docker 主机和来宾 21.

通过docker容器运行命令绑定端口:

# docker run -p [port number on docker host]:[port number on container]/tcp -p [port number on docker host]:[port number on container]/udp test

例子:

# docker run -p 80:80/tcp -p 500:500/udp test

使用Docker链接机制建立容器之间的链接

Docker 可以通过使用环境变量将信息从父容器传递到子容器,从而在两个容器之间创建隧道。
要创建链接,请使用 -link 标志:

# docker run -itd --name=[child container] --link [parent container] [child container image] /bin/bash

例子:

  • 检查父容器的网络:
# docker ps|grep dvc
7d5ad19de678 j_web:v1 "/bin/sh -c '/usr/bi…" 2 days ago Up 5 hours dvc1
# docker exec -it dvc1 /bin/bash
# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:04
inet addr:172.17.0.4 Bcast:172.17.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 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:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
  • 将两个新容器与父容器链接:
# docker run -it --name dvc1_dup1 --rm --link dvc1 j_web:v1 /bin/bash
  • 检查链接的容器:
# docker inspect -f "{{ .HostConfig.Links }}" dvc1_dup1
[/dvc1:/dvc1_dup1/dvc1]
  • 检查新容器的主机文件,它有父容器的信息:
# docker exec -it dvc1_dup1 /bin/bash
[root@b56d465976bc /]# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.4 dvc1 7d5ad19de678
172.17.0.5 b56d465976bc
[root@b56d465976bc /]#

警告: -link 标志是 Docker 的遗留功能。
它可能最终会被删除。
除非我们绝对需要继续使用它,否则我们建议我们使用用户定义的网络来促进两个容器之间的通信,而不是使用 -link。
用户定义的网络不支持我们可以使用 -link 实现的一项功能是在容器之间共享环境变量。
但是,我们可以使用其他机制(例如卷)以更可控的方式在容器之间共享环境变量。

Docker 如何 公开端口、端口绑定和 docker 链接

这篇文章说明了链接 Docker 容器的三种方法。

欢迎来到之路教程(on itroad-com)

单个主机内的 Unix 域套接字

要在单个主机内的容器之间进行通信,我们可以在 Linux 上使用相同的套接字使用 IPC 机制。
从共享应在主机中创建的卷的 docker 主机启动两个 docker:

# docker run -d -it --name dvc1 -v /var/tmp:/host oraclelinux:7 /bin/bash
# docker run -d -it --name dvc2 -v /var/tmp:/host oraclelinux:7 /bin/bash

执行上述命令后,容器dvc1和dvc2就可以使用sockets作为/var/tmp/SocketX进行互连了。

日期:2020-09-17 00:16:23 来源:oir作者:oir