版权声明:本文为博主(wisdom-chen)的原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38423105/article/details/85533316
目录
Docker top :查看容器中运行的进程信息,支持 ps 命令参数
Docker 容器
- 容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。
- 容器化软件适用于基于Linux和Windows的应用,在任何环境中都能够始终如一地运行。
- 容器赋予了软件独立性,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突。
Docker 容器的基本操作命令(介绍常用的)
docker ps : 列出所有的容器
docker ps [OPTIONS]
- -a :显示所有的容器,包括未运行的。
- -f :根据条件过滤显示的内容。
- --format :指定返回值的模板文件。
- -l :显示最近创建的容器。
- -n :列出最近创建的n个容器。
- --no-trunc :不截断输出。
- -q :静默模式,只显示容器编号。
- -s :显示总的文件大小。
demo:
CONTAINER ID 容器id,IMAGE 镜像名,COMMAND指令,CREATED 创建时间,STATUS(UP代表运行中Exited退出)
PORTS 端口,NAMES 该容器的名称
[root@localhost vagrant]# docker ps -n 5
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
33b92f8cce9c wget:0.1 "/bin/bash" 22 hours ago Exited (0) 22 hours ago upbeat_curie
508ed8c3ff73 wget:0.1 "/bin/bash" 22 hours ago Exited (137) 22 hours ago stupefied_engelbart
1ce8ad1a9184 tomcat "catalina.sh run" 23 hours ago Exited (130) 23 hours ago objective_shockley
dd081da801ba 4ab4c602aa5e "/hello" 23 hours ago Exited (0) 23 hours ago practical_kepler
2047648ff8f1 4ab4c602aa5e "/hello" 2 days ago Exited (0) 2 days ago distracted_booth
docker run: 创建一个新的容器并运行一个命令
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
- -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
- -d: 后台运行容器,并返回容器ID;
- -i: 以交互模式运行容器,通常与 -t 同时使用;
- -p: 端口映射,格式为:主机(宿主)端口:容器端口
- -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- --name="nginx-lb": 为容器指定一个名称;
- --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
- --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
- -h "mars": 指定容器的hostname;
- -e username="ritchie": 设置环境变量;
- --env-file=[]: 从指定文件读入环境变量;
- --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
- -m :设置容器使用内存最大值
- --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
- --link=[]: 添加链接到另一个容器;
- --expose=[]: 开放一个端口或一组端口;
demo:
1. 将tomcat 8080映射到宿主机的8080端口
[root@localhost vagrant]# docker run -d --name mytomcat -p 127.0.0.1:8080:8080/tcp tomcat
a19687ed946291bd3687135c1ce8575d864e963f1f8414583dadc3fef43f4ecb
[root@localhost vagrant]# curl -s localhost:8080
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Apache Tomcat/8.5.37</title>
<link href="favicon.ico" rel="icon" type="image/x-icon" />
<link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />
<link href="tomcat.css" rel="stylesheet" type="text/css" />
</head>
。。。。
</html>
[root@localhost vagrant]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a19687ed9462 tomcat "catalina.sh run" 46 seconds ago Up 44 seconds 127.0.0.1:8080->8080/tcp mytomcat
2.使用-ti进入tomcat服务器
[root@localhost vagrant]# docker run -ti --name mytomcat-it tomcat /bin/bash
root@d7b9d44753c2:/usr/local/tomcat# ls
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE README.md RELEASE-NOTES RUNNING.txt bin conf include lib logs native-jni-lib temp webapps work
docker start/stop/restart
- docker start 容器id或容器name
- docker stop 容器id或容器name
- docker restart 容器id或容器name
docker 进入容器之后退出
- exit :退出并停止容器
- ctrl +p + q: 退出不停止容器
docker kill 强制停止容器
- docker kill 容器id或容器name
docker 删除容器
- docker rm 容器id
- docker rm -f ${docker ps -a -q} 批量删除
- docker ps -a -q | xargs docker rm 批量删除(以不定参的形式)
docker logs : 获取容器的日志
docker logs [OPTIONS] CONTAINER
- -f : 跟踪日志输出
- --since :显示某个开始时间的所有日志
- -t : 显示时间戳
- --tail :仅列出最新N条容器日志
demo:
mytomcat容器的2019-01-01的最新10条以时间戳显示
[root@localhost vagrant]# docker logs --since="2019-01-01" -t --tail=10 mytomcat
2019-01-01T05:19:29.259220695Z 01-Jan-2019 05:19:29.258 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/docs] has finished in [42] ms
2019-01-01T05:19:29.259220753Z 01-Jan-2019 05:19:29.258 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/examples]
2019-01-01T05:19:29.800126765Z 01-Jan-2019 05:19:29.799 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/examples] has finished in [541] ms
2019-01-01T05:19:29.800149372Z 01-Jan-2019 05:19:29.799 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/host-manager]
2019-01-01T05:19:29.868286069Z 01-Jan-2019 05:19:29.854 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/host-manager] has finished in [55] ms
2019-01-01T05:19:29.868303404Z 01-Jan-2019 05:19:29.854 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/manager]
2019-01-01T05:19:29.938959186Z 01-Jan-2019 05:19:29.933 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/manager] has finished in [79] ms
2019-01-01T05:19:29.942429797Z 01-Jan-2019 05:19:29.940 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
2019-01-01T05:19:29.985405382Z 01-Jan-2019 05:19:29.979 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
2019-01-01T05:19:29.985417055Z 01-Jan-2019 05:19:29.984 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 1741 ms
Docker top :查看容器中运行的进程信息,支持 ps 命令参数
docker top [OPTIONS] CONTAINER [ps OPTIONS]
容器运行时不一定有/bin/bash终端来交互执行top命令,而且容器还不一定有top命令,可以使用docker top来实现查看container中正在运行的进程。
[root@localhost vagrant]# docker top mytomcat
UID PID PPID C STIME TTY TIME CMD
root 4471 4456 0 06:19 ? 00:00:06 /docker-java-home/jre/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
查看所有运行容器的进程信息
for i in `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done
docker inspect : 获取容器/镜像的元数据
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
- -f :指定返回值的模板文件。
- -s :显示总的文件大小。
- --type :为指定类型返回JSON。
这个元信息有点多,我从官网找了几个demo,mytomcat 可以换成容器name或id
1. 获取当前容器的ip
[root@localhost vagrant]# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mytomcat
172.17.0.2
2. 获取该实例的日志
[root@localhost vagrant]# docker inspect --format='{{.LogPath}}' mytomcat
/var/lib/docker/containers/a19687ed946291bd3687135c1ce8575d864e963f1f8414583dadc3fef43f4ecb/a19687ed946291bd3687135c1ce8575d864e963f1f8414583dadc3fef43f4ecb-json.log
3. 获取当前实例的端口
[root@localhost vagrant]# docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' mytomcat
8080/tcp -> 8080
[root@localhost vagrant]# docker port mytomcat
8080/tcp -> 127.0.0.1:8080
4. 将其格式转换成没有空格的json
[root@localhost vagrant]# docker inspect --format='{{json .Config}}' mytomcat
docker pause/unpause
-
docker pause :暂停容器中所有的进程。
- docker unpause :恢复容器中所有的进程。
docker cp :用于容器与主机之间的数据拷贝。
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
demo:
[root@localhost vagrant]# docker cp 32d35ed0c099:/usr/local/tomcat/BUILDING.txt /
[root@localhost vagrant]# cd /
[root@localhost /]# ls
bin boot BUILDING.txt dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr vagrant var
参考:
Docker概念:http://dockone.io/article/6051
官方docker inspect 详解: https://docs.docker.com/engine/reference/commandline/inspect/#parent-command