天下風雲出我輩
一入江湖歲月催

Docker端口映射与容器互联

  在实践中,经常需要多个服务组件容器共同协作的情况,这往往需要多个容器之间能够互相访问到对方的服务。Docker除了通过网络访问外,还提供了两个很方便的功能来满足服务访问的基本需求:一个是允许映射容器内应用的服务端口到本地宿主机;另一个是互联机制实现多个容器间通过容器名来快速访问。

1、从外部访问容器应用

在启动容器的时候,如果不指定对应的参数,在容器外部是无法通过网络进行访问容器内的应用和服务的。当容器中运行一些网络应用,要让外部访问这些应用,可以通过-P或-p参数来指定端口映射。

当使用-P(大写)标记时,Docker会随机映射一个端口至容器内部开放的网络端口。

[[email protected] ~]# docker run -itd -P nginx:1.14.1 /bin/bash
ea64b1b5051c897233b48e5fc8435efcdf4bdb9eeca95559687ed1c1e24bb2fd

[[email protected] ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ea64b1b5051c nginx:1.14.1 "/bin/bash" 22 seconds ago Up 22 seconds 0.0.0.0:32774->80/tcp focused_kilby

使用-p(小写)则可以指定要映射的端口,并且在一个指定端口上只可以绑定一个容器。支持的格式有 IP:HostPort:ContainerPort  | IP:  : ContainerPort |  HostPort: ContainerPort

(1)映射所有接口地址

#使用hostPort:containerPort格式,将本地的5000端口映射到容器的5000端口,可以执行以下命令:

docker run -d -p 5000:5000 nginx:1.14.1 /bin/bash

#此时默认会绑定本地所有接口上的所有地址。多次使用-p标记可以绑定多个端口。例如:

docker run -d -p 5000:5000 -p 8082:80 nginx:1.14.1 /bin/bash

(2)映射到指定地址的指定端口

#可以使用ip:hostPort:containerPort格式指定映射一个特定的地址,例如localhost的地址127.0.0.1

docker run -d -p 127.0.0.1:5000:5000 nginx:1.14.1 /bin/bash

(3)映射到指定地址的任意端口

#使用ip::containerPort绑定localhost的任意端口到容器的5000端口,本地主机会任意分配一个端口

docker run -d -p 127.0.1.1::5000 nginx:1.14.1 /bin/bash

(4)查看端口映射情况

docker port container_name/container_id

测试:

启动一个nginx容器,将宿主机80端口映射到容器的80端口

[[email protected] ~]# docker run -itd --name web_nginx -p 80:80 nginx:1.14.1 bash
1b0e2e79f8b4cec81fcf4b360288aab83e39ac670d5f81950ddb168169987fb7

进入容器,开启nginx服务,写入一个测试语句到默认的index文件中,并测试访问

[[email protected] ~]# docker exec -it web_nginx bash

[email protected]:/# /etc/init.d/nginx start 

[email protected]:/# echo " test is to docker 80 port " > /usr/share/nginx/html/index.html

[[email protected] ~]# curl http://139.159.143.74/
test is to docker 80 port

2、容器的互联

容器的互联是一种让多个容器中的应用进行快速交互的方式,它会在源和接收容器之间创建连接关系,接收容器可以通过容器名快速访问到源容器,而不用指定具体的IP地址。

(1)自定义容器名称

连接系统依据容器的名称来执行。因此需要自定义一个好记的容器名。使用–name标记可以为容器自定义命名:

docker run -d --name web_nginx -p 80:80 nginx:1.14.1 bash

(2)容器互联

使用–link 参数可以让容器直接安全的交互

 docker run -d --name db training/postgres

创建一个新的web容器,并将它连接到db容器

docker run -itd -P --name web --link db:db centos:7 /bin/bash

#查看Link信息
[[email protected] ~]# docker inspect -f "{{ .HostConfig.Links }}" web
[/db:/web/db]

[[email protected] ~]# docker exec -it web /bin/bash

#ping一下看是否能连通:

bash-4.2# ping db
PING db (172.17.0.3) 56(84) bytes of data.
64 bytes from db (172.17.0.3): icmp_seq=1 ttl=64 time=0.085 ms
64 bytes from db (172.17.0.3): icmp_seq=2 ttl=64 time=0.058 ms
64 bytes from db (172.17.0.3): icmp_seq=3 ttl=64 time=0.057 ms

用户可以连接多个容器到db容器上。

 

赞(4) 打赏
未经允许不得转载:Anonym0x1 » Docker端口映射与容器互联

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏