Docker 学习笔记总结(三)

1. docker 搭建 三主三从的redis集群


架构图:
在这里插入图片描述


第一步:启动6台redis节点:

docker run -d --name redis-node-1 --net host --privileged=true \
-v /data/redis/share/redis-node-1:/data redis:6.0.8 \
--cluster-enabled yes --appendonly yes --port 6381

docker run -d --name redis-node-2 --net host --privileged=true \
-v /data/redis/share/redis-node-2:/data redis:6.0.8 \
--cluster-enabled yes --appendonly yes --port 6382

...

# 开上6台redis节点。

参数命令解释:
在这里插入图片描述

启动后的容器:
在这里插入图片描述

第二步:进入其中一个节点,构建主从关系。

# 进入redis节点
docker exec -it redis-node-1 /bin/bash
# 构建主从关系
redis-cli --cluster create 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 127.0.0.1:6386 --cluster-replicas 1

--cluster-replicas 1 表示为每个master创建一个salve节点,就是1:1的主从比例。

在这里插入图片描述
在这里插入图片描述

第三步:进入某个节点查看redis集群状态。

  • cluster info命令:打印集群的信息.
  • cluster nodes命令:查看集群节点。
    在这里插入图片描述
    在这里插入图片描述
    到了这,一个3主3从的redis集群就算搭建成功!

注意错误:

  • 因为是集群了,所以不能用单机版命令进入redis客户端,要添加-c的参数以集群模式启动。
    在这里插入图片描述
  • 添加-c后,在数据读写时就会有读写路由切换的一个效果。
    在这里插入图片描述
    其实就是通过哈希槽分区算法,算出要插入的槽位,进而切换到槽位所在的节点而已。

第四步:redis-cli --cluster check 127.0.0.1:6381
命令查看集群信息。

在这里插入图片描述

2. redis集群 之 主从容错切换迁移(基于redis集群)


容错就是如果redis某个节点宕机了的情况。

主节点宕机,对应的从节点通过心跳检测,检测不到就会上位。
在这里插入图片描述
在这里插入图片描述

当宕机的节点恢复,就会变成对应的从机。

在这里插入图片描述

3. redis集群 之 主从扩容(基于redis集群)


扩容就是添加节点的情况。

第一步:新建6387,6388两个redis节点。
在这里插入图片描述

第二步:将新增的6387节点作为master节点加入集群。

redis-cli --cluster add-node 自己实际IP地址:6387 自己实际IP地址:6381
# 6387就是将要作为master新增节点。
# 6381就是原来集群节点里面的领路人,相当于找到组织加入集群。

在这里插入图片描述
第三步:虽然节点已经加入了集群,但没有槽位的。所以要重新分派槽号。

redis-cli --cluster reshard IP地址:端口号

在这里插入图片描述
执行reshard命令后,要填写一些配置:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第四步:槽号分派是从前面几个节点分出了一些槽号给新节点。
在这里插入图片描述
在这里插入图片描述

第五步:为主节点6387分配从节点6388。

# 从节点绑定
redis-cli --cluster add-node 从节点IP:从节点端口 主节点IP:主节点端口 --cluster-slave --cluster-master-id 主节点ID

在这里插入图片描述

这样就将3主3从扩展到了4主4从的效果。

4. redis集群 之 主从缩容(基于redis集群)


第一步:先删除主节点对应的从节点。

# 删除从节点
redis-cli --cluster del-node ip:从机端口 从机6388节点ID
# 检查从节点是否被删除
redis-cli --cluster check 127.0.0.1:6382  

在这里插入图片描述

第二步:将主节点redis的槽号清空,重新分配。本例将清出来的槽号都给了6381节点。

# 分配槽号给6381节点
redis-cli --cluster reshard 127.0.0.1:6381

分配流程如下:
在这里插入图片描述
在这里插入图片描述

第三步:将主节点6387删除。

redis-cli --cluster del-node ip:从机端口 6387节点ID

在这里插入图片描述

5. DockerFile 介绍


DockerFile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。

之前用过docker commit 命令来将容器保存成镜像,从而达到一个加强版的镜像。而Dockerfile要比这种方式还要简单。

在这里插入图片描述
在这里插入图片描述

Dockerfile文档官方地址:https://docs.docker.com/engine/reference/builder/

6. DockerFile 构建过程解析


DockerFile内容基础知识:

  • 每条保留字指令都必须为大写字母且后面要跟随至少一个参数。
  • 指令按照从上到下,顺序执行。
  • #表示注释。
  • 每条指令都会创建一个新的镜像层并对镜像进行提交。

Docker执行DockerFile的大致流程:
在这里插入图片描述
DockerFile就类似配置文件一样。

7. DockerFile 保留字简介


可以参考tomcat8的dockerfile:https://github.com/docker-library/tomcat


from保留字:

  • 就是基于来自哪个镜像的。
    在这里插入图片描述

maintainer保留字:
在这里插入图片描述


run保留字:

  • 两种格式:shell格式和exec格式。
  • run是在docker build时运行。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

expose保留字:
在这里插入图片描述


workdir保留字:
在这里插入图片描述
在这里插入图片描述


user保留字:
在这里插入图片描述


env保留字:
在这里插入图片描述
在这里插入图片描述


volume保留字:
在这里插入图片描述


add保留字:
在这里插入图片描述
add和copy保留字功能差不多,只不过add要更强大一点,会自动处理URL和解压压缩包。


copy保留字:
在这里插入图片描述
在这里插入图片描述


cmd保留字:
在这里插入图片描述
在这里插入图片描述

注意事项:Dockerfile中可以有多个CMD命令,但只有最后一个生效,CMD会被docker run之后的参数替换掉。
在这里插入图片描述

cmd与run的区别:
在这里插入图片描述


entrypoint保留字:

在这里插入图片描述
查看图片中的案例:
在这里插入图片描述


保留字总结:
在这里插入图片描述

8. DockerFile 保留字案例演示


场景需求:

  • centos镜像具备vim + ifconfig + jdk8。

jdk8下载地址:https://mirrors.yangxingzhen.com/jdk/

因为,安装一个jdk8环境。因此,下载要给jdk8压缩包,通过ADD保留字解压,通过ENV配置环境变量。


第一步:编写Dockerfile文件,注意开头的一定是大写的D。

Dockerfile文件编写:

FROM centos
MAINTAINER zzyy<[email protected]>

ENV MYPATH /usr/local
WORKDIR $MYPATH

#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

EXPOSE 80

CMD echo $MYPATH

第二步:通过Dockerfile构建新镜像。

  • 格式:docker build -t 新镜像名字:TAG . 别忘记后面还有个点。

在这里插入图片描述

构建的时候存在以下问题为解决!!!在这里插入图片描述

第三步:运行新镜像的容器。

  • 格式:docker run -it 新景象名字:TAG

9. 虚悬镜像


在这里插入图片描述

通过Dockerfile写一个虚悬镜像。

第一步:vim Dockerfile 。

from ubuntu
CMD echo 'action is success'

第二步:docker build . 别忘记后面的点。
在这里插入图片描述
这样虚悬镜像就创建成功了。
在这里插入图片描述
对于虚悬镜像一定要删除!

第三步:通过docker image ls -f dangling=true命令可以查看当前镜像的所有虚悬镜像。
在这里插入图片描述

第四步:使用docker image prune命令来删除虚悬镜像。
在这里插入图片描述
在这里插入图片描述

10. Docker 微服务实战


目的:将一个微服务部署到docker容器上。

第一步:搭建一个springboot微服务项目。上传到linux服务器上面。

第二步:编写Dockerfile文件。

# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER itholmes

# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为zzyy_docker.jar
ADD SSMProject-1.0-SNAPSHOT.jar itholmes_docker.jar
# 运行jar包
RUN bash -c 'touch /itholmes_docker.jar'
ENTRYPOINT ["java","-jar","/itholmes_docker.jar"]
#暴露6001端口作为微服务
EXPOSE 6001

第三步:执行构建命令:docker build -t itholmes_docker:1.6 . (不要忘记后面的点)
在这里插入图片描述
在这里插入图片描述

第四步:运行刚刚创建好的容器镜像,docker run -d -p 6001:6001 镜像ID。

  • 测试端口可以使用curl命令 来进行访问。
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/IT_Holmes/article/details/126687729
今日推荐