Docker網路揭秘:link容器互聯的優勢與侷限性

一.系統環境

伺服器版本 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.4PING 172.17.0.4 (172.17.0.4) 56(84) bytes of data.64 bytes from 172.17.0.4: icmp_seq=1 ttl=64time=0.168 ms64 bytes from 172.17.0.4: icmp_seq=2 ttl=64time=0.064 ms64 bytes from 172.17.0.4: icmp_seq=3 ttl=64time=0.063 ms64 bytes from 172.17.0.4: icmp_seq=4 ttl=64time=0.185 ms^C--- 172.17.0.4 ping statistics ---4 packets transmitted, 4 received, 0% packet loss, time2999msrtt 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 mysqlPING mysql (172.17.0.4) 56(84) bytes of data.64 bytes frommysql (172.17.0.4): icmp_seq=1 ttl=64 time=0.099 ms64bytes frommysql (172.17.0.4): icmp_seq=2 ttl=64 time=0.086 ms64bytes frommysql (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 1999msrtt 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 mysqlPING mysql (172.17.0.4) 56(84) bytes of data.64 bytes frommysql (172.17.0.4): icmp_seq=1 ttl=64 time=0.108 ms64bytes frommysql (172.17.0.4): icmp_seq=2 ttl=64 time=0.107 ms64bytes frommysql (172.17.0.4): icmp_seq=3 ttl=64 time=0.064 ms64bytes frommysql (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 2999msrtt min/avg/max/mdev = 0.064/0.089/0.108/0.021 ms#沒有MySQL客戶端[root@0eea8b40d874 /]# mysql -uroot -p123456 -h 172.17.0.4bash: mysql: command not found#安裝MySQL客戶端,mariadb客戶端和MySQL客戶端通用[root@0eea8b40d874 /]# yum -y install mariadbLoaded 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.4Welcome to the MariaDB monitor. Commands endwith ; or \g.Your MySQL connection id is 3Server 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'toclear the currentinput statement.MySQL [(none)]> showdatabases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || sys |+--------------------+4 rows in set (0.00 sec)MySQL [(none)]> exitBye[root@0eea8b40d874 /]# [root@0eea8b40d874 /]# exitexit[root@k8smaster ~]#


致力於一條龍式的為您解決問題
連結:https://www.cnblogs.com/renshengdezheli/p/16640281.html
                                                              (版權歸原作者所有,侵刪)

文末福利

即將步入2025年,不少小夥伴在考慮來年的工作方向。

僅目前來說,傳統運維衝擊年薪30W+的轉型方向就是SRE&DevOps崗位。

為了幫助大家早日擺脫繁瑣的基層運維工作,給大家整理了一套【2024最新運維資料高階運維工程師必備技能資料包(文末一鍵領取),內容有多詳實豐富看下圖!
共有 20 個模組
1.38張最全工程師技能圖譜
2.面試大禮包
3.Linux書籍
4.go書籍
······
6.自動化運維工具
18.訊息佇列合集
 以上所有資料獲取請掃碼
識別上方二維碼
備註:2024最新運維資料
100%免費領取
(是掃碼領取,不是在公眾號後臺回覆,別看錯了哦)


相關文章