总结一些日常使用的Docker命令和遇到问题的解决方法,还有ES的一些常用语句,便于提高日常工作中是Docker和ES时提供工效率。
一、Docker常用语句和问题解决
1.1什么是Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口
常用语句
1.2Docker常用命令
1.2.1基础命令
【启动docker】:systemctl start docker
【关闭docker】:systemctl restart docker
【设置随服务启动而自启动】:systemctl enable docker
【查看docker 运行状态】:systemctl status docker
【查看docker 版本号信息】:docker version 和 docker info
【docker帮助命令】:docker --help
例如:查看如何拉取 docker pull --help
1.2.2镜像命令
【查看自己服务器中docker 镜像列表】:docker images
【搜索镜像】:docker search 镜像名
【拉取镜像 】:docker pull 镜像名 和 docker pull 镜像名:tag
区别:不加tag拉取的是当前最新版本,加tag则拉取指定的版本
【运行镜像 】:docker run 镜像名
【删除镜像】:
#删除一个 :docker rmi -f 镜像名/镜像ID
#删除多个 其镜像ID或镜像用用空格隔开即可
docker rmi -f 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID
#删除全部镜像 -a 意思为显示全部, -q 意思为只显示ID
docker rmi -f $(docker images -aq)
【保存镜像】:docker save 镜像名/镜像ID -o 镜像保存在哪个位置与名字
【加载镜像】:docker load -i 镜像保存文件位置
任何装 docker 的地方加载镜像保存文件,使其恢复为一个镜像
【镜像标签】:docker tag 源镜像名:TAG 想要生成新的镜像名:新的TAG
1.2.3容器命令
【查看正在运行容器列表】:docker ps
【查看所有容器 -包含正在运行 和已停止的】:docker ps -a
【进入容器】:docker exec -it 容器名/容器ID /bin/bash
【删除容器】:
#删除一个容器
docker rm -f 容器名/容器ID
#删除多个容器 空格隔开要删除的容器名或容器ID
docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID
#删除全部容器
docker rm -f $(dockerps -aq)
【容器端口与服务器端口映射】:-p 宿主机端口:容器端口
【重启容器】:docker restart 容器ID/容器名
【启动容器】:docker start 容器ID/容器名
【停止容器】:docker stop 容器ID/容器名
【kill 容器】:docker kill 容器ID/容器名
【查看容器日志】:docker logs -f --tail=要查看末尾多少行 默认all 容器ID
【更换容器名】:docker rename 容器ID/容器名 新容器名
1.2.4其他命令
【查询占用空间前十的文件目录】:du -lh --max-depth=1
【查看docker日志的大小】:
find /data/docker/lib/docker/containers/ -name -json.log\nsudo du -d1 -h /var/lib/docker/containers//* | sort -h\ES
【清空Docker日志】:sudo sh -c "cat /dev/null > ${log_file}"
1.3问题和解决方法
1.3.1【docker空间不足】
docker: failed to register layer: devnapper: Thin Pool has 311442 free data blocks which is less than nininum required 327680 free data blocks. Create nore free space in thin pool or use dn.nin free space option to change behavior.
【检测容器空间】:
docker info | grep Data
解决办法:
vim /usr/lib/systemd/system/docker.service 文件
【重启docker生效】:
systemctl stop docker
systemctl daemon-reload
systemctl start docker
1.3.2【docker pull拉镜像慢】
解决办法很简单:修改mirror,换成国内mirror
1.3.3【docker无法删除容器】
找到 /var/lib/docker/containers/ 下的对应容器的文件夹,将其删除,然后重启一下 dockerd 即可。我们会发现,之前无法删除的容器没有了。
1.3.4【Docker 删除镜像报错】
出现这个原因主要是因为 TAG,即存在其他镜像引用了这个镜像。这里我们可以使用如下命令查看对应镜像文件的依赖关系,然后根据对应 TAG 来删除镜像
# 查询依赖 - image_id表示镜像名称
$ docker image inspect --format='{{.RepoTags}} {{.Id}} {{.Parent}}' $(docker image ls -q --filter since=<image_id>)
# 根据TAG删除镜像
$ docker rmi -f c565xxxxc87f
二、ES常用的语句
2.1什么是ES
ES全称是Elasticsearch是一个基于Lucene库的搜索引擎。提供分布式、支持多租户的全文搜索引擎,具有HTTP Web接口和无模式JSON文档。Elasticsearch是用Java开发的,并在Apache许可证下作为开源软件发布。
2.2ES可正常使用的客户端工具
由于ES的一些版本需要达到ES的白金版级别部分ES客户端才能可视化对ES库进行操作,以下工具可以满足一定条件的ES操作能力
(1)常用的客户端工具网页版【kibana】
(2)接口测试工具例如postman、aipfox等(注:这种需要对ES库表的字段结构非常了解)
(3)可视化数据库工具DataGrip下安装的插件【EDQL】和【Cap Elasticsearch Cluster】
2.3ES常用语句
这里以接口工具【aipfox】查询举例,使用接口工具请求一定要配置请求头
2.3.1ES查询
GET http://ES部署的服务器地址:端口号/索引名/_search
【查询表内所有数据】
{
"from": 0,
"size": 10,
"query": {
"match_all": {}
}
}
【按条件查询】--单一条件
{
"track_total_hits": true,
"query": {
"match": {
"callRecord.taskName": "任务测试07011517"
}
}
}
【按条件查询】--单条件and和or
{
"from":1,
"size":5,
"query": {
"match": {
"smsContent": {
"query": "java 学习",
"operator": "or" //或者关系
"minimum_should_match": 2
}
}
}
}
{
"query": {
"match": {
"smsContent": {
"query": "java 学习",
"operator": "and" //并且关系
}
}
}
}
【按条件查询】--多条件查询
{
"query": {
"bool": {
"must": [
{
"match_phrase": {
"task.taskName": "海尔_机器人任务_20220711_重呼扣费_004"
}
},
{
"match_phrase": {
"task.taskStatus": 2
}
},
{
"match_phrase": {
"task.callRound": 1
}
}
]
}
}
}
2.3.2ES修改
POST http://ES部署的服务器地址:端口号/索引名/_update_by_query
【根据条件修改数据】--修改单个数据
{
"script": {
"source": "ctx._source['costTime']='2022-06-30 11:31:38'"
},
"query": {
"bool": {
"must": [
{
"match_phrase": {
"companyId": 1194
}
},
{
"match_phrase": {
"costTime": "2022-07-13 16:41:28"
}
}
]
}
}
}
【根据条件修改数据】--修改多个数据
{
"script": {
"inline": "ctx._source['billDate']='2022-02';ctx._source['statisticsTime']='2022-03-04 15:40:00';ctx._source['monthlyCostId']='2022-02_1194'"
},
"query": {
"bool": {
"must": [
{
"match": {
"companyId": "1194"
}
}
]
}
}
}
2.3.3ES插入
POST http://ES部署的服务器地址:端口号/索引名/_bulk
【多条插入】(注:插入数据要注意,上条数据换下条数据中间要有换行,否则执行数据插入的时候会报错)
{"index": {"_id": "2022-05_1194"}}
{"monthlyCostId": "2022-05_1194","companyId": 1194,"statisticsTime": "2022-06-06 11:00:00","billDate": "2022-05","costMoney": 6.9,"robotCost": 6.9,"seatsCost": 0.0,"notifyCost": 0.0,"messageCost": 0.0}
{"index": {"_id": "2022-04_1194"}}
{"monthlyCostId": "2022-04_1194","companyId": 1194,"statisticsTime": "2022-05-06 11:00:00","billDate": "2022-04","costMoney": 1116.9,"robotCost": 16.9,"seatsCost": 888.888,"notifyCost": 777.77,"messageCost": 66666.66}
{"index": {"_id": "2022-03_1194"}}
{"monthlyCostId": "2022-03_1194","companyId": 1194,"statisticsTime": "2022-04-06 11:00:00","billDate": "2022-03","costMoney": 1116.9,"robotCost": 16.9,"seatsCost": 888.888,"notifyCost": 777.77,"messageCost": 66666.66}
2.3.4ES删除
(1)删除指定id的数据
DELETE http://ES部署的服务器地址:端口号/索引名/_doc/要删除数据的ID
(2)删除索引
DELETE http://ES部署的服务器地址:端口号/索引名
(2)根据条件删除数据
POST /spouse/female/_delete_by_query
{
"query":{
"match":{
"age":24
}
}
}
注:以上分享展示的内容和部分图片来源于网络截取