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 是一种开源的容器化平台,它可以让开发者将应用程序及其依赖项打包到一个可移植的容器中,然后在任何支持 Docker 的平台上运行这些容器。本文将介绍 Docker 基础知识和使用方法。 ## 安装 Docker Docker 官方提供了不同平台的安装包,可以在官网上选择对应平台的安装包进行下载。安装完成后,可以在命令行中输入 `docker version` 命令来验证 Docker 是否安装成功。 ## 镜像和容器 Docker 的核心概念是镜像和容器。镜像是一个只读的模板,它包含了运行应用程序所需的所有信息,如代码、运行时环境、库文件、环境变量等。容器则是从镜像启动的运行实例,它可以被启动、停止、删除,并且可以与其他容器进行通信。 ### 镜像 Docker 镜像可以使用 `docker pull` 命令从 Docker Hub 上下载,也可以使用 `docker build` 命令从 Dockerfile 中构建。一个 Dockerfile 是一个包含构建 Docker 镜像所需的指令的文本文件。 例如,下面是一个构建一个基于 Ubuntu 操作系统的 Docker 镜像的 Dockerfile: ``` # 使用 Ubuntu 作为基础镜像 FROM ubuntu:latest # 设置镜像的作者 MAINTAINER yourname # 更新 Ubuntu 系统 RUN apt-get update # 安装必要的软件 RUN apt-get install -y nginx # 复制本地文件到镜像中 COPY index.html /var/www/html/ # 暴露容器端口 EXPOSE 80 # 设置容器启动命令 CMD ["nginx", "-g", "daemon off;"] ``` 使用 `docker build` 命令来构建 Docker 镜像: ``` $ docker build -t myimage . ``` ### 容器 使用 `docker run` 命令可以启动一个容器。例如,启动上面构建的 `myimage` 镜像: ``` $ docker run -d -p 8080:80 myimage ``` 其中 `-d` 表示在后台运行容器,`-p` 表示将容器的端口映射到主机的端口,`myimage` 是要启动的镜像名称。 使用 `docker ps` 命令可以查看当前正在运行的容器。使用 `docker stop` 命令可以停止容器。 ## Docker Compose Docker Compose 是一个工具,它可以定义和运行多个 Docker 容器。它使用 YAML 文件来配置应用程序的服务。例如,下面是一个简单的 Docker Compose 配置文件: ``` version: '3' services: web: build: . ports: - "5000:5000" redis: image: "redis:alpine" ``` 使用 `docker-compose up` 命令可以启动这个应用程序。使用 `docker-compose down` 命令可以停止应用程序并删除容器。 ## 总结 本文介绍了 Docker 的基础知识和使用方法,包括镜像、容器和 Docker Compose。希望对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xupengboo

你的鼓励将是我创作最大的动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值