docker-使用笔记大全③
Micah Two

[[docker 使用笔记②]]

docker网络

自定义网络

docker网络的类型定义

1
2
3
4
5
6
7
8
9
10
11
[root@micah-first ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
13ea7270b701 bridge bridge local
bee2007cde95 host host local
60db0acae408 none null local

#bridge为 docker0
#host 为宿主机共享
#none 为不配置网络
#container 为容器模式(不推荐)
#在这里 我们可以创建一个属于自己的网络,因为docker0有些东西不好用

创建自定义网络

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@micah-first ~]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
8e930d061d6415711b83fb4d3bcb99d35b8322955351cba3e56819ad212d0f01
[root@micah-first ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
13ea7270b701 bridge bridge local
bee2007cde95 host host local
8e930d061d64 mynet bridge local
60db0acae408 none null local

#这样就创建好了一个自定义网络,参数解答

--driver 类型
--subnet 网络范围/子网编码个数(32位)
--gateway 网关

#总而言之,创建一个网络,类似于vm虚拟机的网络配置


#创建好了之后,我们创建俩个容器进行互ping名字,发现可以ping通

[root@micah-first ~]# docker run -it -P --network mynet --name centos04 centos /bin/bash
[root@63886a579a98 /]# ping centos03
PING centos03 (192.168.0.2) 56(84) bytes of data.
64 bytes from centos03.mynet (192.168.0.2): icmp_seq=1 ttl=64 time=0.093 ms

补充

在docker网络中,每个不同的网络对应一连串访问,在访问与访问之间是互相隔离的,但是可以建立一个通道,下面会讲

网络连通

在docker之中,两个网段是不可以互相通信的,但是有一种操作可以使一个容器与一个网段联通

1
2
3
4
5
6
7
8
9
10
11
12
13
docker network connect 网段名字 容器名字# 连通命令

#我们先创建一个centos05
docker run -it -P --name centos05 centos /bin/bash
#此时该容器是处于docker0网络下的,我们输入
docker network connect mynet centos05
#此时再ping centos03 就可以ping通了

[root@micah-first ~]# docker run -it -P --name centos05 centos /bin/bash
[root@c4741c39226f /]# ping centos03
PING centos03 (192.168.0.2) 56(84) bytes of data.
64 bytes from centos03.mynet (192.168.0.2): icmp_seq=1 ttl=64 time=0.096 ms

原理解析

使用连通命令时,会将该容器添加一个属于命令网段的ip,就做到了容器连接网段
image

实战部署redis集群

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#先创建一个名叫redis 的网络
docker network create redis --subnet 172.38.0.0/16


#使用shell脚本快速创建六个redis的配置
for port in $(seq 1 6);#循环六次 \
do \
mkdir -p /home/redis/node-${port}/conf
touch /home/redis/node-${port}/conf/redis.conf
cat << EOF> /home/redis/node-${port}/conf/redis.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

#使用shell快速创建六个容器
for port in $(seq 1 6); \
do \
docker run -p 637${port}:6379 -p 1637${port}:16379 --name redis-${port} \
-v /home/redis/node-${port}/data:/data \
-v /home/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
-d --network redis --ip 172.38.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
done
#进入容器
docker exec -it redis-1 /bin/sh
#创建集群
redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379 --cluster-replicas 1
#进入集群控制台
redis-cli -c

#查看集群信息
cluster info
#查看集群节点
cluster nodes
由 Hexo 驱动 & 主题 Keep
总字数 15.9k 访客数 访问量