docker容器的常用命令

docker有很多命令,让我们一个一个全部背下来,基本是不可能的,帮助文档的作用就很大了,想要查询那个命令,直接去找帮助文档,帮助文档地址:https://docs.docker.com/reference/ , 在docker文档中列出了多有命令的用法。

docker命令有几种,最常见的是镜像命令,容器命令。下来就来看看常用的docker命令。

一.通用命令

docker --help 命令----可以快速查看命令的用法

用法:    docker [OPTIONS] COMMAND

二. 镜像的基本命令

我们可以通过docker images --help查看所有的docker 镜像相关的命令

1. 列出本机上所有的镜像

docker images

-a : 列出本地所有的镜像(含中间镜像层) 表示的是all的含义
-q : 只显示镜像ID
--digests: 显示镜像的摘要信息
--no-trunc:显示完整的镜像信息
docker images -q : 查询镜像的ID

docker images -qa: 查询所有镜像的id, 可以批量删除时使用

docker images --no-trunc

2. 搜索镜像

docker search 镜像名

--filter=stars=3: 列出点赞数不小于指定数值的镜像

--no-trunc: 显示完整的镜像描述
--automated: 只列出automated build类型的镜像


3. 拉取镜像

docker pull 镜像名称[:tag]
tag是可选项, 不填表示latest Using default tag: latest # 指定使用的镜像
latest: Pulling from library/mysql
a330b6cecb98: Pull complete # 逐层拉取
9c8f656c32b8: Pull complete
88e473c3f553: Pull complete
062463ea5d2f: Pull complete
daf7e3bdf4b6: Pull complete
1839c0b7aac9: Pull complete
cf0a0cfee6d0: Pull complete
1b42041bb11e: Pull complete
10459d86c7e6: Pull complete
b7199599d5f9: Pull complete
1d6f51e17d45: Pull complete
50e0789bacad: Pull complete
Digest: sha256:99e0989e7e3797cfbdb8d51a19d32c8d286dd8862794d01a547651a896bcf00c #镜像的签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 镜像的真实地址 docker pull mysql
docker pull docker.io/library/mysql:latest
这两个是一回事

4. 删除镜像

docker rmi 镜像名称:tag

删除正在运行的镜像

docker rmi -f hello-world

删除全部镜像

docker rmi -f ${docker images -qa}
docker images -qa 是查询当前全部镜像的id, 然后删除这些镜像

三. 容器的基本命令

1. 运行容器

### docker run -p 8080:80 -d daocloud.io/nginx
docker run是启动容器. 启动的时候, 现在本地查找镜像, 如果本地没有, 则去网络下载
--name: 容器名字
-d: 表示以后台进程运行.
-p 8080:80 是把虚拟机中启动的nginx的端口号80 映射到本机的8080
-P: 随机端口映射
-i: 以交互模式运行容器, 通常与-t同时使用
-t: 为容器重新分配一个伪输入终端, 通常与-i同时使用
-it: 使用交互方式运行,进入容器查看内容

启动并运行容器

docker run -it centos /bin/bash

2. 查询正在运行的容器

### docker ps
-a: 列出历史运行过的所有容器 + 当前正在运行的容器
-l: 显示最近创建的容器
-n: 显示最近n个创建的容器
-q: 静默模式, 只显示容器编号
--no-trunc: 不截断输出

3. 在本机和容器之间拷贝文件

如: 拷贝index.html替换nginx的默认index.html页面

docker cp ./index.html 1a2aa74fb4e5://usr/share/nginx/html

4. 启动容器

启动已经停止的容器

docker start

重启容器

docker restart

后台启动容器

docker run -d centos

这块有一个坑

[root@iZ2ze8f268fd4hso5clji8Z ~]# docker run -d centos

8671b9255fcb2f72751a0bf0d24c9d52195c7b6aae9bab05b4e392b830bfc5e5

[root@iZ2ze8f268fd4hso5clji8Z ~]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

[root@iZ2ze8f268fd4hso5clji8Z ~]# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

8671b9255fcb centos "/bin/bash" 7 seconds ago Exited (0) 6 seconds ago stupefied_zhukovsky

通过-d启动了docker,可是docker ps查看的时候, 发现没有启动,这是什么原因?

这是因为docker认为这个容器没有人使用, 所以停止了。

注意:docker启动一个后台进程,必须要有一个前台进程调用它。否则,docker发现没有被使用,就会自动停止他。

nginx服务器就是这样,容器启动后发现自己没有服务,就会立刻停止。

5.停止docker容器

docker stop 容器id

6.查询容器日志

docker logs 

-f								跟踪日志输出
-t 打印时间戳
-n 或者 --tail 打印日志的行数

查询日志:

docker logs -ft --tail 10 容器名

案例:
后台启动centos,然后不停的打印日志。 然后通过docker logs查询日志
[root@iZ2ze8f268fd4hso5clji8Z ~]# docker run -d centos /bin/bash -c "while true; do echo test; sleep 1; done"
730ee45df27df144eb7533d1f5b0676c79fac68546e84dfff7ba9b2a16f933e2 [root@iZ2ze8f268fd4hso5clji8Z ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
730ee45df27d centos "/bin/bash -c 'while…" 4 seconds ago Up 3 seconds crazy_heisenberg [root@iZ2ze8f268fd4hso5clji8Z ~]# docker logs -ft -n 10 730ee45df27d
2021-09-27T11:43:45.214069586Z test
2021-09-27T11:43:46.215681065Z test
2021-09-27T11:43:47.217170501Z test
2021-09-27T11:43:48.218729587Z test

7. 查看容器中的进程

命令: docker top 容器id

[root@iZ2ze8f268fd4hso5clji8Z ~]# docker top 730ee45df27d
UID PID PPID C STIME TTY
root 40908 40888 0 19:43 ?
root 41183 40908 0 19:47 ?

8. 查看镜像的元数据

命令: docker inspect 容器id

测试
[root@iZ2ze8f268fd4hso5clji8Z ~]# docker inspect 730ee45df27d
[
{
"Id": "730ee45df27df144eb7533d1f5b0676c79fac68546e84dfff7ba9b2a16f933e2",
"Created": "2021-09-27T11:43:36.761377838Z",
"Path": "/bin/bash",
"Args": [
"-c",
"while true; do echo test; sleep 1; done"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 40908,
"ExitCode": 0,
"Error": "",
"StartedAt": "2021-09-27T11:43:37.203100727Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
"ResolvConfPath": "/var/lib/docker/containers/730ee45df27df144eb7533d1f5b0676c79fac68546e84dfff7ba9b2a16f933e2/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/730ee45df27df144eb7533d1f5b0676c79fac68546e84dfff7ba9b2a16f933e2/hostname",
"HostsPath": "/var/lib/docker/containers/730ee45df27df144eb7533d1f5b0676c79fac68546e84dfff7ba9b2a16f933e2/hosts",
"LogPath": "/var/lib/docker/containers/730ee45df27df144eb7533d1f5b0676c79fac68546e84dfff7ba9b2a16f933e2/730ee45df27df144eb7533d1f5b0676c79fac68546e84dfff7ba9b2a16f933e2-json.log",
"Name": "/crazy_heisenberg",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"CapAdd": null,
"CapDrop": null,
"CgroupnsMode": "host",
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "private",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "runc",
"ConsoleSize": [
0,
0
],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": [],
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": [],
"DeviceCgroupRules": null,
"DeviceRequests": null,
"KernelMemory": 0,
"KernelMemoryTCP": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": null,
"OomKillDisable": false,
"PidsLimit": null,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0,
"MaskedPaths": [
"/proc/asound",
"/proc/acpi",
"/proc/kcore",
"/proc/keys",
"/proc/latency_stats",
"/proc/timer_list",
"/proc/timer_stats",
"/proc/sched_debug",
"/proc/scsi",
"/sys/firmware"
],
"ReadonlyPaths": [
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
]
},
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/6f2a5b4f663926bceeef1e22e3181367ca9c7e30980f27a49d81a2f5f7d10032-init/diff:/var/lib/docker/overlay2/5bd0304415d4744ae90a7472c8b54e5b21b91b2a2487350f9783cca03fde0422/diff",
"MergedDir": "/var/lib/docker/overlay2/6f2a5b4f663926bceeef1e22e3181367ca9c7e30980f27a49d81a2f5f7d10032/merged",
"UpperDir": "/var/lib/docker/overlay2/6f2a5b4f663926bceeef1e22e3181367ca9c7e30980f27a49d81a2f5f7d10032/diff",
"WorkDir": "/var/lib/docker/overlay2/6f2a5b4f663926bceeef1e22e3181367ca9c7e30980f27a49d81a2f5f7d10032/work"
},
"Name": "overlay2"
},
"Mounts": [],
"Config": {
"Hostname": "730ee45df27d",
"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",
"-c",
"while true; do echo test; sleep 1; done"
],
"Image": "centos",
"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"
}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "ab23a522803ad96e35a57d9a012e8339c271eec859041800e285e46248d09731",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/ab23a522803a",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "17e1e833c474ead88be155d7f14736d1e6330b95ece4eed0d6988272b170c204",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "e77f06f74488d7f8cc7b38311a435c88d18508a786d650ca49a1774df7a2bf28",
"EndpointID": "17e1e833c474ead88be155d7f14736d1e6330b95ece4eed0d6988272b170c204",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
}
}
]

这里面的信息有很多

9. 保存改动为新的image

docker commit -m 'fun' 2a2f3a5c960f fun-nginx

这段代码的含义是, 提交对docker容器所做的修改, 并起了一个名字叫fun. 容器的名字叫fun-nginx.

执行完这段代码以后, 会重新生成一个新的镜像.

我们来看看现在有几个nginx的镜像

现在有两个镜像, 其中fun-nginx是我们刚建的. 我们可以删除一个.

10. 退出容器

exit: 容器停止退出

ctrl+P+Q: 容器不停止退出

11.删除容器

删除没有运行的容器

docker rm 容器id1 容器id2 ....

删除正在运行的容器

docker rm -f 容器名

删除所有的容器

docker rm -f $(docker ps -aq)

四. 重要

1. 启动守护式容器

docker run -d 容器名
在后台进程中启动

使用守护进程的方式启动容器, 会有一个问题: 使用docker ps -a, 发现容器已经退出

重点: docker容器后台运行, 就必须有一个前台进程, 容器运行的命令如果不是那些一直挂起的命令(比如top, tail), 就会自动退出. 这个是docker的机制, 比如web容器, 以nginx为例, 正常情况下,我们配置启动服务只需要启动相应的service即可, 例如: service nginx start. 但是, 这样做, nginx为后台模式运行, 就导致docker前台没有运行的应用. 这样的容器后台启动后, 会立即自杀, 因为他觉得没哟碃可以做. 所以, 最佳的的解决方案是, 将你要运行的程序以前台进程的形式运行

docker run -d nginx /bin/sh -c "while true; do echo hello zzyy; sleep 2; done"

在控制台持续输出hello zzyy, 2秒钟打印一次

2. 查看容器日志

docker logs -f -t --tail 数字 容器ID

-t: 是加入时间戳
-f: 跟随最新的日志打印
--tail 数字: 显示最多多少条

3. 查看容器内运行的进程

docker top 容器id

4. 查看容器内部的细节

docker inspect 容器ID

docker容器内部是洋葱环,一层套一层. inspect就是查看容器内部的细节的

5. 进入正在运行的容器并以命令行交互

进入正在运行的容器: docker exec -it 容器ID bashShell
重新进入: docker attach 容器ID
上述二者的区别:

举例: 现在运行一个容器

docker run -d

进入到了容器里面, 想要退出的话ctr + c

在想要进入到这个容器, 进入的是容器的根目录

 docker attach 容器ID

使用exec执行容器中的查询内容, 并返回执行结果

docker exec -t  容器ID ls -l /tmp/

6. 从容器内拷贝文件到主机上

docker cp 容器ID:容器内路径  目标主机地址

搜索资料:https://www.bilibili.com/video/BV1og4y1q7M4?p=12&spm_id_from=pageDriver

3.docker容器常用命令的更多相关文章

  1. Docker容器常用命令汇总

    Docker常用命令总结如下: # 查看docker详细信息 docker info # 获取当前节点所有容器 docker ps -a # 管理容器生命周期 docker [start|stop|r ...

  2. Docker容器常用命令

    容器是镜像的一个运行实例.两者不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层. 一.创建容器 1.新建容器 docker create:新建一个容器 create命令命令支持的选项十 ...

  3. Docker容器管理——Docker容器常用命令

    1.查看所有的容器 docker ps 2.查看运行的容器 docker ps -a 3.启动.停止.重启docker容器 docker start ... docker stop ... docke ...

  4. Docker:常用命令大全 [七]

    一.docker的命令的解释 1.命令解释 docker run -d -p 80:80 nginx run (创建并运行一个容器) -d 放在后台 -p 端口映射 nginx docker镜像的名字 ...

  5. Docker Kubernetes 常用命令

    Docker Kubernetes 常用命令 增 # 通过文件名或标准输入创建资源. kubectl create # 读取指定文件内容,进行创建.(配置文件可指定json,yaml文件). kube ...

  6. Docker(二十二)-Docker Swarm常用命令

    #查看集群节点 docker node ls #创建nginx服务 #docker pull hub.test.com:5000/almi/nginx:0.1 #下载私有仓库镜像 docker ser ...

  7. Dockerfile指令及docker的常用命令

    DockerfileFROM: FROM <image> FROM <image>:<tag> MAINTAINER: MAINTAINER <name> ...

  8. Docker Swarm常用命令

    #查看集群节点 docker node ls #创建nginx服务 #docker pull hub.test.com:5000/almi/nginx:0.1 #下载私有仓库镜像 docker ser ...

  9. Docker学习(三)认识Docker和常用命令

    Docker学习(三)认识Docker和常用命令 Docker体系结构 docker服务端,作为服务的提供方,核心进程 docker daemon,所有docker命令都是通过这个进程完成的 REST ...

随机推荐

  1. Executor执行器

    Executors: CachedThreadPool  将为每个任务创建一个线程. public class CachedThreadPool { public static void main(S ...

  2. mysql 用 source 导入备份数据

    输入命令:source E:/proDB/start2.sql;

  3. rabbitMQ重复消费(结合死循环重发那一篇看)

    /** * 重复消费逻辑判断与处理 */ @Component public class RepeatMqConsumer { /** * 服务对象 */ private int count=1; @ ...

  4. 【开发工具】Postman保姆级入门教程

    目录 一.简单使用 1. 创建命名空间 2. 创建新集合 3. 按模块整理接口 二.使用环境变量 1. 创建环境与环境变量 2. 使用环境变量 3. 登录后自动更新环境变量 转载请注明出处 一.简单使 ...

  5. AWS EC2 实例 SSH 无法登录故障

    文章链接 故障表现 在使用 jumperver 登录 AWS ec2 实例的时候发现 ssh 配合秘钥登录的时候无法登录, 具体报错如下: ssh -i /path/xx.pem user@10.0. ...

  6. Java的参数传递是值传递还是引用传递?

    一.前言 首先先说结论,Java中方法参数传递方式是按值传递.如果参数是基本类型,传递的是基本类型的字面量值的拷贝.如果参数是引用类型,传递的是该参量所引用的对象在堆中地址值的拷贝. 接下来深入了解一 ...

  7. MySQL——select语句

    select: 基本语法:select 列名 或 * from 对象(表.视图...) where: = > < <> != like ----> like 'old%' ...

  8. eclipse的C/C++开发搭建

    环境 宿主机:ubuntu 16.04 交叉编译:gcc-linaro-4.9-2014.11 ubuntu自带源 eclipse 安装(想使用新版直接跳过) 安装eclipse sudo apt-g ...

  9. DH算法图解+数学证明

    前几天和同事讨论IKE密钥交换流程时,提到了Diffie-Hellman交换.DH算法最主要的作用便是在不安全的网络上成功公共密钥(并未传输真实密钥).但由于对于DH算法的数学原理则不清楚,因此私下对 ...

  10. IPSEC的实现方式

    IPSEC的实现方式 在IPSEC通信中涉及到一个重要方面,那就是如何定义要保护的数据流(又称为感兴趣流).这不仅涉及到IPSEC最终要保护哪部分数据,还关系到IPSEC的实现方式,因此有必要把感兴趣 ...