我们自定义的网络docker当我们维护好了对应的关系,推荐我们平时这样使用网络!
好处:
redis -不同的集群使用不同的网络,保证集群是安全和健康的
mysql-不同的集群使用不同的网络,保证集群是安全和健康的
网络连通
# 测试两个不同的网络连通 再启动两个tomcat 使用默认网络,即docker0 $ docker run -d -P --name tomcat01 tomcat $ docker run -d -P --name tomcat02 tomcat # 此时ping不通
# 要将tomcat01 连通 tomcat—net-01 ,连通就是将 tomcat01加到 mynet网络 # 一个容器两个ip(tomcat01)
[root@centos-7 kuangstudy]# docker network connect mynet tomcat01 [root@centos-7 kuangstudy]# docker network inspect mynet
docker exec -it tomcat01 ping tomcat-net-01
# 01连通 ,加入后此时,已经可以tomcat01 和 tomcat-01-net ping通了 # 02是依旧不通的
结论:假设要跨网络操作别人,就需要使用docker network connect
连通!
实战:部署Redis集群
docker rm -f $(docker ps -aq)
创建网卡
# 创建网卡 docker network create redis --subnet 172.38.0.0/16 # 通过脚本创建六个redis配置 for port in $(seq 1 6);\ do \ mkdir -p /mydata/redis/node-${port}/conf touch /mydata/redis/node-${port}/conf/redis.conf cat << 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 cd node-1 cd conf/ ls redis.conf cat 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.11 cluster-announce-port 6379 cluster-announce-bus-port 16379 appendonly yes ### 可忽略以上 # 通过脚本运行六个redis for port in $(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.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf; \ done
docker ps
docker exec -it redis-1 /bin/sh #redis默认没有bash ls appendonly.aof nodes.conf 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 yes
/data # 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 >>> Performing hash slots allocation on 6 nodes... Master[0] -> Slots 0 - 5460 Master[1] -> Slots 5461 - 10922 Master[2] -> Slots 10923 - 16383 Adding replica 172.38.0.15:6379 to 172.38.0.11:6379 Adding replica 172.38.0.16:6379 to 172.38.0.12:6379 Adding replica 172.38.0.14:6379 to 172.38.0.13:6379 M: 21a1dc8beedf2bd2156d23de8faa1f8980af2342 172.38.0.11:6379 slots:[0-5460] (5461 slots) master M: 4c14b60d4df34ba2a3a42425736fbf73bac607a9 172.38.0.12:6379 slots:[5461-10922] (5462 slots) master M: 46e433d254b6ba98fe9b54be5f341a1950d56de3 172.38.0.13:6379 slots:[10923-16383] (5461 slots) master S: 511b221a21070e2daa5e42bf32082e5cb6489766 172.38.0.14:6379 replicates 46e433d254b6ba98fe9b54be5f341a1950d56de3 S: 9761143a2de3c97230e67617197e868c5c6fa99f 172.38.0.15:6379 replicates 21a1dc8beedf2bd2156d23de8faa1f8980af2342 S: ce3f3598affcb27a6b7c93651e93d23daabee940 172.38.0.16:6379 replicates 4c14b60d4df34ba2a3a42425736fbf73bac607a9 Can I set the above configuration? (type 'yes' to accept): yes >>> Nodes configuration updated >>> Assign a different config epoch to each node >>> Sending CLUSTER MEET messages to join the cluster Waiting for the cluster to join ... >>> Performing Cluster Check (using node 172.38.0.11:6379) M: 21a1dc8beedf2bd2156d23de8faa1f8980af2342 172.38.0.11:6379 slots:[0-5460] (5461 slots) master 1 additional replica(s) M: 46e433d254b6ba98fe9b54be5f341a1950d56de3 172.38.0.13:6379 slots:[10923-16383] (5461 slots) master 1 additional replica(s) M: 4c14b60d4df34ba2a3a42425736fbf73bac607a9 172.38.0.12:6379 slots:[5461-10922] (5462 slots) master 1 additional replica(s) S: ce3f3598affcb27a6b7c93651e93d23daabee940 172.38.0.16:6379 slots: (0 slots) slave replicates 4c14b60d4df34ba2a3a42425736fbf73bac607a9 S: 9761143a2de3c97230e67617197e868c5c6fa99f 172.38.0.15:6379 slots: (0 slots) slave replicates 21a1dc8beedf2bd2156d23de8faa1f8980af2342 S: 511b221a21070e2daa5e42bf32082e5cb6489766 172.38.0.14:6379 slots: (0 slots) slave replicates 46e433d254b6ba98fe9b54be5f341a1950d56de3 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. /data #
docker搭建redis集群完成!
/data # redis-cli -c 127.0.0.1:6379> cluster info cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6 cluster_size:3 cluster_current_epoch:6 cluster_my_epoch:1 cluster_stats_messages_ping_sent:155 cluster_stats_messages_pong_sent:144 cluster_stats_messages_sent:299 cluster_stats_messages_ping_received:139 cluster_stats_messages_pong_received:155 cluster_stats_messages_meet_received:5 cluster_stats_messages_received:299 127.0.0.1:6379> cluster nodes 46e433d254b6ba98fe9b54be5f341a1950d56de3 172.38.0.13:6379@16379 master - 0 1655390241409 3 connected 10923-16383 4c14b60d4df34ba2a3a42425736fbf73bac607a9 172.38.0.12:6379@16379 master - 0 1655390240598 2 connected 5461-10922 ce3f3598affcb27a6b7c93651e93d23daabee940 172.38.0.16:6379@16379 slave 4c14b60d4df34ba2a3a42425736fbf73bac607a9 0 1655390240396 6 connected 9761143a2de3c97230e67617197e868c5c6fa99f 172.38.0.15:6379@16379 slave 21a1dc8beedf2bd2156d23de8faa1f8980af2342 0 1655390240901 5 connected 21a1dc8beedf2bd2156d23de8faa1f8980af2342 172.38.0.11:6379@16379 myself,master - 0 1655390241000 1 connected 0-5460 511b221a21070e2daa5e42bf32082e5cb6489766 172.38.0.14:6379@16379 slave 46e433d254b6ba98fe9b54be5f341a1950d56de3 0 1655390240000 4 connected 127.0.0.1:6379>
测试三主三从
127.0.0.1:6379> set a b -> Redirected to slot [15495] located at 172.38.0.13:6379 OK 172.38.0.13:6379>
[root@centos-7 kuangstudy]# docker stop redis-3 redis-3
172.38.0.13:6379> get a Could not connect to Redis at 172.38.0.13:6379: Host is unreachable (17.43s) not connected> get a Could not connect to Redis at 172.38.0.13:6379: Host is unreachable (1.58s) not connected> # Ctrl + C
因为13已经停止服务了,所以在13中不能get
所以在14中可以get到
/data # redis-cli -c 127.0.0.1:6379> get a -> Redirected to slot [15495] located at 172.38.0.14:6379 "b"
完成三主三从
我们使用docker之后,所有的技术都会慢慢变得简单起来!
SpringBoot微服务打包Docker镜像
1、构建SpringBoot项目
一个HelloController
idea运行测试
2、打包运行
mvn package
测试java jar
3、编写dockerfile
可以安装插件docker
在idea中新建Dockerfile文件,并编写
FROM java:8 COPY *.jar /app.jar CMD ["--server.port=8080"] EXPOSE 8080 ENTRYPOINT ["java","-jar","app.jar"]
4、构建镜像
# 1.复制jar和DockerFIle到服务器 # 2.构建镜像 $ docker build -t xxxxx:xx .
[root@centos-7 idea]# ls Dockerfile docker-hellospringboot-0.0.1-SNAPSHOT.jar
docker build -t dockerhellosb .
docker images
docker run -d -P --name sb-web dockerhellosb
docker ps
curl localhost:端口号 curl localhost:端口号/hello
本机测试
需知虚拟机的ip
ip addr | 2 en33
1 是本机回环地址localhost–127.0.0.1
2 是外网地址 192.168.253.128
5、发布运行
以后我们使用了Docker之后,给别人交付就是一个镜像即可!