Docker入门到精通(五)

Docker入门到精通(五)
一、Docker网络
1:理解Docker0
★ip addr(查看相关网络信息)

思考:Docker是如何处理容器网络访问的?
// 运行一个Tomcat镜像

docker run -d -P --name tomcat01 tomcatnet:2.0

 

// 查看容器内部网络地址
★docker exec -it 容器ID ip addr

发现容器启动的时候会得到一个,“eth0@if31”IP地址,docker分配的!
思考,Linux能不能ping通容器内部?是可以ping通的。

Linux可以ping通docker容器内部!!!(与docker0,“172.17.0.1”属于同一个网段)
// 原理
(1)我们每启动一个docker容器,docker就会给docker容器分配一个IP,我们只要安装了docker,就会有一个网卡docker0桥接模式,使用的技术是evth-pair技术!

(2)在启动一个容器测试,发现又多了一对网卡

docker run -d -P --name tomcat02 tomcatnet:2.0

1)我们发现这个容器带来网卡,都是一对对的。
2)evth-pair就是一对的虚拟设备接口,他们都是成对出现的,一段连着协议,一段彼此相连。
3)正因为有这个特性,evth-pair充当一个桥梁,连接各种虚拟网络设备的。
4)OpenStac,Docker容器之间的连接,OVS的连接,都是使用evth-pair技术。
(3)容器与容器之间是否可以ping通?当然可以!同一个网段!


// 绘制网络连接图

结论:tomcat01与tomcat02是共用的一个路由器docker0,所有的容器不指定网络的情况下,都是docker0路由的,docker会给我们的容器分配一个默认的可用IP。
Docker使用的是Linux的桥接,宿主机中是一个Docker容器的网桥docker0。Docker中的所有的网络接口都是虚拟的,虚拟的转发效率高!只要容器删除,对应网桥一对就消失了。


2:容器互联link,容器互联(不建议)
思考一个场景,我们编写了一个微服务,database url=ip,项目不重启,数据库IP换掉了,我们希望可以处理这个问题,可以使用名字来进行访问容器吗?
★docker exec -it tomcat01 ping tomcat02(一定ping不通)

docker run -d -P --name tomcat03 --link tomcat02 tomcatnet:2.0

通过--link 就可以解决网络连通问题(但是反向是不可以ping通的)

 

// 查看网络相关信息docker0


 

其实这个tomcat03就是在本地配置了tomcat02的配置
--link 就是在我们hosts配置中增加了一个172.17.0.4	 tomcat02 db94eba98334


3:自定义网络,容器互联(推荐)
自定义网络,不适用docker0。docker0问题:他不支持容器名连接访问。

★docker network ls(查看所有docker网络信息)

// 网络模式
1)bridge:桥接docker大桥(0.2与0.3通过0.1桥接,默认)
2)none:不配置网络
3)host:和宿主机共享网络
4)container:容器网络连通(用的少!局限性很大)

// 我们直接启动的命令(--net bridge默认参数,就是docker0)
docker run -d -P --name tomcat01 --net bridge tomcatnet:2.0
docker0特点:默认,域名不能访问,--link可以打通连接!(比较麻烦)
// 开始自定义网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
// 解释
driver bridge:桥接
subnet:子网掩码
gateway:默认路由/网关

// tomcat发布到自己的网络里面

docker run -d -P --name tomcat-net-01 --net mynet tomcatnet:2.0

docker run -d -P --name tomcat-net-02 --net mynet tomcatnet:2.0

★docker network inspect mynet(查看mynet相关信息)

// 再次测试ping连接(通过容器名连接,ip也是ok的)


我们自定义的网络docker都已经帮我们维护好了对应的关系,推荐我们平时这样使用网络。
// 好处
Redis:不同的集群使用不同的网络,保证集群是安全的健康的
Mysql:不同的集群使用不同的网络,保证集群是安全的健康的

4:网络连通
主要实现不同网段下的网络连通

// 准备工作(tomcat01、tomcat02、tomcat-net-01、tomcat-net-02)


// 打通tomcat01到tomcat-net-01网络
★docker network connect mynet tomcat01

★docker network inspect mynet

连通之后就是将tomcat01放到了mynet网络下,一个容器两个IP地址。公网IP与私网IP。
// 开始测试


结论:假设要跨网络操作别人,就需要使用docker network connect 连通!!!

二、SpringBoot打包Docker镜像
(1)构建springboot项目(operate-ticket-0.0.1-SNAPSHOT.jar)
(2)打包应用
(3)编写dockerfile
(4)构建镜像
(5)发布运行
// 编写Dockerfile,上传服务器,构建镜像

FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=9090"]
EXPOSE 9090
ENTRYPOINT ["java","-jar","/app.jar"]

// 构建镜像
★docker build -t xcgg666 .(注意后面的”.”)


★docker run -d -P xcgg666


// 开始测试

以后我们使用了Docker之后,给别人交付的就是一个镜像即可!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值