在实际中,经常会碰到需要多个服务组件容器共同协作的情况,这往往需要多个容器之间能够互相访问到对方的服务。Docker除了通过网络访问外,还提供了两个很方便的功能来满足服务访问的基本需求:一是允许映射容器内应用的服务端口到本地宿主机;另一个是互联机制实现多个容器间通过容器名来快速访问。
一、端口映射实现容器访问
当启动容器时,如果不指定对应参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。当容器中运行着某些网络应用,要让外部访问这些应用时,可以通过-P或者-p参数来指定端口映射。当使用-P标记时,Docker会随机映射一个端口到内部容器开房的网络端口。
-P:将容器内部使用的网络端口随机映射到我们使用的主机上。
-p:指定要映射的端口,将容器内部使用的特定网络端口映射到宿主机上的特定端口,格式为:hostport:containerport
二、互联机制实现便捷互访
容器的互联是一种让多个容器中的应用进行快速交互的方式,它会在源和接收容器之间创建连接关系,接收容器可以通过容器名快速访问到源容器,而不用指定具体的IP地址。
创建一个数据库容器和一个web容器,并将web容器连接到数据库容器
此时web容器已经和db容器建立互联关系,--link参数格式为:--link name:alias,其中name是要连接的容器名称,alias是该连接的别名。这相当于在两个互联容器间创建了一个虚拟通道,而不用映射它们的端口到宿主机上。在启动db容器的时候并没有使用参数-p或-P,从而避免了暴露数据库服务端口到外部网络上。
docker通过两种方式查看公开连接信息:1、更新环境变量 2、更新/etc/hosts文件
使用env来查看web容器的环境变量,--rm表示容器运行后自动删除
docker会添加host信息到父容器的/etc/hosts文件