docker-容器间通信
2023-06-13 09:15:42 时间
[root@ubuntu1804 ~]#ip a 1: lo: LOOPBACK,UP,LOWER_UP mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:34:df:91 brd ff:ff:ff:ff:ff:ff inet 10.0.0.100/24 brd 10.0.0.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe34:df91/64 scope link valid_lft forever preferred_lft forever 3: docker0: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc noqueue state UP group default link/ether 02:42:02:7f:a8:c6 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft forever inet6 fe80::42:2ff:fe7f:a8c6/64 scope link valid_lft forever preferred_lft forever 137: veth8ca6d43@if136: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc noqueue master docker0 state UP group default link/ether fa:96:37:77:a9:a9 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet6 fe80::f896:37ff:fe77:a9a9/64 scope link valid_lft forever preferred_lft forever 141: vethf599a47@if140: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc noqueue master docker0 state UP group default link/ether 96:e7:52:fe:67:54 brd ff:ff:ff:ff:ff:ff link-netnsid 1 inet6 fe80::94e7:52ff:fefe:6754/64 scope link valid_lft forever preferred_lft forever [root@ubuntu1804 ~]#docker run -it --rm alpine:3.11 sh / # ip a 1: lo: LOOPBACK,UP,LOWER_UP mtu 65536 qdisc noqueue state UNKNOWN qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 136: eth0@if137: BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN mtu 1500 qdisc noqueue state UP link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever / # ping 172.17.0.3 PING 172.17.0.3 (172.17.0.3): 56 data bytes 64 bytes from 172.17.0.3: seq=0 ttl=64 time=0.452 ms 64 bytes from 172.17.0.3: seq=1 ttl=64 time=0.190 ms --- 172.17.0.3 ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max = 0.190/0.321/0.452 ms / # ping 172.17.0.1 PING 172.17.0.1 (172.17.0.1): 56 data bytes 64 bytes from 172.17.0.1: seq=0 ttl=64 time=0.139 ms 64 bytes from 172.17.0.1: seq=1 ttl=64 time=0.183 ms --- 172.17.0.1 ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max = 0.139/0.161/0.183 ms
范例:在第二个宿主机上创建容器,跨宿主机的容器通信
[root@ubuntu1804 ~]#docker pull alpine Using default tag: latest latest: Pulling from library/alpine c9b1b535fdd9: Pull complete Digest: sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d Status: Downloaded newer image for alpine:latest docker.io/library/alpine:latest [root@ubuntu1804 ~]#docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cab76bbb3db2 alpine sh About a minute ago Up About a minute jolly_rosalind [root@ubuntu1804 ~]#ip a 1: lo: LOOPBACK,UP,LOWER_UP mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:6b:54:d3 brd ff:ff:ff:ff:ff:ff inet 10.0.0.101/24 brd 10.0.0.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe6b:54d3/64 scope link valid_lft forever preferred_lft forever 3: docker0: NO-CARRIER,BROADCAST,MULTICAST,UP mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:1d:73:8b:71 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft forever [root@ubuntu1804 ~]#docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@ubuntu1804 ~]#docker run -it --rm alpine sh / # ip a 1: lo: LOOPBACK,UP,LOWER_UP mtu 65536 qdisc noqueue state UNKNOWN qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 4: eth0@if5: BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN mtu 1500 qdisc noqueue state UP link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever / # ping -c 1 172.17.0.3 PING 172.17.0.3 (172.17.0.3): 56 data bytes --- 172.17.0.3 ping statistics --- 1 packets transmitted, 0 packets received, 100% packet loss4.2 容器名称互联
新建容器时,docker会给自动分配容器名称,容器ID和IP地址,导致容器名称,容器ID和IP不固定,那么如何区分不同的容器,实现和确定目标容器的通信呢?解决方案是给容器起个固定的名称,容器之间通过固定名称实现确定目标的通信
有两种固定名称:
容器名称的别名注意:两种方式都最少需要两个容器才能实现
通过容器名称互联 容器名称介绍即在同一个宿主机上的容器之间可以通过自定义的容器名称相互访问,比如:一个业务前端静态页面是使用nginx,动态页面使用的是tomcat,另外还需要负载均衡调度器,如:haproxy 对请求调度至nginx和tomcat的容器,由于容器在启动的时候其内部IP地址是DHCP 随机分配的,而给容器起个固定的名称,则是相对比较固定的,因此比较适用于此场景
容器名称实现docker run 创建容器,可使用 link选项实现容器名称的引用
--link list Add link to another container docker run --name 容器名称 先创建指定名称的容器 docker run --link 目标通信的容器ID或容器名称 再创建容器时引用上面容器的名称实战案例:使用容器名称进行容器间通信 先创建第一个指定容器名称的容器
[root@ubuntu1804 ~]#docker run -it --name server1 --rm alpine:3.11 sh / # cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.2 cdb5173003f5 / # ip a 1: lo: LOOPBACK,UP,LOWER_UP mtu 65536 qdisc noqueue state UNKNOWN qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 150: eth0@if151: BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN mtu 1500 qdisc noqueue state UP link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever / # ping 172.17.0.2 PING 172.17.0.2 (172.17.0.2): 56 data bytes 64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.038 ms --- 172.17.0.2 ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 0.038/0.038/0.038 ms / # ping server1 ping: bad address server1 / # ping cdb5173003f5 PING cdb5173003f5 (172.17.0.2): 56 data bytes 64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.040 ms 64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.128 ms --- cdb5173003f5 ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max = 0.040/0.084/0.128 ms / #
新建第二个容器时引用第一个容器的名称
会自动将第一个主机的名称加入/etc/hosts文件,从而可以利用第一个容器名称进行访问
[root@ubuntu1804 ~]#docker run -it --rm --name server2 --link server1 alpine:3.11 sh / # cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.2 server1 cdb5173003f5 172.17.0.3 7ca466320980 / # ping server1 PING server1 (172.17.0.2): 56 data bytes 64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.111 ms --- server1 ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 0.111/0.111/0.111 ms / # ping server2 ping: bad address server2 / # ping 7ca466320980 PING 7ca466320980 (172.17.0.3): 56 data bytes 64 bytes from 172.17.0.3: seq=0 ttl=64 time=0.116 ms 64 bytes from 172.17.0.3: seq=1 ttl=64 time=0.069 ms --- 7ca466320980 ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max = 0.069/0.092/0.116 ms / # ping cdb5173003f5 PING cdb5173003f5 (172.17.0.2): 56 data bytes 64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.072 ms 64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.184 ms --- cdb5173003f5 ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max = 0.072/0.128/0.184 ms [root@ubuntu1804 ~]#docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7ca466320980 alpine:3.11 "sh" 24 seconds ago Up 23 seconds server2 cdb5173003f5 alpine:3.11 "sh" 7 minutes ago Up 7 minutes server1
容器别名介绍
自定义的容器名称可能后期会发生变化,那么一旦名称发生变化,容器内程序之间也必须要随之发生变化,比如:程序通过固定的容器名称进行服务调用,但是容器名称发生变化之后再使用之前的名称肯定是无法成功调用,每次都进行更改的话又比较麻烦,因此可以使用自定义别名的方式解决,即容器名称可以随意更,只要不更改别名即可
容器别名实现命令格式:
docker run --name 容器名称 先创建指定名称的容器 docker run -d --name 容器名称 --link 目标容器名称 : 容器别名 #给上现创建的容器起别名,来创建新容器实战案例:使用容器别名
范例:创建第三个容器,引用前面创建的容器,并起别名
[root@ubuntu1804 ~]#docker run -it --rm --name server3 --link server1:server1-alias alpine:3.11 sh / # cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.2 server1-alias cdb5173003f5 server1 172.17.0.4 d9622c6831f7 / # ping server1 PING server1 (172.17.0.2): 56 data bytes 64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.101 ms --- server1 ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 0.101/0.101/0.101 ms / # ping server1-alias PING server1-alias (172.17.0.2): 56 data bytes 64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.073 ms --- server1-alias ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 0.073/0.073/0.073 ms
范例:创建第四个容器,引用前面创建的容器,并起多个别名
[root@ubuntu1804 ~]#docker run -it --rm --name server4 --link server1: server1-alias1 server1-alias2 alpine:3.11 sh / # cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.2 server1-alias1 server1-alias2 cdb5173003f5 server1 172.17.0.5 db3d2f084c05 / # ping server1 PING server1 (172.17.0.2): 56 data bytes 64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.107 ms --- server1 ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 0.107/0.107/0.107 ms / # ping server1-alias1 PING server1-alias1 (172.17.0.2): 56 data bytes 64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.126 ms --- server1-alias1 ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 0.126/0.126/0.126 ms / # ping server1-alias2 PING server1-alias2 (172.17.0.2): 56 data bytes 64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.124 ms --- server1-alias2 ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 0.124/0.124/0.124 ms / #
本文链接:http://www.yunweipai.com/34872.html
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/52676.html
DockerHaproxynginxTomcatUbuntu相关文章
- 【目标检测】Flask+Docker在服务器部署YOLOv5应用
- 容器化部署博客(2)—— docker-compose 部署 izone 博客
- Docker镜像,容器和仓库到底是什么?
- docker命令入门教程[通俗易懂]
- docker快速安装fastdfs服务springboot访问
- 大数据ELK Stack(二):Elasticsearch 集群之docker部署
- 【重识云原生】第六章容器6.1.6节—— Docker核心技术Chroot
- docker的常用命令汇总_Docker命令
- docker安装 - 在线&离线
- docker 离线安装及命令整理[通俗易懂]
- docker启动mysql容器失败_docker 进入容器
- 「Docker学习系列教程」10-Docker容器数据卷案例
- Docker删除容器命令(docker rm)
- docker容器开机自动启动
- 【Docker 系列】docker 学习六,探究一下数据卷容器
- 在Docker守护进程停机期间保持容器运行(即重启Docker时,正在运行的容器不会停止)
- Docker的容器管理
- 群晖Docker应用配置HTTPS(反向代理)
- Docker服务以及容器如何设置设备开机自动启动
- Docker容器的本质
- docker常用组件介绍
- 树莓派4B 安装 nextcloud 做私人云盘网盘(nginx + docker + nextCloud + redis)
- 创建 macvlan 网络 – 每天5分钟玩转 Docker 容器技术(55)
- 外部世界如何访问容器? – 每天5分钟玩转 Docker 容器技术(37)
- 容器间通信的三种方式 – 每天5分钟玩转 Docker 容器技术(35)
- Docker 镜像小结 – 每天5分钟玩转 Docker 容器技术(21)
- docker用Docker构建Redis集群的步骤(redis集群使用)
- Docker 快速入门指引