网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
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.142 ms
64 bytes from tomcat02 (172.17.0.3): icmp_seq=2 ttl=64 time=0.068 ms
64 bytes from tomcat02 (172.17.0.3): icmp_seq=3 ttl=64 time=0.083 ms
直接链接就可以ping了!
docker exec -it tomcat02 ping tomcat03
ping: tomcat03: Name or service not known
反向是不能ping通的,因为没有配置,然后我们使用命令查看一下所有网卡。
docker network ls
NETWORK ID NAME DRIVER SCOPE
3454234082a6 bridge bridge local
03fb70520a34 host host local
83eddbf8f273 none null local
ntwkid是本地的网卡(docker0),然后我们`docker network inspect 3454234082a6`查看bridge的网络配置信息

这就是docker0 上面可以看到ip和网段

这是其他容器,如果启动服务不指定ip会随机分配一个ip,这个ip是docker启动的时候分配的,其实tomcat03就是在本地配置了tomcat02的配置。

说白了–link就是在hosts配置中增加了一个tomcat02的映射,可以通过tomcat03ping通。也可以互相绑定,我们不推荐使用,太笨了,我们需要自定义网络(不用docker0,因为很多局限 不支持容器名连接访问)
### (2)自定义网络
我们来简单介绍一下四种常见的网络状态!
bridge:桥接,说白了就是在docker上面搭桥,比如之前一个路由器叫0.1,后面来了0203,但是他们不能互相访问,不过可以通过01作为一个桥就可以通过这个桥互相访问了。(默认)
none:不配置网络
host:主机模式(和宿主机共享网络)
container:容器内网络联通(用的少)
docker run -d -P --name tocmat01 --net bridge tomcat:7.0
docker run -d -P --name tocmat01 tomcat:7.0
这两条命令其实是一样的,因为默认的网络模式就是bridge
–net以及docker network就是我们的自定义网络模式了,服务在自定义网络下面使用。
然后我们看一下怎么用
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.
好的 可以看到增删查这种的基本操作,我们来试试体验一下。
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
#–driver bridge 网络模式
#–subnet 192.168.0.0/16 子网
#–gateway 192.168.0.1 网关
docker network ls

可以看到我们设置的自定义网络。然后自己通过这个mynet启动两个tomcat,再次查看可以看到有两个新容器,ip也是自己分配的!
docker run -d -P --name tomcatzijide --net mynet tomcat:7.0
docker run -d -P --name tomcatzijide2 --net mynet tomcat:7.0

docker exec -it tomcatzijide ping tomcatzijide2
PING tomcatzijide2 (192.168.0.3) 56(84) bytes of data.
64 bytes from tomcatzijide2.mynet (192.168.0.3): icmp_seq=1 ttl=64 time=0.118 ms
64 bytes from tomcatzijide2.mynet (192.168.0.3): icmp_seq=2 ttl=64 time=0.070 ms
是可以通过容器名字ping的!现在不用–link就可以ping名字了
那么我们为什么要自己搭建呢?好处在哪里?
我们自定义的网络docker都已经帮着维护好了对应的关系,docker0没有这个功能,所以推荐自定义网络!比如搭建redis或者mysql的集群,要搭网络,网络是隔离的,都有自己的子网,不同的集群使用不同的网络保证安全。
### (3)网络联通

docker0和mynet是两个网段不能ping通,我们要把docker0的容器可以连接到mynet而不是把两个网络打通(两个网络打通出问题,整个网络就变了)可以使用下面的命令
docker network connect mynet tomcat01
打通tomcat01到mynet

联通之后会把tomcat01加入到mynet网络下,两个打通了,也就是叫一个容器两个ip。腾讯服务也有两个:公网和私网ip
docker exec -it tomcat01 ping tomcatzijide
PING tomcatzijide (192.168.0.2) 56(84) bytes of data.
64 bytes from tomcatzijide.mynet (192.168.0.2): icmp_seq=1 ttl=64 time=0.124 ms
64 bytes from tomcatzijide.mynet (192.168.0.2): icmp_seq=2 ttl=64 time=0.066 ms
此时就可以ping通了,02也可以被打通。 如果跨网络操作别人,就要用connect联通!
## 实战:部署redis集群
然后我们用上面学到的知识做一个redis集群来熟悉这些指令。
### (1)创建redis网络
docker network create redis --subnet 172.42.0.0/16
### (2)通过脚本创建redis配置
如果要自己弄的话要起好久,而脚本是帮助我们快速解决的工具!(直接复制到linux下就行)
for port in
(
s
e
q
16
)
;
d
o
m
k
d
i
r
−
p
/
m
y
d
a
t
a
/
r
e
d
i
s
/
n
o
d
e
−
(seq 1 6); \ do \ mkdir -p /mydata/redis/node-
(seq16); do mkdir−p/mydata/redis/node−{port}/conf
touch /mydata/redis/node-
p
o
r
t
/
c
o
n
f
/
r
e
d
i
s
.
c
o
n
f
c
a
t
<
<
E
O
F
>
/
m
y
d
a
t
a
/
r
e
d
i
s
/
n
o
d
e
−
{port}/conf/redis.conf cat << EOF >/mydata/redis/node-
port/conf/redis.confcat<<EOF>/mydata/redis/node−{port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
之后去目录查看一下
cd /mydata/
cd redis/
ls
node-1 node-2 node-3 node-4 node-5 node-6
### (3)启动redis
脚本或者一个一个启动,脚本:
for port in
(
s
e
q
16
)
;
d
o
d
o
c
k
e
r
r
u
n
−
p
637
(seq 1 6); \ do docker run -p 637
(seq16); dodockerrun−p637{port}:6379 -p 1637
p
o
r
t
:
16379
−
−
n
a
m
e
r
e
d
i
s
−
{port}:16379 --name redis-
port:16379−−nameredis−{port}
-v /mydata/redis/node-
p
o
r
t
/
d
a
t
a
:
/
d
a
t
a
−
v
/
m
y
d
a
t
a
/
r
e
d
i
s
/
n
o
d
e
−
{port}/data:/data \ -v /mydata/redis/node-
port/data:/data −v/mydata/redis/node−{port}/conf/redis.conf:/etc/redis/redis.conf
-d --net redis --ip 172.42.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf;
done
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
TLz3ou-1715707518353)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!