LaoCat带你认识容器与镜像(三【下】)

34 阅读3分钟

说随缘就随缘,前天刚说惰怠今天就更新~。

本章内容

Docker端口映射相关。

本文实操全部基于Ubuntu 20.04
宿主机 => linux服务器本身

二章二小节中介绍docker create命令时就提供了常用的附加参数列表,docker run可附加参数同create命令附加参数一致,Docker容器启动后如果不指定端口,将使该容器无法被外部访问,本章节围绕Docker端口映射相关。


映射端口

一、映射本地端口
使用docker run -p 宿主机端口:容器端口 or docker run -P 可以开放容器内部的端口供外部访问,区别是-P会随机映射一个端口供容器内部使用,Docker版本不同端口段也不同,执行命令如下。 使用-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版

◎ 文中所用到的资源链接: 无