文章目录
Docker
一、Redis集群
我们模拟 分片+高可用+负载均衡 这样一个场景:三主三从
1. 创建网卡
docker network create redis --subnet 172.38.0.0/16
[root@localhost ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
6b6cc70f95a7 bridge bridge local
8b116f22e9f7 host host local
5aa54c4257dd none null local
275bdf35014b redis bridge local
2. 创建6个redis配置文件
通过脚本创建6个redis配置文件
# for 循环6次
for port in $(seq 1 6); \
do \
# 配置文件的目录
mkdir -p /home/chs/chs-files/redis/node-${port}/conf
touch /home/chs/chs-files/redis/node-${port}/conf/redis.conf
cat << EOF >/home/chs/chs-files/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
创建完成:
3. 启动6个redis服务
# 启动第1个redis服务:外部暴露端口号:6371、 卷挂载、 网络为:172.38.0.11
docker run -p 6371:6379 -p 16371:16379 --name redis-1 \
-v /home/chs/chs-files/redis/node-1/data:/data \
-v /home/chs/chs-files/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
# 启动第n个redis服务:
docker run -p 637${port}:6379 -p 1637${port}:16379 --name redis-${port} \
-v /home/chs/chs-files/redis/node-${port}/data:/data \
-v /home/chs/chs-files/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
成功启动!
4. 进入容器
docker exec -it redis-1 /bin/sh
5. 创建集群
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 即可。
连接redis,查看信息:
# 集群连接
redis-cli -c
# 查看信息
cluster info
6. 测试
- 我们创建一个k,v
可以发现是 redis-3 处理了我们的命令
- 此时我们模拟redis-3宕机,直接停掉 redis-3 容器,查看刚才的k1,是否可以获得?
[root@localhost ~]# docker stop redis-3
redis-3
我们可以发现,从redis-4获得了k1!!
- 查看nodes:
信息:redis-3 fail了,redis-4代替了redis-3为master!
二、SpringBoot微服务打包Docker镜像
1. 创建SpringBoot项目
随便编写一个简单的controller:
@RestController
public class Test {
@RequestMapping("/hello")
public String hello(){
return "-----Hello-----";
}
}
本地访问测试成功。
2. 打包应用
使用maven package 打包项目即可。
3. 编写Dockerfile
Dockerfile:
FROM java:8
COPY *.jar /app.jar
CMD ["server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
可以在IDEA中下载一个插件:docker integration,编写Dockerfile文件更方便!
4. 执行Dockerfile文件
将我们的jar包和Dockerfile上传到linux,使用docker容器进行部署
build镜像:
docker build -t code-chen-springboot .
镜像构建成功:
用上面构建成功的镜像启动一个容器:
docker run -d -P --name my-test-springboot code-chen-springboot
5. 测试访问
查看docker ps,然后使用命令 curl localhot:端口号
访问测试即可,我们再测试一下接口(curl localhot:端口号/hello):
成功返回数据!!
//下篇再见…谢谢