docker --link容器互联
一.系统环境
| 服务器版本 | docker软件版本 | CPU架构 |
|---|---|---|
| CentOS Linux release 7.4.1708 (Core) | Docker version 20.10.12 | x86_64 |
二.docker容器互联概述
2.1 docker容器互联的三种方式
同一个宿主机上的多个docker容器之间如果想进行通信有三种方式:
- 通过使用容器的ip地址来通信【这样会导致ip地址的硬编码,不方便迁移,并且容器重启后ip地址会改变,除非使用固定的ip】
- 通过宿主机的ip加上容器暴露出的端口号来通信【这样的通信方式比较单一,只能依靠监听在暴露出的端口的进程来进行有限的通信】
- 通过docker的link机制可以通过一个name来和另一个容器通信,link机制方便了容器去发现其它的容器并且可以安全的传递一些连接信息给其它的容器。
2.2 docker --link使用注意事项
使用docker --link需要注意以下几点:
- 使用link选项建立的容器所链接的主机需要在运行状态
- 使用link选项建立的容器运行时需要所链接的容器也必须是运行状态
- 使用link选项链接的主机ip不需要固定,因为每次新建容器都会检查所链接容器的ip,在/etc/hosts里生成新的alias 名称对应的ip
2.3 docker --link原理
docker --link 使用了link机制后,可以通过指定的名字来和目标容器通信,这其实是通过给/etc/hosts中加入名称和IP的解析关系来实现的。
三.docker容器互联
3.1 通过容器IP地址进行通信
创建一个MySQL容器
[root@k8smaster ~]# docker run -dit --restart=always --name=mysql5 -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 hub.c.163.com/library/mysql:latest
03982d14608971f6af6783ad0eb6611516c8b19e449dc05e899a802cabfe99f0
查看MySQL容器IP
[root@k8smaster ~]# docker inspect mysql5 | grep -i ipaddr
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.4",
"IPAddress": "172.17.0.4",
创建一个centos容器,并测试容器的连通性
#ping MySQL容器IP,可以看到成功ping通
[root@k8smaster ~]# docker run -it --restart=always --name=centos7 hub.c.163.com/library/centos:latest ping 172.17.0.4
PING 172.17.0.4 (172.17.0.4) 56(84) bytes of data.
64 bytes from 172.17.0.4: icmp_seq=1 ttl=64 time=0.168 ms
64 bytes from 172.17.0.4: icmp_seq=2 ttl=64 time=0.064 ms
64 bytes from 172.17.0.4: icmp_seq=3 ttl=64 time=0.063 ms
64 bytes from 172.17.0.4: icmp_seq=4 ttl=64 time=0.185 ms
^C
--- 172.17.0.4 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2999ms
rtt min/avg/max/mdev = 0.063/0.120/0.185/0.056 ms
3.2 通过--link 参数进行通信
注意:docker 默认是允许容器互联互通的,可以通过-icc=false 关闭互通。一旦关闭了互通,只能通过-link name:alias 命令连接指定容器
创建centos容器,使用--link mysql5:mysql 链接mysql5容器,并给mysql5容器起别名为mysql,直接ping mysql,可以看到成功ping通
[root@k8smaster ~]# docker run -it --restart=always --name=c7 --link mysql5:mysql hub.c.163.com/library/centos:latest ping mysql
PING mysql (172.17.0.4) 56(84) bytes of data.
64 bytes from mysql (172.17.0.4): icmp_seq=1 ttl=64 time=0.099 ms
64 bytes from mysql (172.17.0.4): icmp_seq=2 ttl=64 time=0.086 ms
64 bytes from mysql (172.17.0.4): icmp_seq=3 ttl=64 time=0.126 ms
^C
--- mysql ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.086/0.103/0.126/0.020 ms
进入容器ping mysql
[root@k8smaster ~]# docker exec -it c7 /bin/bash
[root@0eea8b40d874 /]# ping mysql
PING mysql (172.17.0.4) 56(84) bytes of data.
64 bytes from mysql (172.17.0.4): icmp_seq=1 ttl=64 time=0.108 ms
64 bytes from mysql (172.17.0.4): icmp_seq=2 ttl=64 time=0.107 ms
64 bytes from mysql (172.17.0.4): icmp_seq=3 ttl=64 time=0.064 ms
64 bytes from mysql (172.17.0.4): icmp_seq=4 ttl=64 time=0.080 ms
^C
--- mysql ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2999ms
rtt min/avg/max/mdev = 0.064/0.089/0.108/0.021 ms
#没有MySQL客户端
[root@0eea8b40d874 /]# mysql -uroot -p123456 -h 172.17.0.4
bash: mysql: command not found
#安装MySQL客户端,mariadb客户端和MySQL客户端通用
[root@0eea8b40d874 /]# yum -y install mariadb
Loaded plugins: fastestmirror, ovl
.....
Installed:
mariadb.x86_64 1:5.5.68-1.el7
......
Complete!
在centos7容器里连接mysql
[root@0eea8b40d874 /]# mysql -uroot -p123456 -h 172.17.0.4
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.18 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
MySQL [(none)]> exit
Bye
[root@0eea8b40d874 /]#
[root@0eea8b40d874 /]# exit
exit
[root@k8smaster ~]#
docker --link容器互联的更多相关文章
- docker compose容器互联
使用docker-compose编排容器时,如容器之间需要互相通信,使用本地连接,需要使用容器名来代替localhost "connection": "postgresq ...
- docker link 过时不再用了?那容器互联、服务发现怎么办?
在 1-2 年前,Docker 所有容器都连接于默认的桥接网络上,也就是很多老文章鼓捣的 docker0 桥接网卡.因此实际上默认情况下所有容器都是可以互联的,没有隔离,当然这样安全性不好.而服务发现 ...
- docker容器互联
link方式 http://blog.csdn.net/halcyonbaby/article/details/42112325 通过link方式创建容器,然后我们可以使用被link容器的别名进行访问 ...
- Docker - 容器互联
容器互联 通过docker run命令的--link参数可以让容器之间通过连接(linking)系统进行交互. 参数格式:--link name:alias ,name是要链接的容器名称, alias ...
- Docker入门之六端口映射与容器互联
一.端口映射 在之前的博客搭建私有仓库时用到这样一句:docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry来r ...
- 8天入门docker系列 —— 第五天 使用aspnetcore小案例熟悉容器互联和docker-compose一键部署
这一篇继续完善webnotebook,如果你读过上一篇的内容,你应该知道怎么去挂载webnotebook日志和容器的远程访问,但是这些还远不够,webnotebook 总要和一些数据库打交道吧,比如说 ...
- Docker基础-端口映射与容器互联
1.端口映射实现访问容器 1.从外部访问容器应用 在启动容器的时候,如果不指定对应的参数,在容器外部是无法通过网络来访问容器内部的网络应用和服务的. 当容器中运行一些网络应用,要让外部访问这些应用时, ...
- Docker实战(五)之端口映射与容器互联
除了网络访问外,Docker还提供了两个很方便的功能来满足服务访问的基本需求:一个是允许映射容器内应用的服务端口到本地宿主主机;另一个是互联机制实现多个容器间通过容器名来快速访问. 1.端口映射实现访 ...
- docker——端口映射与容器互联
在生产环境中,单个服务往往是独立的,但是服务与服务之间往往是相互依赖的,这样对于容器来说,容器之间就需要相互访问.除了网络访问之外,docker还提供了另外两种方式来满足服务的访问. 一:允许映射容器 ...
- Docker 容器的网络连接 & 容器互联
1. Docker 容器网络基础架构 Docker0 ifconfig查看到的 docker0 是linux的虚拟网桥(OSI数据链路层) docker0 地址划分: 172.17.42.1 255. ...
随机推荐
- 驾驭数据的能力,如同使用ChatGPT一样,是现代职场人的必修课
现代职场所比拼的除了聪明才智.过往经验之外,很多软性技能也尤为重要. 现在已经不是像网络游戏开局拿着一根小木棍打天下的时代了,这将是一场武装到牙齿的较量,对于各类"装备"的驾驭能力 ...
- 从模型到部署,教你如何用Python构建机器学习API服务
本文分享自华为云社区<Python构建机器学习API服务从模型到部署的完整指南>,作者: 柠檬味拥抱. 在当今数据驱动的世界中,机器学习模型在解决各种问题中扮演着重要角色.然而,将这些模型 ...
- 【译】新的 MSBuild 编辑体验
MSBuild 是 .NET 开发体验的基本组成部分,但它对新手和有经验的开发人员都具有挑战性.为了帮助开发人员更好地理解他们的项目文件,并访问需要直接编辑项目文件的高级功能,我们发布了一个实验性的 ...
- Velero系列文章(五):基于 Velero 的 Kubernetes 集群备份容灾生产最佳实践
考量维度 基于CSI 快照 基于Restic 文件复制 应用性能影响 低,CSI 接口调用存储系统快照 取决于数据量,占用额外资源 数据可用性 依赖于存储系统 对象存储和生产环境隔离,独立可用性,支持 ...
- 批处理及有状态等应用类型在 K8S 上应该如何配置?
众所周知, Kubernetes(K8S)更适合运行无状态应用, 但是除了无状态应用. 我们还会有很多其他应用类型, 如: 有状态应用, 批处理, 监控代理(每台主机上都得跑), 更复杂的应用(如:h ...
- 抓包整理————tcp 传输数据的基础概念[十一]
前言 简单介绍一下tcp 数据传输. 正文 tcp 数据传输是怎么样子的呢? 比如我们在代码中写好了,connection 去连接. 然后我们用 write 去读取数据,这个时候呢,到底我们的操作系统 ...
- 从零开始写 Docker(十一)---实现 mydocker exec 进入容器内部
本文为从零开始写 Docker 系列第十一篇,实现类似 docker exec 的功能,使得我们能够进入到指定容器内部. 完整代码见:https://github.com/lixd/mydocker ...
- 鸿蒙HarmonyOS实战-ArkUI动画(弹簧曲线动画)
前言 弹簧曲线动画是一种模拟弹簧运动的动画效果,通过改变弹簧的拉伸或压缩来表现不同的运动状态.以下是制作弹簧曲线动画的步骤: 创建一个弹簧的模型,可以使用圆形或者曲线来代表弹簧的形状. 将弹簧固定在一 ...
- HMS数据库设置和优化
简介:Hive Metastore (HMS) 是一种服务,用于在后端 RDBMS(例如 MySQL 或 PostgreSQL)中存储与 Apache Hive 和其他服务相关的元数据.本文主要分享H ...
- 自己动手从0开始实现一个分布式RPC框架
简介: 如果一个程序员能清楚的了解RPC框架所具备的要素,掌握RPC框架中涉及的服务注册发现.负载均衡.序列化协议.RPC通信协议.Socket通信.异步调用.熔断降级等技术,可以全方位的提升基本素质 ...