Docker 学习笔记总结
Posted IT_Holmes
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker 学习笔记总结相关的知识,希望对你有一定的参考价值。
文章目录
- 1. docker 搭建 三主三从的redis集群
- 2. redis集群 之 主从容错切换迁移(基于redis集群)
- 3. redis集群 之 主从扩容(基于redis集群)
- 4. redis集群 之 主从缩容(基于redis集群)
- 5. DockerFile 介绍
- 6. DockerFile 构建过程解析
- 7. DockerFile 保留字简介
- 8. DockerFile 保留字案例演示
- 9. 虚悬镜像
- 10. 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<zzyybs@126.com>
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命令 来进行访问。
以上是关于Docker 学习笔记总结的主要内容,如果未能解决你的问题,请参考以下文章