Docker网络
[root@localhost /]# 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.
Docker0
清空所有环境,以方便测试
原理
1、我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了docker,就会有一个网卡docker0桥接模式,使用的技术是evth-pair技术!
我们发现这个容器带来网卡,都是一对对的
evth-pair就是一对的虚拟设备接口,他们都是成对出现的,一端连着协议,一端彼此相连
正因为有这个特性,evth-pair充当一个桥梁,连接各种虚拟网络设备的
Openstac,Docker容器之间的连接,oVs的连接,都是使用evth-pair技术
Docker0网络模型
小结
Docker使用的是Linux的桥接,宿主机zhong是一个Docker容器的网桥docker0
docker中的所有网络接口都是虚拟的,虚拟的转发效率高
只要容器删除,对应网桥也会自动删除
--link技术
docker run -d -P --name tomcat03 --link tomcat02 tomcat # 这样可以tomcat03可以ping通tomcat02 反向不可以
就是在hosts文件中添加了一条映射
[root@shop /]# docker exec -it tomcat03 cat /etc/hosts
127.0.0.1localhost
::1localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0ip6-mcastprefix ff02::1ip6-allnodes ff02::2 ip6-allrouters
172.18.0.3 tomcat02 312857784cd4
172.18.0.4 5ca72d80ebb0
自定义网络
查看所有的docker网络
网络模式:
- bridge 桥接(默认)
- none 不配置网络
- host 宿主机模式,共享宿主机网络
- container:容器网络连通!(用的少!局限性很大)
创建网络
#我们直接启动的命令会有一个默认参数 --net bridge
docker run -d -P --name tomcat01 --net bridge tomcat
#自定义一个网络
[root@localhost /] docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
e27aab4b501fbf7cca77d81dcb49876b62e386f3901ebf90b831f72f73d46a04
[root@localhost /] docker network ls
NETWORK ID NAME DRIVER SCOPE
ffd0e491486c bridge bridge local
fb1f1bc9e3cf host host local
e27aab4b501f mynet bridge local
f6f0f3681dae none null local
网络联通
[root@localhost /]# docker network connect --help
Usage: docker network connect [OPTIONS] NETWORK CONTAINER
Connect a container to a network
Options:
--alias strings Add network-scoped alias for the container
--driver-opt strings driver options for the network
--ip string IPv4 address (e.g., 172.30.100.104)
--ip6 string IPv6 address (e.g., 2001:db8::33)
--link list Add link to another container
--link-local-ip strings Add a link-local address for the container
docker connect 网络名称 容器名 # 将容器添加到网络中
docker connect mynet nginx01
实战 部署Redis集群
# 创建网卡
docker network create redis --subnet 172.38.0.0/16
#创建六个redis配置
for port in s(seq 1 6);
do
mkdir -p /mydata/redis/node-${port}/conf
touch/mydata/redis/node-${port}/conf/redis.conf
cat << EOF > /mydata/redis/node-s{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
# 一键启动
for port in s(seq 1 6);
do
docker run -p 637${port}:6379 -p 1637${port}:16379--name redis-${port}
-v /mydata/redis/node-${port}/data:/data
-v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf
-d--net redis--ip 172.38.0.1s{port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf;
done
# 单个启动01
docker run-p 6371:6379-p 16371:16379 --name redis-1
-v /mydata/redis/node-1/data:/data
-v /mydata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf
-d --net redis --ip 172.38.0.11 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
# 单个启动02
docker run-p 6372:6379-p 16372:16379 --name redis-2
-v /mydata/redis/node-2/data:/data
-v /mydata/redis/node-2/conf/redis.conf:/etc/redis/redis.conf
-d --net redis --ip 172.38.0.12 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
# 进入其中一台机器
docker exec -it redis-1 /bin/sh
# redis创建集群
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
SpringBootBoot微服务打包镜像
1、构架springboot项目2、打包应用
3、编写dockerfile
4、构建镜像
5、发布运行!!
FROM java:8
COPY *. jar /app. jar CMD ["--server. port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]