说随缘就随缘,前天刚说惰怠今天就更新~。
本章内容
Docker端口映射相关。
本文实操全部基于Ubuntu 20.04
宿主机 => linux服务器本身
二章二小节中介绍docker create
命令时就提供了常用的附加参数列表,docker run
可附加参数同create
命令附加参数一致,Docker容器启动后如果不指定端口,将使该容器无法被外部访问,本章节围绕Docker端口映射相关。
映射端口
一、映射本地端口
使用docker run -p 宿主机端口:容器端口
or docker run -P
可以开放容器内部的端口供外部访问,区别是-P
会随机映射一个49000~49900的端口供容器内部使用,执行命令如下。
使用-p 8001:80
映射容器端口80到本地端口8001,访问8001正常返回nginx
页面,下面试试-P
,执行命令如下。
通过-P
启动的容器,可以通过docker ps
查看随机分配的端口是多少,也可以使用docker port 容器别名 or 容器id
来查看;同样访问分配的端口32768,可以看到正常返回nginx
页面。
某些情况需要指定容器端口映射到某个IP
地址上,Docker支持在宿主机端口添加IP
地址,比如-p 127.0.0.1:8001:80
,同时支持不指定具体端口,只指定映射到某个IP
地址的某个随机端口上,比如-p 127.0.0.1::80
,执行命令如下。
or 不指定具体端口,执行命令如下。
还有一种情况,比如对接了某个硬件的项目需要打包成容器,但是需要暴露的协议并不是TCP
,而是UDP
,Docker针对这种情况也有解决办法,只需要在命令-p
附加参数容器端口后填充对应协议即可,比如-p 8001:80/upd
。
※ 对于某些容器会存在多个端口需要映射到本地的情况,Docker也支持添加多个-p
附加参数来解决。
二、容器互联
上节介绍了数据卷容器,相当于是容器数据互联,这节容器互联相当于通信上的互联,容器连接系统依据容器名称来执行,所以需要给容器指定名称,虽然不指定名称也能启动容器,但分配的名称不容易熟记,建议自己指定容器名称,docker run --name xxx
,下面我们启动俩个nginx来进行互联演示。
使用命令docker run --link 容器名称:容器别名
可以使多个容器互联,执行命令如下。
这里我们在原有一个运行中的nginx
容器myng
为原容器,新建并运行一个新的容器yang
并连接容器myng
。执行完毕后,我们进入yang
容器内部,执行命令apt-get update
更新apt源,并执行命令下载ping
,执行命令为apt-get install inetutils-ping
,然后尝试ping myng
。
发现可以通过yang
容器内部ping
通容器myng
,证明容器已经互联,我们也可以通过查看yang
容器内的hosts
文件来判断互联是否成功,命令如下。
可以看到在hosts
文件中已经存在一条指向myng
容器的解析,相当于在两个互联的容器之间创建了一个虚机通道,而且不用映射它们的端口到宿主主机上。
※ 需要注意,Docker可以链接多个子容器到父容器,比如可以链接多个yang
到同一个myng
容器上。
☆ 参考文献:
《Docker技术入门与实战》 第2版
《Docker技术入门与实战》 第3版
◎ 文中所用到的资源链接:
无