Docker 深入3
Docker 网络
首先启动一个带net-tool的镜像(可以自己写个dockerfile构建下镜像或者进入容器安装 apt update && apt install -y iproute2
),查看容器的网卡信息
对于windows下,默认并没有docker的网卡,所以启动的容器可能ping不通,如果存在网卡,会发现网卡地址和容器内网卡地址处于一个网段下。
实验发现每启动一个容器,宿主机内会多一个虚拟网卡,正好和容器匹配,这个技术称为veth-pair
工作原理,就是个交换机(多网桥)
容器互联
–link
类似dns,通过容器名访问
1 | docker run -d -P --name tomcat03 --link tomcat02 tomcat |
这样03即可ping通02,其实–link只是在启动的容器内添加了host配置,不过我感觉这种方式不好用,直接把host文件共享更方便配集群的话。
查看网络配置:docker network ls
docker network inspect
自定义网络
直接启动的容器,默认会添加--net bridge
参数
在默认的桥接模式下,宿主机会存在一个虚拟网卡用作所有容器的网关,容器之间通信都走这个网关。
1 | 创建网络:docker network create |
这样的最大好处是可以通过容器名访问了,且保证了只有子网内的容器是可以互相访问的
通过docker创建的网络,不同的网段是无法通信的,通过docker network connect 网络 目标容器
联通
REDIS集群
做这样一个模型,两个redis组合一个哨兵模式,共有三组
组网,把redis集群放在一个局域网网段
docker network create --driver bridge --subnet 172.38.0.0/16 redisnet
启动容器
1 | 批量创建配置文件 |
容器启动了,现在需要将这六个容器集群,这里可以随便进入一个redis容器,默认目录是/data,里面有节点配置文件,可以通过命令配置三个主机和从机:
1 | redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 |
使用集群测试,可以在集群内登陆:
redis-cli -c
,查看集群主从信息cluster nodes
,键入一个值保存set name tr
,这时候docker停止保存的主机,在重新进入redis-cli,获取get name
发现可以在从机获取
SpringBoot打包微服务
通过idea环境工具打包
可以配置idea的docker仓库
编写Dockerfile(和pom同一层级)
1 | FROM java:8 |
打包就行了 docker build
启动测试镜像