Docker link实现容器互联的方式

目录
  • 1.1、容器间通过IP进行网络访问
  • 1.2、容器间通过容器名或容器id进行网络访问

1.1、容器间通过IP进行网络访问

新建两个容器tomcat01和tomcat02

docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat02 tomcat

使用 ifconfig 命令查看toncat01的网卡信息:

可以看到,tomcat01的IP地址为 172.17.0.2

再查看toncat02的网卡信息:

可以看到,tomcat02的IP地址为 172.17.03

测试容器tomcat01和tomcat02是否能ping通:

tomcat01 ping tomcat02:

tomcat02 ping tomcat01:

根据上面两张图所示,不管是tomcat01 ping tomcat02还是tomcat02 ping tomcat01都是可以ping通的。

注:如果容器内没有ifconfig命令和ping命令,依次执行以下命令:

apt-get update
apt install iputils-ping
apt install net-tools

1.2、容器间通过容器名或容器id进行网络访问

容器间如果想通过容器名进行网络连接,需要使用 docker run --link 来链接两个容器。

–link可以用来链接2个容器,使得源容器(被链接的容器)和接收容器(主动去链接的容器)之间可以互相通信,并且接收容器可以获取源容器的一些数据,如源容器的环境变量。

–link 的格式

--link <name or id>:alias

–link 添加到另一个容器的链接

name和id是源容器的name和id,alias是源容器在link下的别名。

–link 的使用实例

创建容器tomcat03,让tomcat03作为接收容器(主动去链接的容器),上面的tomcat01(别名t1)作为源容器(被链接的容器),两个容器进行链接:

docker run -d -P --name tomcat03 --link tomcat01:t1 tomcat

tomcat01 是上面启动的 7b94f50c43ea 容器的名字,这里作为源容器,t1 是该容器在link下的别名(alias),通俗易懂的讲,站在tomcat03容器的角度,tomcat01 和 t1 都是 7b94f50c43ea 容器的名字,并且作为容器的hostname,tomcat03 用这2个名字中的哪一个都可以访问到 7b94f50c43ea 容器并与之通信(docker通过DNS自动解析)。

进行链接测试:tomcat03 ping tomcat01

ping tomcat01

ping t1

两个都能ping通,可见,tomcat01 和 t1 都指向172.17.0.2。

但上面这种链接只是单向的,就是只能接收容器链接源容器,源容器不能链接到接收容器,也就是 tomcat03 链接上了 tomcat01,tomcat03能ping通tomcat01,tomcat01并没有链接上tomcat03,tomcat01ping不同tomcat03。但是不影响tomcat01 通过IP ping tomcat03 或者tomcat03 ping tomcat01。

–link 原理

查看 tomcat03 的 hosts 文件,操作系统规定,在进行DNS请求以前,先检查系自己的hosts文件中是否有这个域名和IP的映射关系。如果有,则直接访问这个IP地址指定的网络位置,如果没有,再向已知的DNS服务器提出域名解析请求。

docker exec -it tomcat03 cat /etc/hosts

在tomcat03的hosts配置文件中,可以看到映射了tomcat01的IP、容器名、别名和容器id,所有tomcat03可以通过指定的容器名和tomcat01进行通信。

–link 就是在接收容器(这里是名为tomcat003的容器)添加了一条关于tomcat01容器的名称解析。有了这个名称解析后就可以不使用ip来和源容器通信了,除此之外当源容器重启,docker会负责更新/etc/hosts文件,因此可以不用担心容器重启后IP地址发生了改变,解析无法生效的问题。

到此这篇关于Docker link实现容器互联的文章就介绍到这了,更多相关docker 容器互联内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Docker如何使用link建立容器之间的连接

    我们在使用Docker的时候,经常可能需要连接到其他的容器,比如:web服务需要连接数据库.按照往常的做法,需要先启动数据库的容器,映射出端口来,然后配置好客户端的容器,再去访问.其实针对这种场景,Docker提供了--link 参数来满足. 这里使用数据库服务器和客户端的例子来介绍下--link的用法. 一 创建容器 这里需要创建MySQL服务端和客户端的容器 MySQL 服务端的Dockerfile: FROM centos:centos6 MAINTAINER David "xx@xx.c

  • Docker使用Link在容器之间建立连接

    在使用Docker的时候我们会常常碰到这么一种应用,就是我需要两个或多个容器,其中某些容器需要使用另外一些容器提供的服务.比如这么一种情况:我们需要一个容器来提供mysql的数据库服务,而另外两个容器作为客户端来连接使用mysql数据库服务.下面我们就来看看Docker是怎样通过Link来实现这种功能的. 1. 这里我们首先创建两个容器image,一个用来模拟mysql数据库,另外一个使用mysql的client来模拟一些使用mysql服务的应用,这种应用可以是任何php,python,java

  • Docker link实现容器互联的方式

    目录 1.1.容器间通过IP进行网络访问 1.2.容器间通过容器名或容器id进行网络访问 1.1.容器间通过IP进行网络访问 新建两个容器tomcat01和tomcat02 docker run -d -P --name tomcat01 tomcat docker run -d -P --name tomcat02 tomcat 使用 ifconfig 命令查看toncat01的网卡信息: 可以看到,tomcat01的IP地址为 172.17.0.2 再查看toncat02的网卡信息: 可以看

  • docker --link容器互联的实现

    目录 容器互联 实验:tomcat连接mysql 创建启动mysql容器 创建启动tomcat容器--link连接mysql容器 –link可以通过容器名互相通信,容器间共享环境变量. –link主要用来解决两个容器通过ip地址连接时容器ip地址会变的问题. 容器互联 先创建启动mysql容器 docker run -dti --name db --restart=always -e MYSQL_ROOT_PASSWORD=redhat -e MYSQL_DATABASE=blog  mysql

  • 详解Docker 端口映射与容器互联

    1.端口映射实现访问容器 1.从外部访问容器应用 在启动容器的时候,如果不指定对应的参数,在容器外部是无法通过网络来访问容器内部的网络应用和服务的. 当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-p或-P参数来指定端口映射.当使用-P(大写P)标记时,Docker会随机映射一个端口到内部容器开放的网络端口(端口范围在Linux系统使用的端口之外,一般都过万): [root@docker ~]# docker run -d --name nginx_1 -P nginx:latest

  • Docker学习笔记之Weave实现跨主机容器互联

    Docker的原生网络支持非常有限,且没有跨主机的集群网络方案.目前实现Docker网络的开源方案有Weave.Kubernetes.Flannel.Pipework以及SocketPlane等,其中Weave被评价为目前最靠谱的,那么这里就对Weave的基本原理及使用方法做个总结. 简介 Weave是由Zett.io公司开发的,它能够创建一个虚拟网络,用于连接部署在多台主机上的Docker容器,这样容器就像被接入了同一个网络交换机,那些使用网络的应用程序不必去配置端口映射和链接等信息.外部设备

  • WIN10系统和Docker内部容器IP互通方式

    1.安装了Window版本的Docker之后,我们启动 Docker Quickstart Terminal ,我们会得到一个IP,我的为: 192.168.99.100 2.启动一个mysql镜像,并获取这个镜像的IP: 在开始的时候,从本机直接到172.17.0.2是网络不通的,但是我们本机能到 192.168.99.100,172.17.0.2到192.168.99.100也是通的,我们可以在本机配置一个到172.17.0.2通过192.168.99.100的路由: route add -

  • docke自定义网络之容器互联

    目录 前言 –link 自定义网络 提问 前言 在前几期我们介绍了 容器间的互联可以使用 –Link 参数进行设置,这样可以在容器内不只访问ip,也可以访问对应设置的 域名.先温习下.操作之前先清除所有的容器. –link # 清除所有容器 $root@VM-8-11-ubuntu:~# docker stop $(docker ps -aq) && docker rm $(docker ps -aq) 88f8f241ca30 765ed1889bfa $root@VM-8-11-ubu

  • Docker下Tomcat容器中使用Mysql的方法

    在这里我们使用Tomcat容器来运行war包,不过作为一个网站一个程序,如果需要用到数据库的,那么Tomcat容器中如何连接Mysql呢? 已经pull了tomcat和mysql镜像,可以使用docker的连接系统(–link)连接多个容器方式解决tomcat容器中使用mysql [root@izbp1b5k5bjps0dw8owk7tz ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat latest 2d084b1116

  • Docker Compose多容器部署的实现

    一.wordpress部署 这里先以wordpress的部署为例引出Docker Compose,wordpress的部署需要wordpress和mysql的镜像: (一)准备环境 1.拉取wordpress镜像 [root@docker-node1 /]# docker pull wordpress 2.拉取mysql镜像 [root@docker-node1 /]# docker pull mysql 3.镜像列表 [root@docker-node1 /]# docker image ls

  • Docker动态给容器Container暴露端口操作

    查看Container的IP地址 docker inspect <container name or id>| grep IPAddress 查看Container的映射的端口 docker port <container name or id> eg. docker port d8dac7399647 docker port hfq-jedi-zxf-eden 用iptables查看容器映射情况 iptables -t nat -nvL iptables -t nat -nvL

  • Docker与iptables及实现bridge方式网络隔离与通信操作

    Docker提供了bridge, host, overlay等多种网络.同一个Docker宿主机上同时存在多个不同类型的网络,位于不同网络中的容器,彼此之间是无法通信的. Docker容器的跨网络隔离与通信,是借助了iptables的机制. iptables的filter表中默认分为INPUT, FORWARD和OUTPUT共3个链. Docker在FORWARD链中(forward到自定义的链),还额外提供了自己的链,以实现bridge网络之间的隔离与通信. Docker的基本网络配置 当 D

随机推荐