Docker容器互访三种方式
我们都知道docker容器之间是互相隔离的,不能互相访问,但如果有些依赖关系的服务要怎么办呢。下面介绍三种方法解决容器互访问题。
方式一、虚拟ip访问
安装docker时,docker会默认创建一个内部的桥接网络docker0,每创建一个容器分配一个虚拟网卡,容器之间可以根据ip互相访问。
- [root@33fcf82ab4dd /]# [root@CentOS ~]# ifconfig
- ......
- docker0: flags=<UP,BROADCAST,RUNNING,MULTICAST> mtu
- inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
- inet6 fe80:::35ff:feac:66d8 prefixlen scopeid 0x20<link>
- ether :::ac::d8 txqueuelen (Ethernet)
- RX packets bytes (260.2 KiB)
- RX errors dropped overruns frame
- TX packets bytes (32.3 MiB)
- TX errors dropped overruns carrier collisions
- ......
运行一个centos镜像, 查看ip地址得到:172.17.0.7
- [root@CentOS ~]# docker run -it --name centos- docker.io/centos:latest
- [root@6d214ff8d70a /]# ifconfig
- eth0: flags=<UP,BROADCAST,RUNNING,MULTICAST> mtu
- inet 172.17.0.7 netmask 255.255.0.0 broadcast 0.0.0.0
- inet6 fe80:::acff:fe11: prefixlen scopeid 0x20<link>
- ether ::ac::: txqueuelen (Ethernet)
- RX packets bytes (1.2 KiB)
- RX errors dropped overruns frame
- TX packets bytes (648.0 B)
- TX errors dropped overruns carrier collisions
以同样的命令再起一个容器,查看ip地址得到:172.17.0.8
- [root@CentOS ~]# docker run -it --name centos- docker.io/centos:latest
- [root@33fcf82ab4dd /]# ifconfig
- eth0: flags=<UP,BROADCAST,RUNNING,MULTICAST> mtu
- inet 172.17.0.8 netmask 255.255.0.0 broadcast 0.0.0.0
- inet6 fe80:::acff:fe11: prefixlen scopeid 0x20<link>
- ether ::ac::: txqueuelen (Ethernet)
- RX packets bytes (648.0 B)
- RX errors dropped overruns frame
- TX packets bytes (648.0 B)
- TX errors dropped overruns carrier collisions
容器内部ping测试结果如下:
- [root@33fcf82ab4dd /]# ping 172.17.0.7
- PING 172.17.0.7 (172.17.0.7) () bytes of data.
- bytes from 172.17.0.7: icmp_seq= ttl= time=0.205 ms
- bytes from 172.17.0.7: icmp_seq= ttl= time=0.119 ms
- bytes from 172.17.0.7: icmp_seq= ttl= time=0.118 ms
- bytes from 172.17.0.7: icmp_seq= ttl= time=0.101 ms
这种方式必须知道每个容器的ip,在实际使用中并不实用。
方式二、link
运行容器的时候加上参数link
运行第一个容器
- docker run -it --name centos- docker.io/centos:latest
运行第二个容器
- [root@CentOS ~]# docker run -it --name centos- --link centos-1:centos-1 docker.io/centos:latest
--link:参数中第一个centos-1是容器名,第二个centos-1是定义的容器别名(使用别名访问容器),为了方便使用,一般别名默认容器名。
测试结果如下:
- [root@e0841aa13c5b /]# ping centos-
- PING centos- (172.17.0.7) () bytes of data.
- bytes from centos- (172.17.0.7): icmp_seq= ttl= time=0.210 ms
- bytes from centos- (172.17.0.7): icmp_seq= ttl= time=0.116 ms
- bytes from centos- (172.17.0.7): icmp_seq= ttl= time=0.112 ms
- bytes from centos- (172.17.0.7): icmp_seq= ttl= time=0.114 ms
此方法对容器创建的顺序有要求,如果集群内部多个容器要互访,使用就不太方便。
方式三、创建bridge网络
1.安装好docker后,运行如下命令创建bridge网络:docker network create testnet
查询到新创建的bridge testnet。
2.运行容器连接到testnet网络。
使用方法:docker run -it --name <容器名> ---network <bridge> --network-alias <网络别名> <镜像名>
- [root@CentOS ~]# docker run -it --name centos-1 --network testnet --network-alias centos-1 docker.io/centos:latest
- [root@CentOS ~]# docker run -it --name centos-2 --network testnet --network-alias centos-2 docker.io/centos:latest
3.从一个容器ping另外一个容器,测试结果如下:
- [root@fafe2622f2af /]# ping centos-1
- PING centos-1 (172.20.0.2) 56(84) bytes of data.
- 64 bytes from centos-1.testnet (172.20.0.2): icmp_seq=1 ttl=64 time=0.158 ms
- 64 bytes from centos-1.testnet (172.20.0.2): icmp_seq=2 ttl=64 time=0.108 ms
- 64 bytes from centos-1.testnet (172.20.0.2): icmp_seq=3 ttl=64 time=0.112 ms
- 64 bytes from centos-1.testnet (172.20.0.2): icmp_seq=4 ttl=64 time=0.113 ms
4.若访问容器中服务,可以使用这用方式访问 <网络别名>:<服务端口号>
推荐使用这种方法,自定义网络,因为使用的是网络别名,可以不用顾虑ip是否变动,只要连接到docker内部bright网络即可互访。bridge也可以建立多个,隔离在不同的网段。
Docker容器互访三种方式的更多相关文章
- 进入Docker容器的4种方式
进入Docker容器的4种方式 在使用Docker创建了容器之后,大家比较关心的就是如何进入该容器了,其实进入Docker容器有好几多种方式,这里我们就讲一下常用的几种进入Docker容器的方法. 进 ...
- CentOS安装docker ce的三种方式
参考文章: CentOS安装docker ce的三种方式: 1.环境 CentOS Linux release 7.6.1810 (Core) 2.卸载旧版本 sudo yum remove dock ...
- 创建 Spring容器的三种方式
一.src路径下打包完在war包的classes层级下 1.Spring容器创建的三种方式 创建Bean容器之后创建对象: 其中第三种使用的是BeanFactory对象 2.spring通过配置文件用 ...
- STL传递比较函数进容器的三种方式
对于STL中的依靠比较排序的容器,均提供了一个模板参数来传递比较函数,默认的为std::less<>. 查阅Containers - C++ Reference可以看到典型的使用比较函数的 ...
- 容器间通信的三种方式 - 每天5分钟玩转 Docker 容器技术(35)
容器之间可通过 IP,Docker DNS Server 或 joined 容器三种方式通信. IP 通信 从上一节的例子可以得出这样一个结论:两个容器要能通信,必须要有属于同一个网络的网卡. 满足这 ...
- CentOS环境Docker安装教程(官方推荐的docker三种方式安装)
CentOS环境Docker安装教程(官方推荐的docker三种方式安装) 一.使用yum方式安装 1.安装依赖包 $ sudo yum install -y yum-utils device-map ...
- 【Spring】Spring之向 IOC 容器注入对象的三种方式
关于Spring的搭建可参见:浅析Spring框架的搭建.在测试之前还是应该先将环境配置好,将相关Jar包导进来.Spring创建的对象,默认情况下都是单例模式,除非通过scope指定. 向IOC容器 ...
- 三种方式创建bean对象在springIOC容器中初始化、销毁阶段要调用的自定义方法
1. 使用@Bean注解定义initMethod和destroyMethod 所谓initMethod和destroyMethod,是指在springIOC容器中,对于bean对象执行到初始化阶段和销 ...
- 【Java EE 学习 52】【Spring学习第四天】【Spring与JDBC】【JdbcTemplate创建的三种方式】【Spring事务管理】【事务中使用dbutils则回滚失败!!!??】
一.JDBC编程特点 静态代码+动态变量=JDBC编程. 静态代码:比如所有的数据库连接池 都实现了DataSource接口,都实现了Connection接口. 动态变量:用户名.密码.连接的数据库. ...
随机推荐
- redis学习-集合set常用命令
redis学习-集合set常用命令 1.sadd:添加一个元素到集合中(集合中的元素无序的并且唯一) 2.smembers:查看集合中所有的元素(上图事例) 3.srem:删除结合中指定的元素 4 ...
- 再探haproxy
一 设置haproxy输出log 1.1 调整配置文件 默认haproxy是不会输出log到文件的,这样很大程度在查询问题时会很不方便,haproxy是可以输出日志到文件的,配置文档类似于如下: ]# ...
- 为什么要使用CMake?
如果你曾经维护过软件包的构建和安装过程,你将对CMake感兴趣.CMake是软件项目的一个开源生成管理器,它允许开发人员以简单的可移植文本文件格式指定生成参数.然后,CMake 使用此文件为本机开发工 ...
- Ubuntu里Eclipse关联Jdk
Ubuntu里Eclipse关联Jdk 1.在Eclipse安装目录创建jre 文件. 2.ln -s jdk目录/bin bin 输入上述命令,之后eclipse即可打开.
- R_展示变量之间关系的图形
#绘制普通矩阵散点图 plot(dataframe) #绘制带有拟合直线,最佳拟合曲线和直方图的矩阵散点图 library(car) attach(dataframe) scatterplotMatr ...
- 04、SQL 查询当天,本月,本周的记录
SELECT * FROM 表 WHERE CONVERT(Nvarchar, dateandtime, 111) = CONVERT(Nvarchar, GETDATE(), 111) ORDE ...
- 【腾讯Bugly干货分享】Android 插件技术实战总结
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/1p5Y0f5XdVXN2EZYT0AM_A 前言 安 ...
- 包建强的培训课程(17):Java代码敏捷之道
第1讲 千言万语聊注释 按图索骥 奇葩注释“赏析” Git提交的学问 第2讲 RxJava:函数式编程 从一只猫的故事说起 背压 第3讲 代码瘦身 抽象相同逻辑的代码 查找相似代码 AOP一瞥 第4讲 ...
- 谈一款MOBA类游戏《码神联盟》的服务端架构设计与实现(更新优化思路)
注:本文仅用于在博客园学习分享,还在随着项目不断更新和完善中,多有不足,暂谢绝各平台或个人的转载和推广,感谢支持. 一.前言 <码神联盟>是一款为技术人做的开源情怀游戏,每一种编程语言都是 ...
- 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接
本文原作者:“水晶虾饺”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.引言 好多小白初次接触即时通讯(比如:IM或者消息推送应用)时,总是不 ...