① Docker:容器管理(启动参数,查看容器和日志,进入和修改容器)
摘要: Docker
容器是一个精简版的操作系统,一般一个容器只运行一个应用,容器通过镜像创建,使用 docker run 命令创建,容器起到了 隔离 作用,容器和容器之间独享空间和网络等
容器的基本操作包括创建(启动),停止,重启,查看,检查等,容器通过镜像创建,使用 docker run 命令创建,需要指定run参数,镜像名,容器执行命令,语句格式如下
在实际使用中启动一个镜像,例如
-e 设置环境变量,格式是 -e k1=v1 -e k2=v2 ,使得在docker镜像中的程序能够直接访问到环境变量,同时可以作为配置参数放在docker run启动镜像的时候设置,而不是写死在dockerfile在build的过程中,-e和dockerfile中的 ENV 变量作用相同,当变量重名时-e替换ENV,下面测试一些-e参数,在Dockerfile指定环境变量
直接构建成容器
开启一个终端启动容器内部,打印指定的环境变量a
此时在run指令中增加-e设置环境变量,可见-e替换了Dockerfile中指定的环境变量
因为一个镜像可以启动多个容器,所以可以通过设置不同-e达到设置不同配置参数的目的,比如下一个例子在Dockerfile中设置和将环境变量写入yaml文件再供Python调用,执行的内容为打印yaml配置文件的参数内容,比如下面这个例子先看下目录结构
其中config.yml是一个空配置文件,在run.sh中先使用echo写入追加配置参数到config.yml在执行Python脚本
Dockerfile中启动run.sh脚本作为容器执行命令
在启动容器时,使用-e指定环境变量,在run.sh中echo将环境变量拿到和写入配置文件,测试多次以不同的配置参数启动容器如下
-v 设置挂载运行,将宿主机当前目录下的文件挂载到容器中/home目录下,例如
如果挂载的目录和Dockerfile中的COPY的目录不一致, -v会替代COPY或者ADD ,例如现在Docker中COPY一个文件到容器/home目录下
同目录下start.sh内容是打印1
构建镜像结束后,指定-v启动,起始挂载另外一个目录,目录下start.sh内容是打印2
docker run参数中最后的COMMAND会覆盖Dockerfile中指定的 CMD ,例如执行echo 2替换原始Dockerfile中的CMD echo 1,输出结果是2且执行完毕后退出
对于Dockerfile中的 ENTRYPOINT 指定的启动命令docker run的COMMAND不会覆盖,如果要覆盖Docker中的ENTRYPOINT需要指定docker run中的 --entrypoint 参数,格式是
测试一个Dockerfile输出1
在docker run中使用--entrypoint覆盖Dockerfile中的ENTRYPOINT
容器启动后通过 docker ps 或者 docker container ls 查看容器,可以增加额外参数比如 -a 显示所有容器,默认只显示运行的容器,可以增加 --no-trunc 参数使得显示结果不截断,例如
显示结果分别显示了容器的ID,镜像,执行命令,创建时间,状态,端口映射(宿主机->容器)和容器名称。对于已经运行的容器可以使用 docker stop 停止,如果在docker run时增加--rm参数则停止的容器保留不会自动删除,例如
除了docker stop命令还有一种停止容器的命令 docker kill ,相比于docker stop,docker kill是 强制立即停止 ,而docker stop是先给了容器10秒(默认)的时间,使得容器有一定的时间处理、保存程序执行现场, 优雅的退出程序 ,例如
在容器停止之后可以使用 docker start 再启动一个停止的容器,例如
除此之外可以使用 docker restart ,此时容器可以使停止的也可以是在运行中的,例如
查看容器详情使用 docker inspect ,比如
在以上截取的内容中展示了容器详情,包括容器id,创建时间,执行命令和参数,执行状态,容器pid,落脚点,环境变量,网络设置,端口映射等,也可以使用Go语言风格输出指定的详情,比如分别只看容器的pid和容器的执行命令
容器是一个操作系统,可以进入这个操作系统查看容器的运行情况,有多种方式进入容器,其中主要是使用 docker exec 进入容器,在一个运行中的容器中执行一个命令,使用 -it 并带有 /bin/bash 命令就可以进入容器,比如
除了/bin/bash也可以是其他命令挂载exec后面则可以直接对一个运行中的容器执行命令,比如查看容器的进入落脚点路径,容器中的内存情况
当容器以后台 -d 运行时,日志运行在容器内部,可以进入容器内部查看日志,也可以使用 docker logs 查看日志,以一个flask api接口的容器为例,日志写入文件,同时也会输出在flask的控制台
创建Dockerfile以及构建镜像,启动容器
启动一个脚本不断请求api接口
进入容器内部查看日志
另一种方式是直接使用 docker logs 命令,比如使用 -f 追踪输出,并且从最后的第1行开始输出
此时宿主机的logs目录下为空,容器中的logs目录下存在detail.log文件,如果使用 -v 将宿主机目录挂载到容器作为容器写入的目录,则容器中数据的变动会同步到本地,这样可以直接在本地查看日志,修改容器启动为 -v 挂载的形式
此时本地logs目录下开始产生日志,且这个日志和容器内的logs目录下一致
如果容器内的内容改变了,此时删除容器从镜像重新启动容器则改动的内容将不会存在,如果相对修改过的容器保留下来则可以从容器生成新的镜像,先测试以下容器内修改在删除的容器后将不再生效,在已有容器中使用pip安装Python包
此时退出容器,并且删除容器,最后从镜像重新生成容器
此时进入容器检查,并不存在pymongo包
如果要容器变化保存下来需要以这个新容器生成一个镜像,使用 docker commit ,语法如下
以新安装pymongo的容器为例,对新容器使用docker commmit
新生成的镜像叫做xiaogp/my_image_test:v2
从新镜像启动容器并进入容器查看存在新安装的pymongo
② 日志的查看
1.首先需要堡垒机的地址,可能涉及权限,找相应的开发开一个权限,堡垒机上会有web终端的入口,或者终端里面命令 ssh [email protected]
2.找到对应的模块,进入到模块里面查看日志
eg:student的日志可以进入下面模块查看
日志的查询模式:
1.按照时间节点查询
2.不按照日期,直接进到业务日志下面找
3.关键字过滤
4.动态实时查询日志
tail -f stdout.log 退出 ctrl+C
日志常用的命令:
tail -f stdout.log
tail -f stdout.log | grep 'demo'
grep 'demo' stdout.log
grep 'demo' stdout.log -A 10 前 10 行
grep 'demo' stdou.log -B 10 后 10 行
grep 'demo' stdout.log -C 10 前后 10 行
grep 'fb51b67c01de0392b0d50f3bfe1 29df0' info-2020-06.log
grep正则
告警标记有机器、logID
mq 日志(公司内用的是rocketmq,先知道mq消费事件,在查messagevent)
grep '发送消息' stdout.log,查询到 messageId
grep 'messageId' stdout.log,到消费者机器查询消费信息
某个接口404怎么办
常见原因:1)可能是Java服务没启动 2)url请求错误(全链路适用)
调试方法:找到对应的模块,看下tomcat是否启动,未启动先启动服务
ps -ef|grep tomcat可查看状态;查出对应的pid
可以对进程进行强制杀死等操作【kill -1365 pid】
③ Docker常用命令,值得收藏
使用指定的镜像来运行容器,并可选地在容器中运行指定的命令。
分离模式 :通过 -d 选项指定;容器会在任务(进程)结束时退出。
前台模式 :可以将控制台连接到容器中进程的标准输入、输出、错误;通过 -t 选项可以为其分配一个伪终端;通过 -i 选项可以保持标准输入处于打开状态。
--rm 选项能够在容器退出时自动删除容器。
罗列容器。
-a 选项可以列出所有的容器。
查看容器的详细信息。
查看容器中运行的进程。
持续输出容器的资源使用情况。
查看容器的端口映射。
查看容器的日志(标准输出、错误的内容)。
-f 选项可以持续输出容器的日志。
将本地终端的标准输入、输出、错误连接到容器。
在运行的容器中执行指定的命令。
使用 freezer cgroup 挂起容器中的所有进程(进程对挂起操作是无感知的)。
恢复容器中挂起的进程。
停止容器,终止容器中的进程:首先发送 SIGTERM 信号给容器中的进程,一段时间之后发送 SIGKILL 信号。
启动停止的容器(还是运行之前给定的命令)。
删除指定的容器。
--force 选项可以强制性删除运行的容器。
在容器和主机之间拷贝文件、目录。
将容器的文件系统(不包括卷的内容)导出为 tar 文件,后续可通过 docker import 来加载镜像。
查看所有的顶层镜像。
-a 选项可以查看所有的镜像。
搜索 docker hub。
拉取镜像。
基于源镜像创建一个包含 tag 的镜像。
推送镜像。
从 tar 文件中加载镜像。
保存镜像为 tar 文件,后续可通过 docker load 来加载。
可通过 -o 选项将镜像保存至指定的文件,默认输出到标准输出。
从标准输入或 tar 文件中加载镜像。
-i 选项指定从 tar 文件中加载镜像。
删除本地镜像。如果 IMAGE 包含了 tag,且该镜像具有多个 tags,则此命令只是移除该 tag,而不会删除镜像。
-f 选项可强制删除运行容器所用的镜像。
④ Docker logs 命令参数&使用场景
Docker logs 用于查看容器运行日志
docker logs :用于输出容器的所有日志,需要注意容器的日志总量
docker logs --detail:显示详细信息
docker logs -t :针对每行日志添加时间戳
docker logs -f:跟踪实时日志输出
docker logs --tail n :输出倒数N行的日志
docker logs --since 绝对时间/相对时间 (s,m,h):获取从since开始的日志
docker logs --until 绝对时间/相对时间(s,m,h):获取until以前的日志
⑤ linux查看日志的命令是具体怎么用
Linux查看日志的命令有很多,比如tail、cat、tac、head、echo等,今天给大家介绍几种常用的方法:
1、tail-实时查看变化的日志
命令格式:tail [必要参数][选择参数][文件]
-f:循环读取
-q:不显示处理信息
-v:显示详细的处理信息
-c<数目>:显示的字节数
-n<行数>:显示行数
-q, --quiet, --silent:从不输出给出文件名的首部
-s, --sleep-interval=S:与-f合用,表示在每次反复的间隔休眠S秒
2、head
跟tail相反,head是看日志的前多少行
head -n 10 test.log:查询日志文件中的前10行日志;
head -n -10 test.log:查询日志文件除了最后10行的其他所有日志;
3、cat-搜索关键字附近的日志
cat是由第一行到最后一行连续显示在屏幕上
最常用的命令:cat -n filename | grep "关键字"
cat app.log | grep -C 5 '关键字':显示日志里匹配字串那行以及前后5行;
cat app.log | grep -B 5 '关键字':显示匹配字串及前5行;
cat app.log | grep -A 5 '关键字':显示匹配字串及后5行;
4、more
more命令是一个基于vi编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持vi中的关键字定位操作。
more的语法:more 文件名
⑥ linux查看日志的命令是具体怎么用
tail -f 日志文件路径主要用于查看实时的日志记录,属于动态记录查看。
cat日志路径主要用于查看静态的历史日志记录,一般跟路径名称,常见的这周类型的日志记录一般用管道符进行过滤筛选自己所需的记录。
dmesg主要用于调试脚本或者命令,出现异常中断来排查错误原因显示的。
tail -n 10 test.log,查询日志尾部最后10行的日志。
tail -n +10 test.log,查询10行之后的所有日志。
head -n 10 test.log,查询日志文件中的头10行日志。
head -n -10 test.log,查询日志文件除了最后10行的其他所有日志。
操作命令
首先介绍一个名词“控制台(console)”,它就是我们通常见到的使用字符操作界面的人机接口,例如dos。我们说控制台命令,就是指通过字符界面输入的可以操作系统的命令。
例如dos命令就是控制台命令。要了解的是基于Linux操作系统的基本控制台命令。有一点一定要注意,和dos命令不同的是,Linux的命令(也包括文件名等等)对大小写是敏感的,也就是说,如果你输入的命令大小写不对的话,系统是不会做出你期望的响应的。
⑦ 2021-07-10 docker 启动milvus失败
之前在win10上启动 milvus是正常的,现在换了一台centos笔记本,启动失败了。尝试了不同版本的milvus,问题依旧。
docker ps 命令看不到启动的容器。 docker ps -a 可以看到容器在刚启动,就退出了
milvus的log文件夹下是空的
查看容器的日志,命令为 sudo docker logs container_id
可以看到容器的启动日志里显示:
Invalid cpu cache size: 4G
因为这台centos的笔记本配置弱鸡,内存仅有4G。而milvus默认的要求是4+1=5G,因此启动失败
在milvus/conf/server_config.yaml 配置文件中,将cache_size 改为1GB。启动成功
⑧ linux下web工程运行期间怎么在控制台查看日志
tail -f 日志文件
⑨ Linux中的查看服务器运行的日志的命令是什么呢
在 Linux 系统中,各种日志文件(*.log)都存放于 /var/log 子目录下面,你可以在超级用户的状态 # 下,进入 /var/log 子目录,然后可以使用 more 命令查看你需要进行查看的日志。
例如:
#cd /var/log<cr>
#more last.log<cr> (查看最后登录 Linux 系统的用户名都有谁)
⑩ linux服务器中怎么查看日志内容
登录
kbkiss
Linux查看日志常用命令
1.查看日志常用命令
tail:
-n 是显示行号;相当于nl命令;例子如下:
tail -100f test.log 实时监控100行日志
tail -n 10 test.log 查询日志尾部最后10行的日志;
tail -n +10 test.log 查询10行之后的所有日志;
head:
跟tail是相反的,tail是看后多少行日志;例子如下:
head -n 10 test.log 查询日志文件中的头10行日志;
head -n -10 test.log 查询日志文件除了最后10行的其他所有日志;
cat:
tac是倒序查看,是cat单词反写;例子如下:
cat -n test.log |grep "debug" 查询关键字的日志
2. 应用场景一:按行号查看---过滤出关键字附近的日志
1)cat -n test.log |grep "debug" 得到关键日志的行号
2)cat -n test.log |tail -n +92|head -n 20 选择关键字所在的中间一行. 然后查看这个关键字前10行和后10行的日志:
tail -n +92表示查询92行之后的日志
head -n 20 则表示在前面的查询结果里再查前20条记录
3. 应用场景二:根据日期查询日志
sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p' test.log
特别说明:上面的两个日期必须是日志中打印出来的日志,否则无效;
先 grep '2014-12-17 16:17:20' test.log 来确定日志中是否有该 时间点
4.应用场景三:日志内容特别多,打印在屏幕上不方便查看
(1)使用more和less命令,
如: cat -n test.log |grep "debug" |more 这样就分页打印了,通过点击空格键翻页
(2)使用 >xxx.txt 将其保存到文件中,到时可以拉下这个文件分析
如:cat -n test.log |grep "debug" >debug.txt