Docker容器间的link和端口映射

docker间常常需要互联或者说通信,比如后台程序访问数据库容器,一般是需要ip+端口的形式,然而ip是经常会变化的,docker中采用link来为容器起个名字,以后访问只要名字+端口就行了,这样减少了ip访问下,ip常发生变化而导致的问题

操作概述,在创建第二个容器时,将第二个容器lick到第一个容器中,这样第一个容器访问第二个容器时利用名字就能访问

1.在第二个容器创建时添加一个link,如下面在创建了第一个容器test1之后创建第二个容器时:

docker run -d --name test2--link test1 busybox /bin/sh -c "while true;do sleep 3600 ;done"

2.进入第二个容器内部

docker exec -it test2 /bin/sh

输入ping test1----->发现是可通的

但注意进入test1 ping test2是不行的,原因在于link 具有方向性,即左边的可以ping 右面的名字

------------------------如何查看网络连接方式----------------------------

docker network ls

如何创建网络?

docker network create -d bridge my-bridge

-d 后面第一个bridge是网络的连接方式,第二个my-bridge是自己起的网络的名字

如何创建镜像同时连上主容器的某个网络上?

在镜像创建时指定network 的name ,可以通过docker network ls查看到所有的网络,如下面实例

docker run -d --name test3 --network my-bridge busybox /bin/sh -c "while true ;do sleep 3600;done"

如何查看是否连上了呢?

docker network inspect+ 网络的名字

如何手动将网络和容器连接呢?

docker network connect my-bridage test2

由于link 的单方向性,如何是相互方向呢?

通过将test2和test3同时连上自己的创建的网络(注意是自己创建的网络,不是系统自己默认的网络),这样双方都可以通过名字互ping上

实际生产环境中很少使用link!!!!

--------------------------------------------端口映射-----------------------------------------

首先明白为什么需要端口映射?

当我们创建nginx镜像时,并且启动nginx时,我们只能在容器内部区访问nginx的网址

所有为了容器之外能访问,所有需要暴露端口,也就需要了将容器内部的端口映射出去

(注意默认在docker机器上是能访问的,尝试的方式如下)

首先查看镜像的ip地址

docker network connect bridge(因为创建的镜像默认是连上bridge),如下面ipv4显示了镜像的ip

172.17.0.2


在docker机器上ping 172.17.0.2--->ping通,表示地址可以访问

在docker机器上telnet 172.17.0.2  80--->显示connected,表示端口也是可以访问的

在docker机器上curl http://172.17.0.2 ---->显示了nginx html界面

地址转发结构图:




你可能感兴趣的:(Docker,玩转docker)