docker学习快速入门

目录

        • Linux下安装docker
        • 配置阿里云镜像加速
        • docker命令
        • 部署安装Tomcat、ES
        • 容器数据卷
        • DockerFile
        • docker网络
        • 制作tomcat镜像
        • Redis集群部署
        • SpringBoot微服务打包docker镜像
        • 拓展

什么是Docker

Docker是内核级别的虚拟化,可以在一个物理机上可以运行很多的容器实例。服务器的性能可以被压榨到极致。Docker是基于Go语言开发的,开源项目。

镜像(image):
docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,镜像=>run=>容器,通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。

容器(container):
Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的。启动,停止,删除。

仓库(repository):
仓库就是存放镜像的地方。

官网:https://www.docker.com/
文档地址:https://docs.docker.com/
Doker镜像仓库地址:https://hub.docker.com/

Linux下安装docker

1、需要的安装包

yum install -y yum-utils

2、设置镜像的仓库

yum config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3、更新yum软件包索引。

yum makecache

4、安装

yum install docker-ce docker-ce-cli containerd.io

5、启动docker

systemctl start docker`

6、使用docker version查看是否安装成功

docker run hello-world

配置阿里云镜像加速

登录阿里云,找到容器服务。找到镜像加速地址,配置使用。

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json   <<-'EOF'
{
"registry-mirrors": ["https://xxx.xxx.xxx.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker命令

docker --help 帮助

docker version 版本

docker info 详细信息

docker stats实时查看容器运行情况

docker history IMAGEID查看镜像构建记录

镜像命令

docker images [-a所有镜像,-q只要镜像ID]查看本机镜像

docker tag 镜像id 新镜像名:tag标签 克隆命名新的镜像

docker search xxx 搜素镜像

docker search mysql --filter=STARS=3000

[root@CentOS7 docker]# docker search mysql --filter=STARS=3000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source… 14616 [OK]
mariadb MariaDB Server is a high performing… 5573 [OK]

docker pull xx 下载镜像,默认最新版(分层下载,节省开销,加快速度)

指定版本下载:docker pull mysql:5.7

docker rmi [-f] 镜像名/镜像ID 删除镜像

删除所有镜像 文件: docker rmi -f $(docker images -aq)

生成镜像

docker commit 容器id xx镜像名,根据容器的changes生成一个镜像,-a,作者名;-m,信息。

docker build [options] 生成路径path,根据dockerfile生成镜像。

docker build [选项] 镜像名[:标签]或者上下文路径或者URL 所执行目录(.表示在当前目录执行)

例:docker build -f mydockerfile -t mytomcat .

上传提交镜像

docker push [OPTIONS] NAME[:TAG],上传一个镜像到远程仓库。

Options:
-a, --all-tags,将所有版本的镜像提交。
–disable-content-trust 忽略镜像提示。
-q, --quiet ,简洁生成。

上传到dockerhub

1)在hub.docker.com创建账号

2)登录账户:docker login -u xxx -p

3)上传镜像

docker push 镜像:tag

上传到阿里云

1)登录到阿里云,找到容器镜像服务

2)创建命名空间

3)创建容器镜像仓库

4)查看仓库基本信息,获取ip地址,按照操作指南执行

5)比如登录:

sudo docker login --usename xxx registry.cn-beijing.aliyuncs.com

容器命令

有了镜像才能创建容器。

运行容器

docker run [options] 镜像 ,创建容器运行镜像

--name, 命名容器,Repository:Tag

--rm,退出时删除容器

-d ,以后台方式运行,若容器不向客户端提供服务则停止运行

-it ,交互方式运行,启动进入容器查看内容

exit或ctrl+d退出停止运行;ctrl + p + q退出不停止

-p ,指定容器端口,主机端口:容器端口

例1:交互式运行centos

docker run -it centos /bin/bash #会进入容器的交互终端

docker run -itd centos /bin/bash #以后台交互方式运行容器,不会进入容器

后面的/bin/bash的作用是表示运行bash ,docker中必须要保持一个进程的运行,这个/bin/bash就表示启动容器后启动bash。

例2:以脚本方式运行centos镜像,每隔1秒启动容器。

docker run -d centos /bin/bash -c "while true;do echo xxx;sleep 1 ; done"

例3:以后台方式创建容器运行nginx镜像,并向外开放3344端口

docker run -d --name nginx01 -p 3344:80 nginx

查看容器

docker ps [options],查看正在运行的容器

-a查看运行记录,-n=?显示最近运行的容器,-q显示ID

docker container ls

删除容器

docker rm 容器id,删除容器;-f,强制删除

例:删除所有容器

docker rm -f $(docker ps -aq)

启动和停止容器

docker start 容器id

docker restart 容器id

docker stop 容器id

docker kill id,强制停止运行

(生成)镜像

docker container commit 容器id xx镜像名-a,作者名,-m,信息。

docker build [options] 生成路径path,根据dockerfile生成镜像。

docker build [选项] 镜像名[:标签]或者上下文路径或者URL 所执行目录(.表示在当前目录执行)

-f指定dockerfile文件,-t命名镜像

例1:提交容器3fdf3rfe4生成镜像tomcat01

docker commit -a="xxx" -m="xxx" 3fdf3rfe4 tomcat01:1.0

例2:根据dockerfile生成镜像保存到当前目录

docker build -f /home/dockerfile -t myimage:1.0 .

其他命令:

docker logs [options] 容器id,查看日志

Options:
–details,显示详细信息
-f, --follow ,实时输出日志
–since ,显示在某个时间后的日志
-n, --tail ,展示最后n行日志
-t, --timestamps ,显示时间
–until ,显示一个时间前的日志

docker top 容器id,查看正在运行的容器中的进程

docker inspect 容器id,查看容器的元数据(返回的JSON格式)

docker exec -it 容器id /bin/bash,以新终端进入正在运行的容器

docker attach 容器id,进入容器正在运行的终端

docker cp 容器id:文件绝对路径 主机目的路径,从容器中拷贝文件到主机

docker pause 容器id 悬挂中断

docker unpause 容器id

部署安装Tomcat、ES

tomcat

1、下载镜像

docker pull tomcat:9.0

2、启动镜像

docker run -d --name tomcat01 -p 3355:8080 tomcat:9.0

3、进入tomcat容器中,配置/usr/local/tomcat/webapps目录

docker exec -it tomcat01 /bin/bash

cp -r webapps.dist webapps

4、访问测试

docker ps

curl localhost:3355

ES

docker run -d --name es01 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.7.0

容器数据卷

让容器内的文件数据与linux主机或容器之间同步互通,形成共享,修改容器配置文件时可直接在主机服务器上修改,不需要进入容器,实现容器数据持久化。

方式一、-v卷挂载命令

例:docker run -it -v 主机路径:容器内路径 centos /bin/bash

在主机上通过docker inspect 容器,查看mount挂载情况。

例:安装mysql同步数据

docker pull mysql:5.7

docker run -d -p 3304:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql_01 mysql:5.7

参数说明:-d后台运行,-p端口映射,-v卷映射,-e环境配置。

容器启动成功后在本地连接3304端口连接数据库。

匿名挂载:-v 容器内路径

docker run -d -p --name nginx01 -v /etc/nginx nginx

具名挂载:-v 卷名:容器内路径

docker run -d -p --name nginx01 -v nginx_01:/etc/nginx nginx

默认卷挂载到本地的/var/lib/docker/volumes/

指定路径挂载:-v 本地路径:容器路径

docker run -d -p --name nginx01 -v /home/nginx01/:/etc/nginx nginx

卷管理

docker volume [options],管理数据卷,参数说明:

create ,创建一个卷;
inspect,查看卷详细信息;
ls,列出所有卷;
prune,删除未使用的本地卷;
rm,删除卷

方式二、dockerfile

1、创建一个dockerfile文件

vim dockerfile

2、编写dockerfile

FROM centos
VOLUME ["volume01"]
CMD echo "----end----"
CMD /bin/bash
#解释
FROM 镜像名:标签 #FROM指定基础镜像,其必须为Dcokerfile中第一条指令
RUN 命令   #在该镜像中执行命令,如果执行多个命令用 &&连接起来

3、docker build 生成镜像文件

docker build -f /home/dockerfile -t 镜像名(repo):版本标签(tag) .

方式三、容器之间–volumes-from

创建一个容器docker02与其他容器共享数据。

docker run -it --name docker02 --volumes-from docker01 nginx

删除容器docker01数据依旧存在,因为它的数据在本地/var/lib/docker/volume下。

DockerFile

dockerfile用来构建镜像文件,命令脚本。

dockerfile指令

FROM #基础镜像
MAINTAINER #维护者,姓名+邮箱
RUN #镜像构建时需要运行的命令
ADD #添加文件,若是压缩包则自动解压
WORKDIR #镜像工作目录
VOLUME #挂载目录
EXPOSE #保留端口配置
CMD #指容器启动需要运行的命令,只有最后一个生效,追加命令会覆盖
ENTRYPOINT #指定容器运行时需要的命令,可以docker run时追加命令
ONBUILD #当构建一个被继承的dockerfile时触发onbuild指令
COPY #将主机文件拷贝到制作的镜像中
ENV #构建时设置环境变量

例:编写一个mycentos镜像文件,生成镜像

vim mydockerfile-centos

FROM centos
MAINTAINER z<zzh@163.com>
ENV MYWORKPATH /usr/local
WORKDIR $MYWORKPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYWORKPATH
CMD echo "---end---"
CMD /bin/bash

docker build -f mydockerfile-centos -t mycentos:1.0 .

CMD与ENTRYPOINT比较

相同点:

1、只能写一条,如果写了多条,那么只有最后一条生效

2、容器启动时才运行,运行时机相同

不同点:

ENTRYPOINT不会被运行的command覆盖,而CMD则会被覆盖,如果我们在Dockerfile种同时写了ENTRYPOINT和CMD,并且CMD是一个完整的指令,那么它们两个会互相覆盖,谁在最后谁生效。

docker网络

docker网络是一种虚拟网络,网络为成对的bridge桥接模式。主机可与创建的容器进行通信,但是容器之间通信需要额外的操作。docker默认给容器分配一个虚拟内部ip地址,网络为docker0。

例:docker exec -it tomcat01 ping tomcat01

无法ping通,因为容器在docker0网络,无法通过容器名ping通。

ping不同的另一种原因:

OCI runtime exec failed: exec failed: unable to start container process: exec: "ping": executable file not found in $PATH: unknown

以上报错是因为docker创建的容器相当于一个miniLinux,很多命令和软件没有安装,包括network这一网络工具都没有。下载软件包只能通过apt-get或wget和curl命令。

docker network网络管理

docker network [options],options如下:

connect,连接容器到网络

create,创建网络

inspect ,查看网络

ls ,列出所有网络

rm ,删除网络

–link实现单向通信

运行tomcat02容器,使其能够与tomcat01通信。原理是在容器的/etc/hosts文件中配置了主机名与ip地址映射。

docker run -d --name tomcat02 --link tomcar01 tomcat

自定义网络

自定义网络支持通过容器名通信,创建一个自定义网络

docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 Mynet

–net指定网络

使用自定义网络创建容器,在该网络中为容器分配ip:

docker run -d --name tomcat02 --net Mynet tomcat

在该网络中的容器可以相互通信,可ping tomcat02。

容器-网络连接

如何让一个容器连接到另一个网络或者与另一个网络中的容器通信,可使用docker network connect,原理是将容器添加到该网络中。

docker network connect [OPTIONS] NETWORK CONTAINER

Options:
–alias 为网络添加作用范围scope
–driver-opt 选择网络模式driver
–ip 指定一个容器ip地址
–link list 添加到另一个容器的连接
–link-local-ip 为容器添加一个本地ip地址

docker network connect Mynet tomcat02,将tomcat02挂到Mynet网络。

可使用docker network inspect 查看网络中有哪些容器。

实战

如何使用docker制作tomcat镜像并上传至阿里云,部署redis和springboot项目。

制作tomcat镜像

通过dockerfile制作一个tomcat镜像并发布到阿里云镜像仓库。

1、在用户工作的主目录中创建一个build/tomcat文件夹

2、准备tomcat和jdk安装包上传到该文件夹下

3、在文件夹下创建一个README.txt文件并编写Dockerfile文件

touch README.txt

vim Dockerfile

FROM centos#本地基础镜像docker images查看是否有该镜像否则将失败
MAINTAINER zzh<xxxx@qq.com>
COPY README.txt /usr/local/
ADD /root/build/tomcat/apache-tomcat-8.5.94.tar.gz /usr/local/
ADD /root/build/tomcat/jdk-8u151-linux-x64.tar.gz /usr/local/RUN yum -y install vim
RUN yum -y install net-toolsENV MYPATH /usr/local
WORKDIR $MYPATHENV JAVA_HOME /usr/local/jdk1.8.0_151
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools/jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.94
ENV CATALINA_BASH /usr/local/apache-tomcat-8.5.94
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/binEXPOSE 8080CMD /usr/local/apache-tomcat-8.5.94/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.5.94/logs/catalina.out

4、构建diytomcat镜像

docker build -t diytomcat .

5、创建容器运行

docker run -d -p 3355:8080 --name mytomcat01 -v /root/build/tomcat/test:/usr/local/apache-tomcat-8.5.94/webapps/test -v /root/build/tomcat/logs:/usr/local/apache-tomcat-8.5.94/logs diytomcat

6、测试运行

在linux主机测试:curl localhost:3355或直接访问。

7、上传至阿里云镜像仓库

docker login --username=xxx registry.cn-shanghai.aliyuncs.com

#重命名镜像

docker tag 镜像 registry.cn-shanghai.aliyuncs.com/命名空间/仓库名:tag

docker push registry.cn-shanghai.aliyuncs.com/命名空间/仓库名:tag

Redis集群部署

1、创建网络

docker network create redis --subnet 172.17.0.0/16

2、通过脚本创建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 node.conf
cluster-node-timeout 5000
cluster-announce-ip 172.17.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
donedocker run -p 637${port}:6379 -p 16371: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.17.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

3、查看redis容器,进入容器

docker ps

docker exec -it redis-1 /bin/sh

3、创建redis集群

redis-cli --cluster create 172.17.0.11:6379 172.17.0.12:6379 172.17.0.13:6379 172.17.0.14:6379 172.17.0.15:6379 172.17.0.16:6379 --cluster-relicas 1

4、查看集群

redis-cli -c

cluster info

cluster nodes

SpringBoot微服务打包docker镜像

1、将springboot项目打包为xxx.jar

2、编写Dockerfile文件

FROM java:8
MAINTAINER z<xx@qq.com>COPY *.jar  /app.jar
EXPOSE 8080ENTRYPOINT ["java","-jar","/app.jar"]

3、构建镜像

docker build -t myApp .

4、发布镜像,下载镜像运行

docker push myApp

docker pull myApp

docker run -d -p 8080:8080 --name X-WEB-APP myApp

5、测试

curl localhost:8080

拓展

compose、swarm、Jenkins

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/706097.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity使用PlayableAPI 动态播放动画

1.初始化animator&#xff0c;创建Playable图&#xff0c;创建动画Playable private void InitAnimator(GameObject headGo) {if (headGo){_headAnimator headGo.GetComponent<Animator>();if (_headAnimator){_headAnimator.cullingMode AnimatorCullingMode.AlwaysA…

【面试】找工作历程

简单介绍一下自己&#xff1a;本科双非一本&#xff0c;22年毕业&#xff0c;工作一段时间到24年1月份辞职&#xff0c;怎么说实习加正式&#xff0c;工作了大概两年&#xff0c;年后准备换工作&#xff0c;目前IP上海。 2024.2.26 第一天正式投简历投了boss的上限&#xff0c;…

Sentinel 动态规则扩展

一、规则 Sentinel 的理念是开发者只需要关注资源的定义&#xff0c;当资源定义成功后可以动态增加各种流控降级规则。Sentinel 提供两种方式修改规则&#xff1a; 通过 API 直接修改 (loadRules)通过 DataSource 适配不同数据源修改 手动通过 API 修改比较直观&#xff0c;…

主机字节序与网络字节序

大端序和小端序 大端序&#xff08;Big Endian&#xff09;和小端序&#xff08;Little Endian&#xff09;是两种计算机存储数据的方式。 大端序指的是将数据的高位字节存储在内存的低地址处&#xff0c;而将低位字节存储在内存的高地址处。这类似于我们阅读多位数时从左往右…

YOLOv6代码解读[05] yolov6/core/engine.py文件解读

#!/usr/bin/env python3 # -*- coding:utf-8 -*- from ast import Pass import os import os.path as osp import time from copy import deepcopy from tqdm import tqdm import cv2 import numpy as np import mathimport torch from torch.cuda

新版vscode remote ssh不兼容老系统 (waiting for server log)

参考知乎-萌萌哒赫萝​ 最近vscode发布了1.86版本&#xff0c;该版本中&#xff0c;更新了对glibc的要求( ≥ \geq ≥ 2.28)&#xff0c;导致各种旧版本的linux发行版&#xff08;如centos 7&#xff09;都无法用remote-ssh来连接了&#xff0c;会一直控制台报错waiting for s…

迁移学习 领域自适应

迁移学习 什么是迁移学习 迁移学习是机器学习领域用于标记数据难获取这一基础问题的重要手段&#xff0c; 将训练好的内容应用到新的任务上被称为迁移学习。 由于这个过程发生在两个领域间&#xff0c;已有的知识和数据也就是被迁移的对象被称为源域&#xff0c;被赋予经验…

防火墙的内容安全

目录 1. 内容安全 1.1 IAE引擎 DPI---深度包检测技术 DFI---深度流检测技术 结论(优缺点)&#xff1a; 1.2 入侵防御&#xff08;检测&#xff09;(IPS) IPS的优势: 入侵检测的方法: 入侵检测的流程 签名 查看预定义签名的内容 新建自定义签名 入侵防御的检测…

面试题解答

题目 为管理业务培训信息&#xff0c;现需建立3个表&#xff1a; 表S(S#,SN,SD,SA)S#,SN,SD,SA分别代表学号&#xff0c;学员姓名&#xff0c;所属单位&#xff0c;学员年龄、 表C(C#,CN)C#,CN分别代表课程编号&#xff0c;课程名称 表SC(S#,C#,G)S#,C#,G分别代表学号&#xf…

热闹元宵进行中,如何利用VR全景展示民宿品牌形象?

错峰出游闹元宵&#xff0c;元宵节恰逢周末&#xff0c;而且还是春节假期返工之后的首个休息日&#xff0c;不少人都想通过短途度假来缓解“节后综合征”。两位数的特价机票、打折的各种酒店让你实现“旅行自由”&#xff0c;那么如何知道特价酒店服务好不好呢&#xff1f;先别…

Leetcode.901 股票价格跨度

题目信息 LeetoCode地址: . - 力扣&#xff08;LeetCode&#xff09; 题目理解 价格跨度的定义在题目中很明确&#xff0c;就是韭菜持有一只股票且该股票保持连续上涨最大的天数。 直观的想&#xff0c;我们可以保存第一天到当前天的所有股价&#xff0c;并一天一天往前找单…

2-27练习

1、请用fscanf和fprintf实现文件拷贝。 &#xff08;fputc和fgetc&#xff09; #include <stdio.h> int main(int argc, const char *argv[]) {FILE* fp NULL;fp fopen("./z1.txt","r");//用fscanf统计文件大小int count 0;char c; // while(fs…

对于大前端开发来说,转鸿蒙开发究竟是福还是祸?

从铺天盖地的市场消息来看&#xff0c;华为即将面世的鸿蒙NEXT系统已经势不可挡了 想必大家都已经迫不及待地想要进行尝试。 估计大家都有着同样的疑问&#xff1a; 会不会是下一个风口&#xff1f;转鸿蒙应用开发难吗&#xff1f; 会不会是下一个风口&#xff1f; 自从鸿蒙…

江科大stm32 定时器 TIM输出比较--学习笔记

这几天遇到输出比较相关的问题&#xff0c;于是来学习下TIM输出比较部分知识点&#xff01; 输出比较简介 CNT是计数器的值&#xff0c;CCR寄存器是捕获/ 比较寄存器 简单的讲&#xff0c;输出比较就是用来输出PWM波形。 PWM简介 占空比&#xff1a;高电平占一个周期的比例。…

搜索算法(算法竞赛、蓝桥杯)--双向BFS字串变换

1、B站视频链接&#xff1a;B19 双向BFS 字串变换_哔哩哔哩_bilibili 题目链接&#xff1a;[NOIP2002 提高组] 字串变换 - 洛谷 #include <iostream> #include <queue> #include <unordered_map> using namespace std;const int N7; int n; string A,B,a[N]…

opencascade c#例程解析

1.编译 将msvc.bat文件拖入vs2022的x64 native tools&#xff0c;即可 2.about.xaml <Windowxmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"x:Class"IE_WPF_WinForms…

前后端项目-part03

文章目录 5.4.4 机构名称5.4.4.1 创建实体类Company5.4.4.2 创建实体类CompanyMapper5.4.4.3 创建实体类CompanyService5.4.4.4 创建实体类CompanyController5.4.4.5 后端测试5.4.4.6 修改basic.js5.4.4.7 修改course.vue5.4.4.8 测试5.4.5 课程标签5.4.5.1 效果5.4.5.2 修改co…

后台管理系统: 权限管理

权限管理 角色:一家企业而言&#xff1a;BOSS、运维、销售、程序员 权限:超级管理员&#xff08;BOSS&#xff09;&#xff0c;是有权利操作整个项目的所有的模块 test&#xff08;新媒体&#xff09;&#xff0c;只能首页、商品管理者一部分菜单数据 admin&#xff1a;…

ClickHouse 指南(三)最佳实践 -- 主键稀疏索引

在ClickHouse主索引的实用介绍 ClickHouse release 24.1, 2024-01-30 1、简介 在本指南中&#xff0c;我们将深入研究ClickHouse索引。我们将详细说明和讨论: ClickHouse中的索引与传统的关系数据库管理系统有何不同ClickHouse是如何构建和使用表的稀疏主索引的什么是在Clic…

Curator基本使用

文章目录 1. 基本操作1.1 建立连接1.2 创建结点1.3 查询结点查询数据查询子结点查看结点信息 1.4 修改结点普通修改带乐观锁的修改 1.5 删除删除单个结点删除带子结点的结点必须成功的删除带回调函数的删除 2. 监听器事件2.1 NodeCache单一结点连续监听2.2 PathChildrenCache监…