Docker学习笔记:端口映射与容器互联

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

一、端口映射实现访问容器

       当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-P或-p参数来指定端口映射。当使用-P时,Docker会随机映射一个49000~49900的端口到内部容器开放的网络端口:docker run -d -P training/webapp python app.py

       -p可以指定要映射的端口,并且在一个指定端口上只可以绑定一个容器。支持的格式有:

       ① 映射所有接口地址:HostPort:ContainerPort(多次使用-p标记可以绑定多个端口)

       ② 映射到指定地址的指定端口:IP:HostPort:ContainerPort

       ③ 映射到指定地址的任意端口:IP::ContainerPort

       可以使用docker port命令来查看当前映射的端口配置和绑定地址。

二、互联机制实现便捷访问

       容器的互联会在源和接受容器之间创建连接关系,接收容器可以通过容器名快速访问到源容器,而不用指定具体的IP地址。

       使用--link参数可以让容器之间安全地进行交互,格式为--link name:alias。先创建一个新的数据库容器db:

              docker run -d --name db training/postgres

       再创建一个web容器,并将它连接到db容器:

              docker run -d -P --name web --link db:db training/webapp python app.py

       使用docker ps查看容器连接,可以看到db容器的names列表有db也有web/db。这表示web容器连接到db容器,允许web容器访问db容器的信息。Docker相当于在两个互联的容器之间创建了一个虚拟通道,而且不用映射它们的端口到宿主主机上在启动db容器时并没有使用-P和-p标记,从而避免了暴露数据库服务端口到外部网络上。

       Docker通过两种方式为容器公开连接信息:更新环境变量,更新/etc/hosts文件。

猜你喜欢

转载自www.cnblogs.com/fantastic-clouds/p/10332041.html