文章目录
- Docker——Docker 常用命令
- 1、后台启动
- 2、查看日志
- 3、查看进程
- 4、查看元数据
- 5、在运行的容器中执行命令
- 6、连接到正在执行的容器
- 7、数据拷贝
Docker——Docker 常用命令
1、后台启动
语法:
docker run -d 镜像名
使用实例:
以后台方式运行一个容器:
docker run -d centos
注意:当我们以后台方式启动一个容器时,就必须要有一个前台进程,否则 docker 容器发现没有应用,就会自动停止。
如上图所示,我们在以后台方式运行一个容器后,再查看当前运行的容器,发现容器自动停止。
2、查看日志
docker logs : 获取容器的日志
语法:
docker logs [OPTIONS] CONTAINER
OPTIONS说明:
名称,简写 | 默认 | 描述 |
–details | 显示提供给日志的额外详细信息 | |
–follow , -f | 跟踪日志输出 | |
–since | 显示自时间戳(例如 2013-01-02T13:23:37Z)或相关(例如 42m 为 42 分钟)以来的日志 | |
–tail,-n | all | 从日志末尾显示的行数,传递负数或非整数时,默认为all |
–timestamps,-t | 显示时间戳 | |
–until | 在时间戳(例如 2013-01-02T13:23:37Z)或相关(例如 42m 为 42 分钟)之前显示日志 |
使用实例:
写一段shell脚本并运行:
docker run -d centos /bin/sh -c "while true;do echo wanliguyicheng;sleep 1;done"
运行成功:
跟踪查看最早的10条日志,并显示时间戳:
docker logs -tf --tail 10 f05c3273a591
查看最近10分钟的日志:
docker logs --since 10m 容器id
查看某个时间之后的日志:
docker logs -t --since="2021-11-23T10:38:37" 容器id
查看某时间段日志:
docker logs -t --since="2021-11-23T10:38:37" --until "2021-12-23T10:38:37" 容器id
3、查看进程
docker top :查看容器中运行的进程信息,支持 ps 命令参数。
语法:
docker top [OPTIONS] CONTAINER [ps OPTIONS]
容器运行时不一定有/bin/bash终端来交互执行top命令,而且容器还不一定有top命令,可以使用docker top来实现查看container中正在运行的进程。
使用实例:
查看容器中进程信息:
docker top 0197c43d9498
查看所有运行容器的进程信息:
for i in `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done
4、查看元数据
docker inspect : 获取容器/镜像的元数据
语法:
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
OPTIONS说明:
- f :指定返回值的模板文件。
- s :显示总的文件大小。
- type :为指定类型返回JSON。
使用实例:
查看镜像 centos 的元数据:
[root@CHENG /]# docker inspect centos
[
{
"Id": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
"RepoTags": [
"centos:latest"
],
"RepoDigests": [
"centos@sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177"
],
"Parent": "",
"Comment": "",
"Created": "2021-09-15T18:20:05.184694267Z",
"Container": "9bf8a9e2ddff4c0d76a587c40239679f29c863a967f23abf7a5babb6c2121bf1",
"ContainerConfig": {
"Hostname": "9bf8a9e2ddff",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/sh",
"-c",
"#(nop) ",
"CMD [\"/bin/bash\"]"
],
"Image": "sha256:f5b050f177fd426be8fe998a8ecf3fb1858d7e26dff4080b29a327d1bd5ba422",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20210915",
"org.label-schema.license": "GPLv2",
"org.label-schema.name": "CentOS Base Image",
"org.label-schema.schema-version": "1.0",
"org.label-schema.vendor": "CentOS"
}
},
"DockerVersion": "20.10.7",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/bash"
],
"Image": "sha256:f5b050f177fd426be8fe998a8ecf3fb1858d7e26dff4080b29a327d1bd5ba422",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20210915",
"org.label-schema.license": "GPLv2",
"org.label-schema.name": "CentOS Base Image",
"org.label-schema.schema-version": "1.0",
"org.label-schema.vendor": "CentOS"
}
},
"Architecture": "amd64",
"Os": "linux",
"Size": 231268856,
"VirtualSize": 231268856,
"GraphDriver": {
"Data": {
"MergedDir": "/var/lib/docker/overlay2/d255cc6c74c735197fa066b58845c6e297ce05c1340149b6ed409e5ad8f62efc/merged",
"UpperDir": "/var/lib/docker/overlay2/d255cc6c74c735197fa066b58845c6e297ce05c1340149b6ed409e5ad8f62efc/diff",
"WorkDir": "/var/lib/docker/overlay2/d255cc6c74c735197fa066b58845c6e297ce05c1340149b6ed409e5ad8f62efc/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:74ddd0ec08fa43d09f32636ba91a0a3053b02cb4627c35051aff89f853606b59"
]
},
"Metadata": {
"LastTagTime": "0001-01-01T00:00:00Z"
}
}
]
查看正在运行的容器 centos 的 IP:
[root@CHENG /]# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 0197c43d9498
172.17.0.2
5、在运行的容器中执行命令
**docker exec :**在运行的容器中执行命令
语法:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
OPTIONS说明:
- -d :分离模式: 在后台运行
- -i :即使没有附加也保持STDIN 打开
- -t :分配一个伪终端
使用实例:
先查看当前运行的容器,进入运行中容器,并在容器中开启一个交互模式的终端::
docker exec -it 0197c43d9498 /bin/bash
6、连接到正在执行的容器
docker attach :连接到正在运行中的容器。
语法:
docker attach [OPTIONS] CONTAINER
OPTIONS说明:
名称,简写 | 默认 | 描述 |
–detach-keys | 覆盖用于分离容器的键序列 | |
–no-stdin | 不要附加标准输入 | |
–sig-proxy | true | 将所有接收到的信号代理到进程 |
使用实例
连接到正在运行中的容器:
docker attach 0197c43d9498
docker exec 和 docker attach 的区别
docker exec 和 docker attach 命令都可以进入容器内部;
docker exec -it 命令进入容器如果输入exit命令直接退出container,但是不会使得container停止,平时用这个命令比较多。
docker attach可以attach到一个已经运行的容器的stdin,然后进行命令执行的动作。但是需要注意的是,如果从这个stdin中使用exit或按CTRL-D,会导致容器的停止。
测试1:先使用 docker attach 连接到容器,使用exit退出,再查看当前正在运行中的容器,发现容器停止了。
测试2:先使用 docker exec -it 连接到同一个容器,使用exit退出,再查看当前正在运行中的容器,发现容器还在运行。
7、数据拷贝
docker cp :用于容器内数据拷贝到主机上。
语法:
docker cp 容器id:容器内路径 主机路径
使用实例:拷贝容器内的文件到主机上
首先进入容器,在centos容器内创建一个空文件:
返回主机,执行拷贝命令:
docker cp 0197c43d9498:/home/test1.md /home
拷贝成功!