首页 > 其他分享 >docker --link容器互联

docker --link容器互联

时间:2022-08-30 17:57:28浏览次数:72  
标签:容器 -- 0.4 link 172.17 mysql 64 docker

目录

一.系统环境

服务器版本 docker软件版本 CPU架构
CentOS Linux release 7.4.1708 (Core) Docker version 20.10.12 x86_64

二.docker容器互联概述

2.1 docker容器互联的三种方式

同一个宿主机上的多个docker容器之间如果想进行通信有三种方式:

  1. 通过使用容器的ip地址来通信【这样会导致ip地址的硬编码,不方便迁移,并且容器重启后ip地址会改变,除非使用固定的ip】
  2. 通过宿主机的ip加上容器暴露出的端口号来通信【这样的通信方式比较单一,只能依靠监听在暴露出的端口的进程来进行有限的通信】
  3. 通过docker的link机制可以通过一个name来和另一个容器通信,link机制方便了容器去发现其它的容器并且可以安全的传递一些连接信息给其它的容器。

2.2 docker --link使用注意事项

使用docker --link需要注意以下几点:

  1. 使用link选项建立的容器所链接的主机需要在运行状态
  2. 使用link选项建立的容器运行时需要所链接的容器也必须是运行状态
  3. 使用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

注意: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 ~]# 

标签:容器,--,0.4,link,172.17,mysql,64,docker
From: https://www.cnblogs.com/renshengdezheli/p/16640281.html

相关文章

  • 表的连接
    innerjoin(等值连接)只返回两个表中联结字段相等的行leftjoin(左联接)返回包括左表中的所有记录和右表中联结字段相等的记录rightjoin(右联接)返回包括右表中的所......
  • Redis基本使用
    /***@Author:KongXiao*@Date:2022/8/30-14:01*@Description:*www.redis.net.cn中文网站*Redis字符串类型*SETkeyvalue*GETkey......
  • PAT Advanced 1030 Travel Plan(30)
    题目描述:Atraveler'smapgivesthedistancesbetweencitiesalongthehighways,togetherwiththecostofeachhighway.Nowyouaresupposedtowriteaprogra......
  • "errMsg": "uploadFile:fail undefined" 手机端上传头像提示uploadFile未定义
    <template> <view> <viewstyle="display:flex;"> <viewclass="form-left"> 照片 </view> <viewstyle="margin-left:6px;"> <view......
  • Element UI el-select 从远端加载数据
    最近做项目用到了ElementUI的el-select组件,我的需求是想要从远端服务器直接加载options,加载的时候有个loading,但是ElementUI文档只给出了从远端搜索的案例,用起来不......
  • Java 接口测试利器 REST-assured 快速入门
    ⬇️点击“下方链接”,提升测试核心竞争力!>>更多技术文章分享和免费资料领取开源简约的接口测试DSL;支持XML、JSON的结构化解析;支持Xpath、JsonPath、gpath等多种......
  • innobackupex安装、使用、及踩过的坑
    优点:不暂停服务器创建Innodb热备份为mysql做增量的备份在mysql服务器之间做在线表迁移使创建mysqlreplication更加容易备份mysql但不增加服务器的负载 安装:xtraba......
  • MX550如何?说些你不知道的事情
    MX550如何?说些你不知道的事情迅工​大家有问题可以留言和发信息哈,记得加关注哦​关注 80人赞同了该文章MX550好在哪里?是不是来个独显更好呢......
  • python中uuid1、uuid3、uuid4和uuid5的区别
    UUID是通用唯一识别码(UniversallyUniqueIdentifier)的缩写,UUID是一个128比特的数值,这个数值可以通过一定的算法计算出来。为了提高效率,常用的UUID可缩短至16位。UUID用......
  • 寻找道路
    P2296[NOIP2014提高组]寻找道路-洛谷|计算机科学教育新生态(luogu.com.cn)建反图找到终点能够到达的所有点再把不符合条件二的点直接连到的点取消标记(因为在取......