Docker【Java 高级】3

简介: Docker【Java 高级】3

出现:Error response from daemon: Conflict.


exec failed: exec failed… exec: “ip“(Docker容器没有ip addr命令:ex(Docker容器没有ip addr命令:exec ip addr 报错)

容器内部执行ip addr

容器外部执行ip addr

ping 172.17.0.2



# linux 可以ping通 docker 容器内部
原理

1、我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了docker,就会有一个网卡,docker0桥接模式,使用的技术是veth-pair技术!

再次测试 ip addr

2 、再启动一个容器测试,发现又多了一对网络


tomcat02的ip addr

# 我们发现这个容器带来网卡,都是一对对的  6-7 8-9
# veth-pair 就是一对的虚拟设备接口,他们都是成对出现的,一端连着协议,一端彼此相连
# 正因为有这个特性 veth-pair 充当一个桥梁,连接各种虚拟网络设备的
# OpenStac,Docker容器之间的连接,OVS的连接,都是使用evth-pair技术

3、我们来测试下tomcat01和tomcat02是否可以ping通

可以

网络模型图


结论:tomcat01和tomcat02公用一个路由器,docker0。

所有的容器不指定网络的情况下,都是docker0路由的,docker会给我们的容器分配一个默认的可用ip。

小结

Docker使用的是Linux的桥接,宿主机是一个Docker容器的网桥 docker0

Docker中所有网络接口都是虚拟的,虚拟的转发效率高(内网传递文件)

只要容器删除,对应的网桥一对就没了!

思考一个场景:我们编写了一个微服务,database url=ip: 项目不重启,数据ip换了,我们希望可以处理这个问题,可以通过名字来进行访问容器?

–-link


$ docker exec -it tomcat02 ping tomca01   # ping不通
ping: tomca01: Name or service not known
# 运行一个tomcat03 --link tomcat02 
 docker run -d -P --name tomcat03 --link tomcat02 tomcat
5c593586aab4f5717e373d669ef6c4dafdc35241af58cfa98fc960c255bdf1ed
# 3连接2
# 用tomcat03 ping tomcat02 可以ping通
$ docker exec -it tomcat03 ping tomcat02
PING tomcat02 (172.17.0.3) 56(84) bytes of data.
64 bytes from tomcat02 (172.17.0.3): icmp_seq=1 ttl=64 time=0.115 ms
64 bytes from tomcat02 (172.17.0.3): icmp_seq=2 ttl=64 time=0.080 ms
# 2连接3
# 用tomcat02 ping tomcat03 ping不通

探究:

docker network inspect 网络id 网段相同

[root@centos-7 kuangstudy]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
9e74954fab96   bridge    bridge    local
d1866eada5a8   host      host      local
633cff0390b9   none      null      local
[root@centos-7 kuangstudy]# 



docker inspect tomcat03


查看tomcat03里面的/etc/hosts发现有tomcat02的配置


–link 本质就是在hosts配置中添加映射

现在使用Docker已经不建议使用–link了!

自定义网络,不适用docker0!

docker0问题:不支持容器名连接访问!

自定义网络

[root@centos-7 kuangstudy]# docker network --help
Usage:  docker network COMMAND
Manage networks
Commands:
  connect     Connect a container to a network
  create      Create a network
  disconnect  Disconnect a container from a network
  inspect     Display detailed information on one or more networks
  ls          List networks
  prune       Remove all unused networks
  rm          Remove one or more networks
Run 'docker network COMMAND --help' for more information on a command.
[root@centos-7 kuangstudy]# 

查看所有的docker网络

bridge :桥接 docker(默认,自己创建也是用bridge模式)

none :不配置网络,一般不用

host :和所主机共享网络

container :容器网络连通(用得少!局限很大)

# 我们直接启动的命令 --net bridge,而这个就是我们得docker0
# bridge就是docker0
$ docker run -d -P --name tomcat01 tomcat
等价于 => docker run -d -P --name tomcat01 --net bridge tomcat
# docker0,特点:默认,域名不能访问。 --link可以打通连接,但是很麻烦!
# 我们可以 自定义一个网络
$ docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet



$ docker network inspect mynet;

我们自己的网络就创建好了



[root@centos-7 kuangstudy]# docker run -d -P --name tomcat-net-01 --net mynet tomcat
d9695c285a054d3620c41980041af10b0cb14c36d78b549349405c15e73f05fb
[root@centos-7 kuangstudy]# docker run -d -P --name tomcat-net-02 --net mynet tomcat
71cae31a62f3dcabb030c268e98e25ae84df07ba26af21ee5863189ee8d5a01b

[root@centos-7 kuangstudy]# docker network inspect mynet


在自定义的网络下,服务可以互相ping通,不用使用–link


相关文章
|
3月前
|
Java 程序员 API
Java中的异常处理:从基础到高级
【7月更文挑战第28天】在Java编程的世界中,异常处理是一块基石,它确保了程序的健壮性和可靠性。本文将带领读者深入理解Java的异常处理机制,从基本的try-catch语句开始,逐步探索更复杂的异常处理策略,如finally块、自定义异常以及异常链。我们还会讨论如何在设计良好的API时利用异常处理来提高用户体验。通过这篇文章,读者将能够更加自信地处理各种异常情况,编写出更加稳定和用户友好的Java应用程序。
|
2月前
|
jenkins 持续交付 开发工具
"引爆效率革命!Docker+Jenkins+GIT+Tomcat:解锁持续集成魔法,一键部署Java Web应用的梦幻之旅!"
【8月更文挑战第9天】随着软件开发复杂度的增加,自动化变得至关重要。本文通过实例展示如何结合Docker、Jenkins、Git与Tomcat建立高效的持续集成(CI)流程。Docker确保应用环境一致性;Jenkins自动化处理构建、测试和部署;Git管理源代码版本;Tomcat部署Web应用。在Jenkins中配置Git插件并设置项目,集成Docker构建Tomcat应用镜像并运行容器。此外,通过自动化测试、代码质量检查、环境隔离和日志监控确保CI流程顺畅,从而显著提高开发效率和软件质量。
62 3
|
3月前
|
Java 开发者
Java中的并发编程:从基础到高级
在Java世界中,并发编程是一项至关重要的技能。本文将深入探讨Java并发编程的核心概念、实用工具和高级技术。我们将从线程基础出发,逐步过渡到线程池的使用,最后探索Java并发包中的强大工具,如CyclicBarrier、Semaphore和CountDownLatch。无论你是Java新手还是资深开发者,这篇文章都将为你提供有价值的见解和技巧,帮助你在多线程环境中编写出更加高效、稳定的代码。 【7月更文挑战第30天】
32 7
|
3月前
|
Java 开发者
Java中的异常处理:从基础到高级
在Java的世界中,异常处理是一项不可或缺的技能。它不仅关乎程序的健壮性,更是开发者调试和解决问题的利器。本文将深入探讨Java异常处理的各个方面,从基本的try-catch语句到自定义异常类,再到异常链追踪和finally块的使用,我们将一一剖析。无论你是Java新手还是资深开发者,这篇文章都将为你提供新的视角和深度理解。
|
3月前
|
Java Docker 容器
Java演进问题之ZGC的优点和缺点如何解决
Java演进问题之ZGC的优点和缺点如何解决
|
3月前
|
安全 Java 调度
Java中的并发编程:从基础到高级
【7月更文挑战第20天】在Java的世界中,并发编程是一块重要的领域,它允许多个操作同时执行,极大地提高了程序的效率和性能。本文将深入探讨Java并发编程的核心概念,从线程的基础使用到高级的并发工具类,再到实际案例分析,旨在为读者提供一个全面而深入的视角来理解和掌握Java并发编程的艺术。
|
3月前
|
Java UED 开发者
Java中的异常处理:从基础到高级
【7月更文挑战第17天】Java的异常处理机制是其健壮性的关键所在,它允许程序在遇到错误时优雅地恢复或终止。本文将深入探讨Java的异常处理,从基本的try-catch-finally结构到更复杂的创建自定义异常类和异常链追踪。我们将通过具体代码示例来展示如何有效地处理异常,确保程序的稳定性和可靠性。
|
3月前
|
Java Scala 流计算
实时计算 Flink版产品使用问题之Docker镜像中的Java路径和容器内的Java路径不一致,是什么导致的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
3月前
|
Java 调度 开发者
Java中的并发编程:从基础到高级
本文将深入探讨Java的并发编程,包括线程、锁、同步器等概念,以及并发编程在实际应用中的问题和解决方案。我们将通过实例分析,揭示并发编程的复杂性和挑战性,并展示如何利用Java的并发工具来提高程序的性能和可扩展性。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和启示。
24 0
|
3月前
|
Ubuntu Linux Docker
Java演进问题之Alpine Linux创建更小的Docker镜像如何解决
Java演进问题之Alpine Linux创建更小的Docker镜像如何解决
下一篇
无影云桌面