目录
一、Docker概述
1、简介
2、核心概念
3、安装Docker
1、安装linux虚拟机
2、在linux虚拟机上安装docker
4、Docker常用命令&操作
1.镜像操作
2.容器操作
安装tomcat
访问tomcat报404-未找到错误
docker容器内修改文件
挂载宿主目录到容器--为了方便拷贝文件传输
5、Docker启动和关闭所有容器命令
二、Docker中软件安装
1、安装MySQL示例
2、安装RabbitMQ示例
3、安装ElasticSearch示例
失败经验:
4、安装Zookeeper示例
4.1docker中查看注册进zookeeper中服务方式
5、安装mongdb示例
6、安装MinIO示例
7、redis安装
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中, 然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。
Docker支持将软件编译成一个镜像;然后 在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像。 运行中的这个镜像称为容器,容器启动是非常快速的。类似windows里面的ghost操作系统,安装好后什么都有了;
docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上);
docker客户端(Client):连接docker主机进行操作;
docker仓库(Registry):用来保存各种打包好的软件镜像;
docker镜像(Images):软件打包好的镜像;放在docker仓库中;
docker容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用
使用Docker的步骤:
1.安装Docker
2.去Docker仓库找到这个软件对应的镜像;
3.使用Docker运行这个镜像,这个镜像就会生成一个Docker容器;
4.对容器的启动停止就是对软件的启动停止;
①VMWare、VirtualBox(安装)
②导入相关虚拟机镜像等
③双击启动linux虚拟机
④使用客户端连接linux服务器进行命令操作
⑤设置虚拟机网络
⑥设置好网络以后使用命令重启虚拟机的网络(不同机器可能命令不一样)
service network restart
⑦查看linux的ip地址
ip addr
⑧使用客户端连接linux
步骤:
1、检查内核版本,必须是3.10及以上
uname ‐r
2、安装docker
yum install docker
3、输入y确认安装
4、启动docker
[root@localhost ~]# systemctl start docker
[root@localhost ~]# docker ‐v
Docker version 1.13.1, build 7d71120/1.13.1
5、开机启动docker
[root@localhost ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi‐user.target.wants/docker.service to
/usr/lib/systemd/system/docker.service.
6、停止docker
systemctl stop docker
CentOS 7 安装报错:Cannot find a valid baseurl for repo: base/7/x86_6
可能是连不上网:ping 114.114.114.114 检查网络是否连通。
Docker启动报错:Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
解决方式,卸载Docker,再安装。
1.查询安装过的包
yum list installed | grep docker
本机安装过旧版本
docker.x86_64,docker-client.x86_64,docker-common.x86_64
2.删除安装的软件包
yum -y remove docker.x86_64
yum -y remove docker-client.x86_64
yum -y remove docker-common.x86_64
卸载不行,把yum包更新到最新
yum update
重启虚拟机再重新安装docker
使用docker pull ..发现
报:Get https://registry-1.docker.io/v2/
说明网络断开
可能是连不上网:ping 114.114.114.114 检查网络是否连通。 ping www.baidu.com
#可查看docker 信息,保存路径等
docker info
操 作 | 命令 | 说明 |
检 索 | docker search 关键字 例如:docker search redis |
我们经常去docker hub上检索镜像的详细信息,如镜像的TAG。 Docker Hub |
拉 取 | docker pull 镜像名:tag | :tag是可选的,tag表示标签,多为软件的版本,默认是latest |
列 表 | docker images | 查看所有本地镜像 |
删 除 | docker rmi 镜像id | 删除指定的本地镜像 |
软件镜像---->运行镜像---->产生一个容器(正在运行的软件);
操作 | 命令 | 说明 |
运行 | docker run --name container-name -d image-name eg:docker run –name myredis –d redis | --name:自定义容器名 -d:后台运行 image-name:指定镜像模板 |
列表 | docker ps(查看运行中的容器); | 加上-a;可以查看所有容器 |
停止 | docker stop container-name/container-id | 停止当前你运行的容器 |
启动 | docker start container-name/container-id | 启动容器 |
删除 | docker rm container-id | 删除指定容器 |
端口映射 | -p 6379:6379 例:docker run -d -p 6379:6379 --name myredis docker.io/redis |
-p: 主机端口(映射到)容器内部的端口 |
容器日志 | docker logs container-name/container-id | 查看镜像启动日志 |
更多命令 | docker | Docker Documentation 也可以参考每一个镜像的文档 |
步骤:
1、搜索镜像
[root@localhost ~]# docker search tomcat
2、拉取镜像
[root@localhost ~]# docker pull tomcat
3、根据镜像启动容器
docker run ‐‐name mytomcat ‐d tomcat:latest
4、查看运行中的容器
docker ps
5、 停止运行中的容器
docker stop 容器的id
6、查看所有的容器
docker ps ‐a
7、启动容器
docker start 容器id
8、删除一个容器
docker rm 容器id
9、启动一个做了端口映射的tomcat(在本地访问linuxIP地址:8888)
[root@localhost ~]# docker run ‐d ‐p 8888:8080 tomcat
‐d:后台运行
‐p: 将主机的端口映射到容器的一个端口 主机端口:容器内部的端口
10、关闭了linux的防火墙,才能在外面访问到对应的服务
service firewalld status ;查看防火墙状态
service firewalld stop:关闭防火墙
11、查看容器的日志
docker logs container‐name/container‐id
12、查看docker中启动的镜像占用的内存
docker stats
原因:tomcat下webapps文件夹下使用ls发现没有任何文件
解决方式:
1、查看运行容器docker ps
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
74d6522815b8 tomcat "catalina.sh run" 16 minutes ago Up 16 minutes 0.0.0.0:8081->8080/tcp tomcat1
[root@localhost ~]#
2、docker exec -it 74d6522815b8 /bin/bash
[root@localhost ~]# docker exec -it 74d6522815b8 /bin/bash
3、查看tomcat下目录结构,webapps文件夹下是空白
root@74d6522815b8:/usr/local/tomcat# ls
BUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.dist
CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps work
root@74d6522815b8:/usr/local/tomcat# cd webapps
root@74d6522815b8:/usr/local/tomcat/webapps# ls
root@74d6522815b8:/usr/local/tomcat/webapps#
4、解决方式一:把webapps.dist下的文件复制到webapps下面
root@74d6522815b8:/usr/local/tomcat/webapps# cd ..
root@74d6522815b8:/usr/local/tomcat# mv webapps.dist/* webapps
....
...
此时再查看webapps文件夹,有文件
root@74d6522815b8:/usr/local/tomcat# cd webapps
root@74d6522815b8:/usr/local/tomcat/webapps# ls
ROOT docs examples host-manager manager
5、解决方式二:把webapps文件夹删除,把webapps.dist改为webapps
root@74d6522815b8:/usr/local/tomcat/webapps# cd ..
root@74d6522815b8:/usr/local/tomcat# rm -rf webapps
root@74d6522815b8:/usr/local/tomcat# mv webapps.dist webapps
.........
此时再查看webapps文件夹,有文件
root@74d6522815b8:/usr/local/tomcat# cd webapps
root@74d6522815b8:/usr/local/tomcat/webapps# ls
ROOT docs examples host-manager manager
再访问浏览器成功
访问浏览器:
==============
1.进入容器
执行命令:docker exec -it 镜像id /bin/bash
2.Docker容器中创建文件并进行修改需要安装vim
这里要下载vim,不然无法对文件进行修改 具体执行如下两个命令:apt-get update、apt-get install vim
1.tomcat 容器 webapps 路径:/usr/local/tomcat/webapps
2.在宿主目录下新建目录 /home/tomcat1/webapps和/home/tomcat2/webapps
3.停止 tomcat 容器并删除该容器
1、查看容器id
docker ps -a
2、停止容器
docker stop 容器id
3、删除容器
docker rm 容器id
--------------------
4、对于开启自启动的镜像进行取消自启动
docker update --restart=no
5、开启自启动
docker update –restart=always
6、取消所有自启动
docker update --restart=no $(docker ps -q)
4.重新跑一个 tomcat 容器并挂载宿主目录
1、运行容器tomcat1
docker run --name tomcat1 -d -p 8080:8080 -v /home/tomcat1/webapps:/usr/local/tomcat/webapps --privileged=true tomcat
2、运行容器tomcat2
docker run --name tomcat2 -d -p 8081:8080 -v /home/tomcat2/webapps:/usr/local/tomcat/webapps --privileged=true tomcat
--privileged=true命令:从容器中拷贝文件到宿主机发现没有权限,添加--privileged=true命令,有拷贝文件等权限。
1、docker中 启动所有的容器命令
docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)
2、docker中 关闭所有的容器命令
docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)
3、docker中 删除所有的容器命令
docker rm $(docker ps -a | awk '{ print $1}' | tail -n +2)
4、docker中 删除所有的镜像
docker rmi $(docker images | awk '{print $3}' |tail -n +2)
docker pull mysql
错误的启动
[root@localhost ~]# docker run ‐‐name mysql01 ‐d mysql
42f09819908bb72dd99ae19e792e0a5d03c48638421fa64cce5f8ba0f40f5846
mysql退出了
[root@localhost ~]# docker ps ‐a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
42f09819908b mysql "docker‐entrypoint.sh" 34 seconds ago Exited(1) 33 seconds ago mysql01
//错误日志
[root@localhost ~]# docker logs 42f09819908b
error: database is uninitialized and password option is not specified
You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and
MYSQL_RANDOM_ROOT_PASSWORD;//这个三个参数必须指定一个
正确的启动
[root@localhost ~]# docker run ‐‐name mysql01 ‐e MYSQL_ROOT_PASSWORD=123456 ‐d mysql
b874c56bec49fb43024b3805ab51e9097da779f2f572c22c695305dedd684c5f
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b874c56bec49 mysql "docker‐entrypoint.sh" 4 seconds ago Up 3 seconds 3306/tcp mysql01
做端口映射
[root@localhost ~]# docker run ‐p 3306:3306 ‐‐name mysql02 ‐e MYSQL_ROOT_PASSWORD=123456 ‐d mysql
ad10e4bc5c6a0f61cbad43898de71d366117d120e39db651844c0e73863b9434
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ad10e4bc5c6a mysql "docker‐entrypoint.sh" 4 seconds ago Up 2 seconds 0.0.0.0:3306‐>3306/tcp mysql02
几个其他的高级操作
docker run ‐‐name mysql03 ‐v /conf/mysql:/etc/mysql/conf.d ‐e MYSQL_ROOT_PASSWORD=my‐secret‐pw
‐d mysql:tag
把主机的/conf/mysql文件夹挂载到 mysqldocker容器的/etc/mysql/conf.d文件夹里面
改mysql的配置文件就只需要把mysql配置文件放在自定义的文件夹下(/conf/mysql)
docker run ‐‐name some‐mysql ‐e MYSQL_ROOT_PASSWORD=my‐secret‐pw ‐d mysql:tag ‐‐character‐set‐server=utf8mb4 ‐‐collation‐server=utf8mb4_unicode_ci
指定mysql的一些配置参数
docker pull rabbitmq:3-management
3-management版本因为带后台管理系统。
docker images //查看镜像
//启动RabbitMQ镜像
docker run -d -p 5672:5672 -p 15672:15672 --name myrabbitmq 镜像ID
镜像启动运行后,访问http://IP:15672/
用户名密码:guest/guest
从docker github搜索elasticsearch查看版本7.9.2
docker pull elasticsearch:7.9.2
通过镜像,启动一个容器,并将9200和9300端口映射到本机(ElasticSearch
的默认端口是9200,我们把宿主环境9200端口映射到Docker
容器中的9200端口)
ElasticSearch JAVA编写的,运行消耗内存2G多,启动时需要限制内存-e ES_JAVA_OPTS="-Xms256m -Xmx256m",
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -e "discovery.type=single-node" -d -p 9200:9200 -p 9300:9300 --name ES01 镜像ID
运行完,查看是否启动ElasticSearch
#查看运行的容器
docker ps
成功运行会显示9200等端口容器信息。
验证ElasticSearch是否安装成功:
#linux docker环境端验证,出现json数据代表成功
curl 'http://localhost:9200'
浏览器端验证:http://IP地址:9200
结果如下代表成功:
{
"name" : "23da5ddf57e3",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "kidKPuQZRLKe2QlYuuOLoQ",
"version" : {
"number" : "7.9.2",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "d34da0ea4a966c4e49417f2da2f244e3e97b4e6e",
"build_date" : "2020-09-23T00:45:33.626720Z",
"build_snapshot" : false,
"lucene_version" : "8.6.2",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
我第一次安装失败,比较坎坷,当时pull拉取镜像网速比较慢。
拉取多次才弄完。最后安装一直有报错。 怀疑是拉取的镜像有问题。
#查看日志
docker logs 镜像ID
报错信息如下:
error:
Invalid -Xlog option '-Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m', see error log for details.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
at org.elasticsearch.tools.launchers.JvmErgonomics.flagsFinal(JvmErgonomics.java:126)
at org.elasticsearch.tools.launchers.JvmErgonomics.finalJvmOptions(JvmErgonomics.java:88)
at org.elasticsearch.tools.launchers.JvmErgonomics.choose(JvmErgonomics.java:59)
at org.elasticsearch.tools.launchers.JvmOptionsParser.jvmOptions(JvmOptionsParser.java:137)
at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:95)
网上说:ElasticSearch不能root权限安装,需要jdk环境,等等。试完都不成功。
没有好的解决方式。
最后访问浏览器老是访问拒绝。
最后重新整一个新的虚拟机环境,重新拉取ElasticSearch,重新安装,验证成功。
#拉取zookeeper
docker pull zookeeper
#查看镜像
docker images
#运行zookeeper
docker run --name zk01 -p 2181:2181 --restart always -d 镜像ID
#查看是否运行成功
docker ps
1、docker ps 查看容器id
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
70baef548c15 763543bbcf0a "/docker-entrypoin..." 6 weeks ago Up 14 minutes 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, 8080/tcp zk01
2、docker exec -it 容器id /bin/bash
[root@localhost ~]# docker exec -it 70baef548c15 /bin/bash
root@70baef548c15:/apache-zookeeper-3.7.0-bin#
3、zkCli.sh 进入zookeeper的客户端
root@70baef548c15:/apache-zookeeper-3.7.0-bin#zkCli.sh
...
[zk: localhost:2181(CONNECTED) 0]
4、ls / 查看根节点
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 1]
1、拉取镜像
docker pull mongo:latest
2、创建目录
mkdir -p /mongodb/datadb
3、修改目录权限
chmod 777 /mongodb/datadb
4、运行镜像
docker run -d --name mongodb -v /mongodb/datadb:/data/db -p 27017:27017 -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=admin --privileged=true mongo
注:
-d 后台运行容器
--name mongodb 运行容器名
-v /mongodb/datadb:/data/db 挂载目录
-p 27017:27017:将27017映射到外部端口27017 将容器的27017端口映射到主机的27017端口,27017是和宿主机的通信接口,所有docker内部容器的连接使用27017接口,集群配置需连接容器内部27017端口,故最好保持前后端口一致
-e MONGO_INITDB_ROOT_USERNAME=admin 指定用户名
-e MONGO_INITDB_ROOT_PASSWORD=admin 指定密码
--privileged=true 使得容器内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限
5、查看mongodb日志
docker logs mongodb
1、搜索镜像
[root@localhost ~]# docker search minio
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/minio/minio Multi-Cloud Object Storage 646 [OK]
docker.io docker.io/bitnami/minio Bitnami MinIO Docker Image 60
docker.io docker.io/minio/mc Minio Client (mc) provides a modern altern... 37 [OK]
.....
2、拉取镜像
docker pull minio/minio
3、查看镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/minio/minio latest f0e517148bc5 17 hours ago 303 MB
docker.io/mongo latest 1cca5cf68239 8 weeks ago 695 MB
docker.io/mongo 3.2 fb885d89ea5c 4 years ago 300 MB
[root@localhost ~]#
4、创建目录
mkdir -p /minio/data
mkdir -p /minio/config
5、修改目录权限
chmod 777 /minio/data
chmod 777 /minio/config
6、运行镜像
docker run -d -p 9000:9000 -p 9001:9001 --name=minio --restart=always --privileged=true -e "MINIO_ROOT_USER=admin" -e "MINIO_ROOT_PASSWORD=12345678" -v /minio/data:/data -v /minio/config:/root/.minio minio/minio server /data --console-address ":9001" --address ":9000"
------------------------------------------------------------
这里的 \ 指的是命令还没有输入完,还需要继续输入命令,先不要执行的意思。
这里的9001端口指的是minio的客户端端口。虽然设置9001,但是我们在访问9000的时候,他也会自动跳到9001。
9000端口是minio的服务端端口,我们程序在连接minio的时候,就是通过这个端口来连接的。
-v就是docker run当中的挂载,这里的/minio/data:/data意思就是将容器的/data目录和宿主机的/minio/data目录做映射,这样我们想要查看容器的文件的时候,就不需要看容器当中的文件了。
注意在执行命令的时候,他是会自动在宿主机当中创建目录的。我们不需要手动创建。
minio所上传的文件默认都是存储在容器的data目录下的!
假如删除容器了宿主机当中挂载的目录是不会删除的。假如没有使用-v挂载目录,那他在宿主机的存储位置的文件会直接删除的。
宿主机的挂载目录一定是根目录,如果是相对路径会有问题。还有容器当中的目录也是必须是绝对路径(根路径就是带/的)。
所谓的挂载其实就是将容器目录和宿主机目录进行绑定了,操作宿主机目录,容器目录也会变化,操作容器目录,宿主机目录也会变化。这样做的目的 可以间接理解为就是数据持久化,防止容器误删,导致数据丢失的情况。
MINIO_ROOT_USER:账号 MINIO_ROOT_PASSWORD:密码 (正常账号应该不低于3位,密码不低于8位,不然容器会启动不成功)
--console-address 指定客户端端口
-d --restart=always 代表重启linux的时候容器自动启动
--name minio 容器名称
7、查看运行中的容器
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
46805bc81940 minio/minio "/usr/bin/docker-e..." 4 seconds ago Up 3 seconds 0.0.0.0:9000-9001->9000-9001/tcp minio
8、查看log
[root@localhost ~]# docker logs 46805bc81940
WARNING: Detected Linux kernel version older than 4.0.0 release, there are some known potential performance problems with this kernel version. MinIO recommends a minimum of 4.x.x linux kernel version for best performance
Formatting 1st pool, 1 set(s), 1 drives per set.
WARNING: Host local has more than 0 drives of set. A host failure will result in data becoming unavailable.
Warning: Default parity set to 0. This can lead to data loss.
MinIO Object Storage Server
Copyright: 2015-2022 MinIO, Inc.
License: GNU AGPLv3
Version: RELEASE.2022-12-02T19-19-22Z (go1.19.3 linux/amd64)
Status: 1 Online, 0 Offline.
API: http://172.17.0.2:9000 http://127.0.0.1:9000
Console: http://172.17.0.2:9001 http://127.0.0.1:9001
Documentation: https://min.io/docs/minio/linux/index.html
[root@localhost ~]#
9、出现如下log代表成功启动
...
API: http://172.17.0.2:9000 http://127.0.0.1:9000
Console: http://172.17.0.2:9001 http://127.0.0.1:9001
Documentation: https://min.io/docs/minio/linux/index.html
...
浏览器端验证:http://IP地址:9001
1、由于 redis 是用 C 语言开发,安装之前必先确认是否安装 gcc 环境(gcc -v),如果没有安装,执行以下命令进行安装
yum install -y gcc
2、拉取镜像
docker pull redis
3、启动redis
docker run -d --name "redis" -p 6379:6379 redis --requirepass "123456"
参数说明:
redis-server --appendonly yes : 在容器执行redis-server启动命令,并打开redis持久化配置
--requirepass:密码
我这里没有做持久化的配置
4、查看启动的容器
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
16d9d3a548a1 redis "docker-entrypoint..." 5 seconds ago Up 4 seconds 0.0.0.0:6379->6379/tcp redis
[root@localhost ~]#
5、启动成功后,我们进入 redis 客户端
docker exec -it 16d9d3a548a1 redis-cli
#16d9d3a548a1 是你的容器ID
[root@localhost ~]# docker exec -it 16d9d3a548a1 redis-cli
127.0.0.1:6379>
6、输入登录密码
[root@localhost ~]# docker exec -it 16d9d3a548a1 redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379>
7、查看帮助 redis-cli -h
[root@localhost ~]# docker exec -it 16d9d3a548a1 redis-cli -h
redis-cli 7.0.11
Usage: redis-cli [OPTIONS] [cmd [arg [arg ...]]]
-h Server hostname (default: 127.0.0.1).
-p Server port (default: 6379).
-s Server socket (overrides hostname and port).
-a Password to use when connecting to the server.
You can also use the REDISCLI_AUTH environment
variable to pass this password more safely
(if both are used, this argument takes precedence).
--user Used to send ACL style 'AUTH username pass'. Needs -a.
--pass Alias of -a for consistency with the new --user option.
--askpass Force user to input password with mask from STDIN.
If this argument is used, '-a' and REDISCLI_AUTH
environment variable will be ignored.
-u Server URI.
-r Execute specified command N times.
-i When -r is used, waits seconds per command.
It is possible to specify sub-second times like -i 0.1.
This interval is also used in --scan and --stat per cycle.
and in --bigkeys, --memkeys, and --hotkeys per 100 cycles.
-n Database number.
-2 Start session in RESP2 protocol mode.
-3 Start session in RESP3 protocol mode.
-x Read last argument from STDIN (see example below).
-X Read argument from STDIN (see example below).
-d Delimiter between response bulks for raw formatting (default: \n).
-D Delimiter between responses for raw formatting (default: \n).
-c Enable cluster mode (follow -ASK and -MOVED redirections).
-e Return exit error code when command execution fails.
--tls Establish a secure TLS connection.
--sni Server name indication for TLS.
--cacert CA Certificate file to verify with.
--cacertdir Directory where trusted CA certificates are stored.
If neither cacert nor cacertdir are specified, the default
system-wide trusted root certs configuration will apply.
--insecure Allow insecure TLS connection by skipping cert validation.
--cert Client certificate to authenticate with.
--key Private key file to authenticate with.
--tls-ciphers Sets the list of preferred ciphers (TLSv1.2 and below)
in order of preference from highest to lowest separated by colon (":").
See the ciphers(1ssl) manpage for more information about the syntax of this string.
--tls-ciphersuites Sets the list of preferred ciphersuites (TLSv1.3)
in order of preference from highest to lowest separated by colon (":").
See the ciphers(1ssl) manpage for more information about the syntax of this string,
and specifically for TLSv1.3 ciphersuites.
--raw Use raw formatting for replies (default when STDOUT is
not a tty).
--no-raw Force formatted output even when STDOUT is not a tty.
--quoted-input Force input to be handled as quoted strings.
--csv Output in CSV format.
--json Output in JSON format (default RESP3, use -2 if you want to use with RESP2).
--quoted-json Same as --json, but produce ASCII-safe quoted strings, not Unicode.
--show-pushes Whether to print RESP3 PUSH messages. Enabled by default when
STDOUT is a tty but can be overridden with --show-pushes no.
--stat Print rolling stats about server: mem, clients, ...
--latency Enter a special mode continuously sampling latency.
If you use this mode in an interactive session it runs
forever displaying real-time stats. Otherwise if --raw or
--csv is specified, or if you redirect the output to a non
TTY, it samples the latency for 1 second (you can use
-i to change the interval), then produces a single output
and exits.
--latency-history Like --latency but tracking latency changes over time.
Default time interval is 15 sec. Change it using -i.
--latency-dist Shows latency as a spectrum, requires xterm 256 colors.
Default time interval is 1 sec. Change it using -i.
--lru-test Simulate a cache workload with an 80-20 distribution.
--replica Simulate a replica showing commands received from the master.
--rdb Transfer an RDB dump from remote server to local file.
Use filename of "-" to write to stdout.
--functions-rdb Like --rdb but only get the functions (not the keys)
when getting the RDB dump file.
--pipe Transfer raw Redis protocol from stdin to server.
--pipe-timeout In --pipe mode, abort with error if after sending all data.
no reply is received within seconds.
Default timeout: 30. Use 0 to wait forever.
--bigkeys Sample Redis keys looking for keys with many elements (complexity).
--memkeys Sample Redis keys looking for keys consuming a lot of memory.
--memkeys-samples Sample Redis keys looking for keys consuming a lot of memory.
And define number of key elements to sample
--hotkeys Sample Redis keys looking for hot keys.
only works when maxmemory-policy is *lfu.
--scan List all keys using the SCAN command.
--pattern Keys pattern when using the --scan, --bigkeys or --hotkeys
options (default: *).
--quoted-pattern Same as --pattern, but the specified string can be
quoted, in order to pass an otherwise non binary-safe string.
--intrinsic-latency Run a test to measure intrinsic system latency.
The test will run for the specified amount of seconds.
--eval Send an EVAL command using the Lua script at .
--ldb Used with --eval enable the Redis Lua debugger.
--ldb-sync-mode Like --ldb but uses the synchronous Lua debugger, in
this mode the server is blocked and script changes are
not rolled back from the server memory.
--cluster [args...] [opts...]
Cluster Manager command and arguments (see below).
--verbose Verbose mode.
--no-auth-warning Don't show warning message when using password on command
line interface.
--help Output this help and exit.
--version Output version and exit.
Cluster Manager Commands:
Use --cluster help to list all available cluster manager commands.
Examples:
cat /etc/passwd | redis-cli -x set mypasswd
redis-cli -D "" --raw dump key > key.dump && redis-cli -X dump_tag restore key2 0 dump_tag replace < key.dump
redis-cli -r 100 lpush mylist x
redis-cli -r 100 -i 1 info | grep used_memory_human:
redis-cli --quoted-input set '"null-\x00-separated"' value
redis-cli --eval myscript.lua key1 key2 , arg1 arg2 arg3
redis-cli --scan --pattern '*:12345*'
(Note: when using --eval the comma separates KEYS[] from ARGV[] items)
When no command is given, redis-cli starts in interactive mode.
Type "help" in interactive mode for information on available commands
and settings.
[root@localhost ~]#
1、拉取镜像
docker pull nacos/nacos-server:2.0.3
1、拉取镜像
docker pull wurstmeister/zookeeper
docker pull wurstmeister/kafka
2.启动
2.1、启动zookeeper容器
docker run -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeper
2.2、启动kafka容器
docker run -d --name kafka --publish 9092:9092 --link zookeeper --env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 --env KAFKA_ADVERTISED_HOST_NAME=192.168.0.113 --env KAFKA_ADVERTISED_PORT=9092 --volume /etc/localtime:/etc/localtime wurstmeister/kafka:latest
192.168.0.113 改为宿主机器的IP地址,如果不这么设置,可能会导致在别的机器上访问不到kafka。
3、查看是否启动成功
docker ps
4、Docker中操作Kafka
4.1、进入到kafka容器内部
docker exec -it kafka bash
4.2、进入到kafka的安装目录,查看到kafka相关的命令
root@c4cb1dd889e8:/# cd /opt/kafka/bin/
root@c4cb1dd889e8:/opt/kafka/bin# ls
connect-distributed.sh kafka-preferred-replica-election.sh
connect-mirror-maker.sh kafka-producer-perf-test.sh
connect-standalone.sh kafka-reassign-partitions.sh
kafka-acls.sh kafka-replica-verification.sh
kafka-broker-api-versions.sh kafka-run-class.sh
kafka-cluster.sh kafka-server-start.sh
kafka-configs.sh kafka-server-stop.sh
kafka-console-consumer.sh kafka-storage.sh
kafka-console-producer.sh kafka-streams-application-reset.sh
kafka-consumer-groups.sh kafka-topics.sh
kafka-consumer-perf-test.sh kafka-verifiable-consumer.sh
kafka-delegation-tokens.sh kafka-verifiable-producer.sh
kafka-delete-records.sh trogdor.sh
kafka-dump-log.sh windows
kafka-features.sh zookeeper-security-migration.sh
kafka-leader-election.sh zookeeper-server-start.sh
kafka-log-dirs.sh zookeeper-server-stop.sh
kafka-metadata-shell.sh zookeeper-shell.sh
kafka-mirror-maker.sh
topic操作
topic操作
1、创建topic
# 执行topic脚本 添加topic:example 一个分区 一个副本
kafka-topics.sh --create --topic example --zookeeper zookeeper:2181 --replication-factor 1 --partitions 1
root@c4cb1dd889e8:/opt/kafka/bin# kafka-topics.sh --create --topic example --zookeeper zookeeper:2181 --replication-factor 1 --partitions 1
Created topic example.
2、查询topic列表
kafka-topics.sh --zookeeper zookeeper:2181 --list
root@c4cb1dd889e8:/opt/kafka/bin# kafka-topics.sh --zookeeper zookeeper:2181 --list
__consumer_offsets
example
example1
3、删除topic
root@c4cb1dd889e8:/opt/kafka/bin# kafka-topics.sh --zookeeper zookeeper:2181 --delete --topic example1
Topic example1 is marked for deletion.
Note: This will have no impact if delete.topic.enable is not set to true.
4、查询topic详情
root@c4cb1dd889e8:/opt/kafka/bin# kafka-topics.sh --zookeeper zookeeper:2181 --describe --topic example
Topic: example TopicId: 6IJ2GNWJRT6UGa1A_kYqgQ PartitionCount: 1 ReplicationFactor: 1 Configs:
Topic: example Partition: 0 Leader: 1001 Replicas: 1001 Isr: 1001
#这里我们可以看到分区数、副本数、leader等topic下的信息
5、生产者消费者
启动完消费者和生产者,这里面的消费者消费的前提是消费者命令要一直开启,
否则的话,生产者发送的数据,消费者就不会消费到,这里只能消费到实时传输的数据!
开启2个窗口一个开启生产者,发送消息,一个开启消费者,消费消息
5.1、生产者发送消息
root@c4cb1dd889e8:/opt/kafka/bin# kafka-console-producer.sh --broker-list localhost:9092 --topic example
>hello
>haha
>nihao
>
5.2、消费者消费消息
root@c4cb1dd889e8:/opt/kafka/bin# kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic example
hello
haha
nihao
更多安装可百度搜索docker 菜鸟教程,更多安装实例
Spring Boot入门+深入(一):Spring Boot入门+深入(一)
Spring Boot入门+深入(七):Spring Boot入门+深入(七)-数据访问