Docker网络---容器互联

这篇具有很好参考价值的文章主要介绍了Docker网络---容器互联。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

虽然每个docker容器之间都能通过ip来进行互联,但当容器重新启动,ip就会被重新分配给重新启动的容器,这时同个容器由于重启导致ip不一样了,这时就会导致开发和运维的困难程度大大增加,这时候就要考虑能不能不通过ip互联,而是通过容器的名称或id来实现容器的互联呢?这样的话即使docker容器重启了,我们也能通过固定的容器名称来实现容器互联,而不再是通过变动的ip来实现容器互联。

1、Docker网络基础结构及原理

每启动一个docker容器,docker就会给每个docker容器分配一个ip(通过子网掩码把主机的ip划分成多个子网,把多个子网分配给多个docker容器,所以所有容器和主机都处于同一个网段下),docker安装后就会有一个名为docker0的网桥,docker0的默认网络模式是(bridge)桥接模式,docker容器之间的连接都通过Linux的虚拟网络技术---虚拟网线(veth-pair)来进行连接的,当容器停止或删除,对应的虚拟网线就会被收回。

容器互联,docker,docker,容器,运维

2、使用参数--link实现docker容器互联(注意!!!docker容器之间能通过ip来进行互联,这里的容器互联是指通过容器id或容器名来进行容器间互联

(1)普通的docker容器之间使用容器名称互ping,结果是ping不通的

操作过程图:

容器互联,docker,docker,容器,运维

(2)使用--link参数,让centos03连接centos2

例:

#选项及解释
--itd表示容器后台启动
-P表示随机指定端口
--name="name"参数用于给容器取名字 ,用来区分容器
--link表示让centos03链接到centos02

docker run -itd -P --name centos03 --link centos02 centos:7 /bin/bash

让容器centos03 ping centos02能ping通

操作过程图:

容器互联,docker,docker,容器,运维

反过来让容器centos02 ping centos03结果发现不能ping通

操作过程图:

容器互联,docker,docker,容器,运维

使用以下命令查看容器的元数据(容器的所有信息)li

docker inspect 容器id或容器名称

例:

docker inspect centos03

使用上述命令后可以在centos03的元数据里查看到关于link的信息并说明了容器centos02和centos03之间存在网络下的关联关系

容器互联,docker,docker,容器,运维

(3)--link的原理

使用下面命令查看容器的hosts文件

docker exec -it 容器id或容器名称 cat /etc/hosts

例:

docker exec -it centos03 cat /etc/hosts

由下图可知--link能实现容器间通过容器id或容器名称来进行互联的原因是--link通过改变hosts文件来实现容器ip和容器名称、容器id的映射,从而使centos03容器直接ping centos02的容器名时能通过hosts文件映射的方式,直接ping通centos02容器

效果图:

容器互联,docker,docker,容器,运维

从上述操作得知使用参数--link虽然能实现容器间通过容器id或名称进行互联,但还是有很大的局限性,所以需要使用接下来的自定义网络来实现容器间的互联

3、自定义Docker网络

(1)Docker的网络模式

#桥接(容器的默认网络模式,不支持通过容器id或容器名称来进行容器互联,虽然能通过使用--link来进行容器互联,但通过--link来实现容器互联不方便)
bridge

#不配置网络
none

#和宿主机共享网络
host

#容器网络互联(局限性很大,使用得少)
container 

(2)指定网络模式来启动容器

例:

而通过--net bridge指定容器的网络模式来启动的容器,该容器的docker0的网络模式就是bridge模式

#选项及解释
--itd表示容器后台启动
-P表示随机指定端口
--name="name"参数用于给容器取名字 ,用来区分容器
--net表示使用指定的网络来启动容器

docker run -d -P --name centos01 --net bridge centos:7

效果图: 

容器互联,docker,docker,容器,运维


注意:因为bridge为容器的默认网络模式,所以平常启动容器不指定网络模式时,容器的网络模式会默认使用bridge模式,所以以下两条启动容器的命令是等价的

docker run -d -P --name centos01 centos:7
docker run -d -P --name centos01 --net bridge centos:7

(3)使用以下命令自定义Docker网络

#选项及解释
--driver表示指定自定义网络的网络模式(bridge表示网络模式是桥接模式)
--subnet表示配置子网(/16是子网掩码中网络地址位数(0-32),网络地址位数是16的子网掩码为255.255.0.0,通过子网掩码能配置出65025(255×255)个ip地址)
--gateway表示设置网关
mynet表示该自定义网络的名称

docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

效果图: 

容器互联,docker,docker,容器,运维

(4)使用以下命令查看docker的所有网络 

docker network ls

效果图: 

容器互联,docker,docker,容器,运维

(5)使用以下命令查看刚刚创建的网络的元数据

docker network inspect 自定义的网络名称

例:

docker network inspect mynet

效果图: 

 容器互联,docker,docker,容器,运维

(6)用创建的自定义网络去创建新的docker容器并让容器通过容器名来互ping,发现两容器之间能互相ping通

例:

#选项及解释
--itd表示容器后台启动
-P表示随机指定端口
--name="name"参数用于给容器取名字 ,用来区分容器
--net表示使用指定的网络来启动容器

docker run -itd -P --name centos-mynet-01 --net mynet centos:7 /bin/bash
docker run -itd -P --name centos-mynet-02 --net mynet centos:7 /bin/bash

操作过程图: 

容器互联,docker,docker,容器,运维

(7)再次使用以下命令查看刚刚创建的网络的元数据,发现名为mynet的自定义网络下多出两个容器

docker network inspect 自定义的网络名称

例:

docker network inspect mynet

效果图: 

容器互联,docker,docker,容器,运维

4、网络连通

在实际开发里我们可能会创建不同的集群,例如redis集群和mysql集群,而为了集群的安全和健康的,我们创建集群的时候给集群分配的网段是不同的,但这时候我们希望两个不在同一个网段下的集群间能互相连通,所以需要用到网络连通。

(1)正常情况下两个不同网段之间的容器不能互相ping通,如下图,网段为172.17的容器和网段为192.168的容器之间不能互相ping通

操作过程图:

容器互联,docker,docker,容器,运维

(2)使用以下命令连通不在同一个网段下的docker容器

docker network connect 网络名称 容器名称

例:

docker network connect mynet centos01

效果图:

容器互联,docker,docker,容器,运维

(3)再次通过容器名称来互相ping,发现能互相ping通

操作过程图:

 容器互联,docker,docker,容器,运维

(4)使用以下命令查看名为mynet的网络的元数据,发现名为mynet的自定义网络下多出一个名为centos01的容器,也就是说把centos01容器放到了mynet网络下,所以不同网段下能互相连通

 容器互联,docker,docker,容器,运维

创作不易,如果这篇文章对你有帮助,希望能点个赞帮助文章的推广,如果文章有错漏,希望各位能批评指正,谢谢大家。文章来源地址https://www.toymoban.com/news/detail-597639.html

到了这里,关于Docker网络---容器互联的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker的数据卷、数据卷容器,容器互联

    数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。数据卷的使用类似于Linux下对目录进行的mount操作。 想要将容器中的数据持久化,

    2024年02月16日
    浏览(24)
  • Docker 的数据管理、容器互联、镜像创建

    目录 一、数据管理 1.数据卷 2. 数据卷容器 二、容器互联(使用centos镜像) 三、Docker 镜像的创建 1.基于现有镜像创建 1.1首先启动一个镜像,在容器里修改 1.2将修改后的容器提交为新的镜像,需使用该容器的id号创建新镜像 2.基于本地模板创建 2.1下载模板文件生成镜像  2

    2024年02月16日
    浏览(50)
  • 【云原生】Docker的端口映射、数据卷、数据卷容器、容器互联

    目录 一、端口映射(相当于添加iptables的DANT) 二、数据卷创建(宿主机目录或文件挂载到容器中) 三、数据卷容器(多个容器通过同一个数据卷容器为基点,实现所有容器数据共享) 四、容器互联(可以通过容器名称或连接别名通信) 在启动容器的时候,如果不指定对应

    2024年01月25日
    浏览(37)
  • 【云原生】Docker的数据管理(数据卷、容器互联)

    目录 一、数据卷(容器与宿主机之间数据共享) 二、数据卷容器(容器与容器之间数据共享) 三、 容器互联(使用centos镜像) 总结 用户在使用Docker的过程中,往往需要能查看容器内应用产生的数据,或者需要把容器内的数据进行备份,甚至多个容器之间进行数据的共享,

    2024年02月11日
    浏览(41)
  • Docker的数据管理及端口映射与容器互联(使用centos镜像)

    目录 Docker数据管理 1.数据卷 2.数据卷容器 Docker端口映射 Docker容器互联 管理 Docker 容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器(DataVolumes Containers)。         数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数

    2024年02月12日
    浏览(45)
  • 第七次作业 运维高级 docker容器进级版

    1、使用mysql:5.6和 owncloud 镜像,构建一个个人网盘。 (1)拉取相应镜像 (2)运行mysql:5.6容器 (3)运行owncloud容器 (4)查看并验证 之后在浏览器中输入ipaddress:8080 2、安装搭建私有仓库 Harbor (1)下载好harbor和docker-compose (2)上传到Linux服务器 (3)复制docker-compose并修改权限 (4)解压harbor (

    2024年02月12日
    浏览(42)
  • 【运维知识大神篇】运维人必学的Docker教程1(Docker安装部署+Docker镜像管理+容器管理常用命令+搭建docker的本地yum源+windows系统安装docker环境)

    本篇文章开始给大家介绍Docker,这个是我非常喜欢的一个服务,介绍给大家,希望大家也能喜欢! 目录 何为容器 Docker环境安装部署 一、yum安装(CentOS7.9) 二、rpm包安装(CentOS) 三、卸载docker环境 四、安装指定的docker版本 五、Ubuntu安装docker环境 六、使用deb安装docker 七、

    2024年01月18日
    浏览(78)
  • Docker 数据管理[文件互访] 端口映射[暴露端口提供服务] 容器互联[指定容器名防止IP变动]

    管理 Docker 容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器(DataVolumes Containers)。 数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容

    2024年02月15日
    浏览(38)
  • K8S自动化运维容器化(Docker)集群程序

    1.什么是K8S K8S全程为Kubernetes,由于K到S直接有8个字母简称为K8S。 版本:目前一般是1.18~1.2.0,后续可能会到1.24-1.26,1.24版本后丢弃了docker(如需要使用需要第三方插件配合),目前最新版本是1.27 官网:https://kubernetes.io GitHub:GitHub - kubernetes/kubernetes: Production-Grade Container Schedul

    2024年02月10日
    浏览(44)
  • K8S:K8S自动化运维容器Docker集群

    (1)K8S全程为Kubernetes,由于K到S直接有8个字母简称为K8S。 (2)版本:目前一般是1.18~1.2.0,后续可能会到1.24-1.26,1.24版本后丢弃了docker(如需要使用需要第三方插件配合),目前最新版本是1.27 (3)官网:https://kubernetes.io GitHub:GitHub - kubernetes/kubernetes: Production-Grade Container S

    2024年02月10日
    浏览(58)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包