Docker命令
- 1: Docker命令概述
- 2: Docker基础命令
- 2.1: Docker基础命令概述
- 2.2: info命令
- 2.3: version命令
- 2.4: inspect命令
- 2.5: events命令
- 3: Docker镜像命令
- 3.1: Docker的镜像命令
- 3.2: Docker的images命令
- 3.3: Docker的search命令
- 3.4: Docker的tag命令
- 3.5: Docker的history命令
- 3.6: Docker的rmi命令
- 4: Docker容器命令
- 4.1: Docker容器命令概述
- 4.2: Docker的create命令
- 4.3: Docker的启停命令
- 4.4: Docker的run命令
- 4.5: Docker的ps命令
- 4.6: Docker的exec命令
- 4.7: Docker的top命令
- 4.8: Docker的attach命令
- 4.9: Docker的logs命令
- 4.10: Docker的port命令
- 4.11: Docker的rm命令
- 5: Docker资源类命令
- 5.1: Docker资源类命令概述
- 5.2: Docker的stats命令
- 5.3: Docker的system命令
1 - Docker命令概述
Docker 分为客户端和服务端两部分, docker 为客户端调用的命令, dockerd 为服务端调用的命令, 这里着重介绍客户端的用法。
Docker主要用法:docker [docker命令选项] [子命令] [子命令选项]
备注:使用
docker [子命令] --help
可查看每个子命令的详细用法。
命令选项列表
选项 | 说明 | 其他 |
---|---|---|
–config [string] | 客户端本地配置文件路径 | 默认为 ~/.docker |
-D, –debug | 启用调试模式 | |
–help | 打印用法 | |
-H, –host list | 通过socket访问指定的docker守护进程(服务端) | unix:// , fd:// , tcp:// |
-l, –log-level [string] | 设置日志级别 (debug 、info 、warn 、error 、fatal ) |
默认为 info |
–tls | 启用TLS加密 | |
–tlscacert [string] | 指定信任的CA根证书路径 | 默认为 ~/.docker/ca.pem |
–tlscert [string] | 客户端证书路径 | 默认为 ~/.docker/cert.pem |
–tlskey [string] | 客户端证书私钥路径 | 默认为 ~/.docker/key.pem |
–tlsverify | 启用TLS加密并验证客户端证书 | |
-v, –version | 打印docker客户端版本信息 |
命令列表
本地镜像相关命令
- docker images:
镜像仓库相关命令
- docker search: 查找镜像
- docker pull: 获取镜像
- docker push: 推送镜像到仓库
- docker login: 登录第三方仓库
- docker logout: 退出第三方仓库
参考资料
- docker命令详解:很全
- Docker 常用指令详解: 2017-12,很全,推荐
2 - Docker基础命令
2.1 - Docker基础命令概述
Docker基础命令:
命令 | 命令描述 |
---|---|
info | 显示 Docker 详细的系统信息 |
version | 显示docker客户端和服务端版本信息 |
inspect | 查看容器或镜像的配置信息, 默认为json数据 |
events | 实时打印服务端执行的事件 |
2.2 - info命令
介绍
https://docs.docker.com/engine/reference/commandline/info/
此命令显示有关Docker安装的系统范围信息。 显示的信息包括内核版本,容器和镜像的数量。 显示的镜像数量是唯一镜像的数量。以不同名称标记的相同镜像仅计算一次。
如果指定了格式,则将执行给定模板而不是默认格式。 Go的文本/模板包描述了格式的所有细节。
根据所使用的存储驱动程序,可以显示其他信息,例如池名称,数据文件,元数据文件,使用的数据空间,总数据空间,使用的元数据空间以及总元数据空间。
数据文件存储镜像,元数据文件是存储和这些镜像相关的元数据。当第一次运行时,Docker从挂载了 /var/lib/docker
的卷上的可用空间分配一定数量的数据空间和元数据空间。
使用
$ docker info
Containers: 4 # 容器数量
Running: 0
Paused: 0
Stopped: 4
Images: 39 # 镜像数量
Server Version: 18.09.1 # 服务器版本
Storage Driver: overlay2 # 存储驱动程序
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file # 日志驱动程序
Cgroup Driver: cgroupfs # cgroup驱动程序
Plugins: # 插件
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive # swarm信息
Runtimes: runc # runtimes信息
Default Runtime: runc # 默认runtime
Init Binary: docker-init
containerd version: 9754871865f7fe2f4e74d43e2fc7ccd237edcbce
runc version: 96ec2177ae841256168fcf76954f7177af9446eb
init version: fec3683
Security Options: # 安全选项
apparmor
seccomp
Profile: default
Kernel Version: 4.15.0-38-generic # linux内核版本
Operating System: Linux Mint 18.3 # 操作系统
OSType: linux
Architecture: x86_64
CPUs: 12 # 硬件信息
Total Memory: 15.12GiB
Name: skywork
ID: CICY:F7VQ:DKBG:IEG4:SY75:A6IK:DV52:GIXI:F3P5:VPIM:QMU3:ZXK2
Docker Root Dir: /var/lib/docker # docker根目录
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/ # 镜像仓库
Labels:
Experimental: false
Insecure Registries: # 非安全镜像仓库
127.0.0.0/8
Registry Mirrors: # 镜像仓库
https://××××.mirror.aliyuncs.com/
Live Restore Enabled: false
Product License: Community Engine # docker的产品license
WARNING: No swap limit support
其中的警告 “WARNING: No swap limit support ” 可以忽略,除非帧的需要这个能力。
格式化输出
可以通过 -f 选项格式化输出:
$ docker info --format '{{json .}}'
{
"ID":"CICY:F7VQ:DKBG:IEG4:SY75:A6IK:DV52:GIXI:F3P5:VPIM:QMU3:ZXK2",
"Containers":4,
"ContainersRunning":0,
"ContainersPaused":0,
"ContainersStopped":4,
"Images":39,
"Driver":"overlay2",
"DriverStatus":[
[
"Backing Filesystem",
"extfs"
],
[
"Supports d_type",
"true"
],
[
"Native Overlay Diff",
"true"
]
],
"SystemStatus":null,
"Plugins":{
"Volume":[
"local"
],
"Network":[
"bridge",
"host",
"macvlan",
"null",
"overlay"
],
"Authorization":null,
"Log":[
"awslogs",
"fluentd",
"gcplogs",
"gelf",
"journald",
"json-file",
"local",
"logentries",
"splunk",
"syslog"
]
},
"MemoryLimit":true,
"SwapLimit":false,
"KernelMemory":true,
"CpuCfsPeriod":true,
"CpuCfsQuota":true,
"CPUShares":true,
"CPUSet":true,
"IPv4Forwarding":true,
"BridgeNfIptables":true,
"BridgeNfIp6tables":true,
"Debug":false,
"NFd":21,
"OomKillDisable":true,
"NGoroutines":36,
"SystemTime":"2019-01-26T21:02:24.681737152+08:00",
"LoggingDriver":"json-file",
"CgroupDriver":"cgroupfs",
"NEventsListener":0,
"KernelVersion":"4.15.0-38-generic",
"OperatingSystem":"Linux Mint 18.3",
"OSType":"linux",
"Architecture":"x86_64",
"IndexServerAddress":"https://index.docker.io/v1/",
"RegistryConfig":{
"AllowNondistributableArtifactsCIDRs":[
],
"AllowNondistributableArtifactsHostnames":[
],
"InsecureRegistryCIDRs":[
"127.0.0.0/8"
],
"IndexConfigs":{
"docker.io":{
"Name":"docker.io",
"Mirrors":[
"https://****.mirror.aliyuncs.com/"
],
"Secure":true,
"Official":true
}
},
"Mirrors":[
"https://****.mirror.aliyuncs.com/"
]
},
"NCPU":12,
"MemTotal":16233955328,
"GenericResources":null,
"DockerRootDir":"/var/lib/docker",
"HttpProxy":"",
"HttpsProxy":"",
"NoProxy":"",
"Name":"skywork",
"Labels":[
],
"ExperimentalBuild":false,
"ServerVersion":"18.09.1",
"ClusterStore":"",
"ClusterAdvertise":"",
"Runtimes":{
"runc":{
"path":"runc"
}
},
"DefaultRuntime":"runc",
"Swarm":{
"NodeID":"",
"NodeAddr":"",
"LocalNodeState":"inactive",
"ControlAvailable":false,
"Error":"",
"RemoteManagers":null
},
"LiveRestoreEnabled":false,
"Isolation":"",
"InitBinary":"docker-init",
"ContainerdCommit":{
"ID":"9754871865f7fe2f4e74d43e2fc7ccd237edcbce",
"Expected":"9754871865f7fe2f4e74d43e2fc7ccd237edcbce"
},
"RuncCommit":{
"ID":"96ec2177ae841256168fcf76954f7177af9446eb",
"Expected":"96ec2177ae841256168fcf76954f7177af9446eb"
},
"InitCommit":{
"ID":"fec3683",
"Expected":"fec3683"
},
"SecurityOptions":[
"name=apparmor",
"name=seccomp,profile=default"
],
"ProductLicense":"Community Engine",
"Warnings":[
"WARNING: No swap limit support"
]
}
2.3 - version命令
介绍
https://docs.docker.com/engine/reference/commandline/version/
默认情况下,这将以易于阅读的布局呈现所有版本信息。 如果指定了格式,则将执行给定的模板。
使用
$ docker version
Client:
Version: 18.09.1
API version: 1.39
Go version: go1.10.6
Git commit: 4c52b90
Built: Wed Jan 9 19:35:23 2019
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 18.09.1
API version: 1.39 (minimum version 1.12)
Go version: go1.10.6
Git commit: 4c52b90
Built: Wed Jan 9 19:02:44 2019
OS/Arch: linux/amd64
Experimental: false
格式化输出
$ docker version --format '{{json .}}'
则输出格式(https://www.json.cn/ 转格式)为:
{
"Client":{
"Platform":{
"Name":""
},
"Version":"18.09.1",
"ApiVersion":"1.39",
"DefaultAPIVersion":"1.39",
"GitCommit":"4c52b90",
"GoVersion":"go1.10.6",
"Os":"linux",
"Arch":"amd64",
"BuildTime":"Wed Jan 9 19:35:23 2019",
"Experimental":false
},
"Server":{
"Platform":{
"Name":"Docker Engine - Community"
},
"Components":[
{
"Name":"Engine",
"Version":"18.09.1",
"Details":{
"ApiVersion":"1.39",
"Arch":"amd64",
"BuildTime":"Wed Jan 9 19:02:44 2019",
"Experimental":"false",
"GitCommit":"4c52b90",
"GoVersion":"go1.10.6",
"KernelVersion":"4.15.0-38-generic",
"MinAPIVersion":"1.12",
"Os":"linux"
}
}
],
"Version":"18.09.1",
"ApiVersion":"1.39",
"MinAPIVersion":"1.12",
"GitCommit":"4c52b90",
"GoVersion":"go1.10.6",
"Os":"linux",
"Arch":"amd64",
"KernelVersion":"4.15.0-38-generic",
"BuildTime":"2019-01-09T19:02:44.000000000+00:00"
}
}
可以单独获取其中某个数据,如:
docker version --format '{{.Server.Version}}'
18.09.1
2.4 - inspect命令
介绍
https://docs.docker.com/engine/reference/commandline/inspect/
返回有关Docker对象的低层信息。
Docker inspect 命令提供被其控制的各种结构的详细信息。
使用
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
需要给出目标对象的name或者id。
如果要查看镜像,可以先用 docker images
命令看到本地所有镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/kube-proxy v1.12.2 15e9da1ca195 3 months ago 96.5MB
k8s.gcr.io/kube-apiserver v1.12.2 51a9c329b7c5 3 months ago 194MB
然后通过ID 来使用 inspect 命令:
docker inspect 15e9da1ca195
默认是返回完整信息,json格式:
[
{
"Id": "sha256:15e9da1ca195086627363bb2e8f5bfca7048345325287d307afd317bab2045b0",
"RepoTags": [
"k8s.gcr.io/kube-proxy:v1.12.2"
],
"RepoDigests": [
"k8s.gcr.io/kube-proxy@sha256:b77f615c0a914efbf4c66b37011b0f87e28498af6cc71590ecbd67b6be005a60"
],
"Parent": "",
"Comment": "",
"Created": "2018-10-24T07:43:58.286868924Z",
"Container": "",
"ContainerConfig": {
"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/sh",
"-c",
"#(nop) ADD file:5e8feab95fcebf67c56cc114f6ec97cfb09bcfedacb175bb1951cb5d6e385574 in /usr/local/bin/kube-proxy "
],
"ArgsEscaped": true,
"Image": "sha256:e1f02e54b200d3a4f3b46b6f0ec4995d92c33707a3c2edf6fb5162c7c406fab5",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": null
},
"DockerVersion": "18.06.1-ce",
"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/sh"
],
"ArgsEscaped": true,
"Image": "sha256:e1f02e54b200d3a4f3b46b6f0ec4995d92c33707a3c2edf6fb5162c7c406fab5",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": null
},
"Architecture": "amd64",
"Os": "linux",
"Size": 96469663,
"VirtualSize": 96469663,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/e35f184dc38f9107e8bdaafd718e61a2e4251879d81a33ed59a884ced01b7b8e/diff:/var/lib/docker/overlay2/b1237288693892b66dcaee6b47625303b7814844a93c71bd2fd5d7bb49fbefaa/diff",
"MergedDir": "/var/lib/docker/overlay2/229d3a5fb18ee157fc6b3b3a8d11d3adfb5b6cefa9d81a5e9332b345816de10c/merged",
"UpperDir": "/var/lib/docker/overlay2/229d3a5fb18ee157fc6b3b3a8d11d3adfb5b6cefa9d81a5e9332b345816de10c/diff",
"WorkDir": "/var/lib/docker/overlay2/229d3a5fb18ee157fc6b3b3a8d11d3adfb5b6cefa9d81a5e9332b345816de10c/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:0c1604b64aedf4f5060a25da1b96b21aa803a878ce475633d02a4aba854252a7",
"sha256:dc6f419d40a27032570a3bd2813f10abd09620e68974f3d74e09ecf6a3a4113c",
"sha256:2d9b7a4a23dd71483150c1b9bfb136e2a1196897efb8191e4aafdc78eb7bcb4e"
]
},
"Metadata": {
"LastTagTime": "0001-01-01T00:00:00Z"
}
}
]
格式化输出
同样可以通过格式化输出获取特定的属性值。
$ docker inspect --format='{{.Id}}' 15e9da1ca195
sha256:15e9da1ca195086627363bb2e8f5bfca7048345325287d307afd317bab2045b0
$ docker inspect --format='{{.RootFS.Type}}' 15e9da1ca195
layers
更多案例参看官方文档: https://docs.docker.com/engine/reference/commandline/inspect/
2.5 - events命令
介绍
https://docs.docker.com/engine/reference/commandline/events/
使用 docker events 命令从服务器获取实时事件。这些事件因Docker对象类型而异。
使用
docker events
然后接受各种事件。
具体用法见官方文档:
- 用时间过滤事件
- 用标准规范过滤事件
- 格式化输出
https://docs.docker.com/engine/reference/commandline/events/
3 - Docker镜像命令
3.1 - Docker的镜像命令
镜像仓库类的Docker命令:
命令 | 命令描述 |
---|---|
images | 查看本地镜像(列出本地所有镜像) |
inspect | 查看镜像详情 |
search | 查找镜像 |
tag | 修改镜像tag |
history | 显示镜像每层的变更内容 |
rmi | 删除本地镜像 |
pull | 获取镜像 |
push | 推送镜像到仓库 |
login | 登录第三方仓库 |
logout | 退出第三方仓库 |
save | 打包本地镜像, 使用压缩包来完成迁移 |
load | 导入镜像压缩包 |
commit | 将容器保存为镜像 |
build | 使用Dockerfile构建镜像 |
import | 导入本地容器快照文件为镜像 |
3.2 - Docker的images命令
介绍
https://docs.docker.com/engine/reference/commandline/images/
默认的docker images 命令将显示所有顶级镜像,其存储库和标签,以及它们的大小。
Docker image具有中间层,通过允许缓存每个步骤来提高可重用性,减少磁盘使用并加速docker build。 默认情况下不显示这些中间层。
SIZE是镜像及其所有父镜像占用的累积空间。 这也是Docker save命令制作镜像时创建的Tar文件内容使用的磁盘空间。
如果镜像具有多个存储库名称或标记,则会多次列出该镜像。 此单个镜像(可通过其匹配的IMAGE ID识别)仅使用一次列出的SIZE。
使用
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/kube-proxy v1.12.2 15e9da1ca195 3 months ago 96.5MB
k8s.gcr.io/kube-apiserver v1.12.2 51a9c329b7c5 3 months ago 194MB
k8s.gcr.io/kube-controller-manager v1.12.2 15548c720a70 3 months ago 164MB
<none> <none> b8988e488a42 6 months ago 733MB
envoyproxy/envoy-build-ubuntu 7f7f5666c72e00ac7c1909b4fc9a2121d772c859 936ba3592a5c 8 months ago 2.31GB
通过name和tag来列出镜像
docker images 命令有可选的 [REPOSITORY[:TAG]]
参数,该参数将列表限制为与参数匹配的镜像。
如果指定 REPOSITORY 但没有 TAG,则 docker images 命令会列出给定存储库中的所有图像。
$ docker images istio/pilot
REPOSITORY TAG IMAGE ID CREATED SIZE
istio/pilot 0.7.1 6223c9364df7 10 months ago 51.9MB
$ docker images istio/*
REPOSITORY TAG IMAGE ID CREATED SIZE
istio/istio-ca 0.7.1 5c82fea42c78 10 months ago 42.7MB
istio/mixer 0.7.1 251b0d3d2b93 10 months ago 54MB
6223c9364df7 10 months ago 51.9MB
istio/examples-bookinfo-reviews-v3 1.5.0 7301fee7c9cb 12 months ago 431MB
istio/examples-bookinfo-reviews-v2 1.5.0
$ docker images istio/*:0.7.1
REPOSITORY TAG IMAGE ID CREATED SIZE
istio/istio-ca 0.7.1 5c82fea42c78 10 months ago 42.7MB
istio/mixer 0.7.1 251b0d3d2b93 10 months ago 54MB
istio/sidecar_injector 0.7.1 1db980725edb 10 months ago 33.4MB
过滤
过滤标志(-f
或--filter
)格式为"key=value"。 如果有多个过滤器,则传递多个标志(例如,--filter "foo=bar" --filter "bif=baz"
)
目前支持的过滤器是:
- dangling悬空 (boolean - true or false)
- label (
label=<key>
orlabel=<key>=<value>
) - before (
<image-name>[:<tag>]
,<image id>
or<image@digest>
) - filter images created before given id or references - since (
<image-name>[:<tag>]
,<image id>
or<image@digest>
) - filter images created since given id or references - reference (pattern of an image reference) - filter images whose reference matches the specified pattern
具体看官方文档。
dangling镜像的处理
dangling镜像就是images命令中出现的,REPOSITORY 和 TAG 都显示为 <none>
的镜像,如:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
......
<none> <none> b8988e488a42 6 months ago 733MB
可以通过过滤器将dangling镜像都找出来:
$ docker images --filter "dangling=true"
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> b8988e488a42 6 months ago 733MB
这将显示未标记的镜像,这些镜像是镜像树的叶子(不是中间层)。 当镜像的新构建从这个镜像ID取走 repo:tag
,而留下 <none>:<none>
或 untagged 时,会出现这些的镜像。如果在容器当前正在使用镜像时尝试移除镜像,则会发出警告。通过使用此标志,允许批量清理。
可以联合docker rmi
命令一起使用来批量删除dangling镜像:
docker rmi $(docker images -f "dangling=true" -q)
Deleted: sha256:b8988e488a42c652492c6b488f44469245d2088f793c1e6448777afcedb34ca1
3.3 - Docker的search命令
介绍
https://docs.docker.com/engine/reference/commandline/search/
在Docker Hub中搜索镜像。
搜索查询默认最多返回25个结果。
使用
通过镜像名字搜索:
$ docker search busybox
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
busybox Busybox base image. 1494 [OK]
progrium/busybox 68 [OK]
hypriot/rpi-busybox-httpd Raspberry Pi compatible Docker Image with a … 45
radial/busyboxplus Full-chain, Internet enabled, busybox made f… 21 [OK]
......
过滤
当前支持的过滤器有:
- stars (int - number of stars the image has)
- is-automated (boolean - true or false) - is the image automated or not
- is-official (boolean - true or false) - is the image official or not
3.4 - Docker的tag命令
介绍
https://docs.docker.com/engine/reference/commandline/tag/
创建一个引用到 SOURCE_IMAGE 的 tag TARGET_IMAGE
镜像名称由斜杠分隔的名称组件组成,可选地以仓库主机名为前缀。主机名必须符合标准DNS规则,但可能不包含下划线。如果存在主机名,则可以选择后跟端口号如以下格式的 :8080
。如果不存在,该命令默认使用位于 registry-1.docker.io
的Docker公共注册表。名称组件可能包含小写字母,数字和分隔符。分隔符定义为句点,一个或两个下划线,或一个或多个破折号。 名称组件不能以分隔符开头或结尾。
Tag名称必须是有效的ASCII,并且可以包含小写和大写字母,数字,下划线,句点和短划线。 Tag名称不能以句点或短划线开头,最多可包含128个字符。
使用
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
3.5 - Docker的history命令
介绍
https://docs.docker.com/engine/reference/commandline/history/
显示镜像的历史,显示镜像每层的变更内容
使用
docker history [OPTIONS] IMAGE
如:
$ docker history istio/mixer:0.7.1 --no-trunc
IMAGE CREATED CREATED BY SIZE COMMENT
251b0d3d2b93 10 months ago /bin/sh -c #(nop) CMD ["--configStoreURL=fs… 0B
<missing> 10 months ago /bin/sh -c #(nop) ENTRYPOINT ["/usr/local/b… 0B
<missing> 10 months ago /bin/sh -c #(nop) ADD file:04fbcb926d6c80af5… 53.7MB
<missing> 10 months ago /bin/sh -c #(nop) ADD file:f74cafb0f2a94a0b9… 252kB
3.6 - Docker的rmi命令
介绍
https://docs.docker.com/engine/reference/commandline/rmi/
删除本地镜像
使用
docker rmi [OPTIONS] IMAGE [IMAGE...]
可以使用镜像的短ID或长ID,Tag或digest删除镜像。
如果镜像有一个或多个引用它的Tag,则必须在删除镜像之前删除所有Tag。通过Tag删除镜像时,将自动删除Digest引用。
或者使用 “-f” 标记来强制删除(包括所有tag的镜像)。
清理镜像
通过 docker system df
命令可以看到当前本地镜像的磁盘使用情况:
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 38 1 7.314GB 7.314GB (99%)
Containers 4 0 0B 0B
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
可以通过 docker images
命令查看当前本地镜像情况,然后手工删除不需要的镜像。
docker system prune
命令可以帮助删除不需要使用的各种资源。
可以配合 docker images
命令来进行批量删除,如:
$ docker rmi $(docker images istio/* -q)
Untagged: istio/istio-ca:0.7.1
Untagged: istio/istio-ca@sha256:744e7a4426474d10f7984c601590ee6dab304f5cf6677a80b37c3025993dbd4e
Deleted: sha256:5c82fea42c7850f7f42e3b6326bc35b2a8941e77532210d925770eb501c6de1b
Deleted: sha256:8ccea48ceaaffc2fab84cc0d579948a221249d384156f6cfbdbcc9341ec59be7
Deleted: sha256:6ecf4e847360cffdcfe3a5d1b5de4e27b227aa5688c0ed63170cff2ecf7e43f6
Untagged: istio/mixer:0.7.1
......
如果要清空本地镜像,可以执行命令 docker rmi -f $(docker images -q)
。
4 - Docker容器命令
4.1 - Docker容器命令概述
容器类的Docker命令:
命令 | 命令描述 |
---|---|
create | 根据镜像生成一个新的容器 |
start | 启动一个新的容器 |
run | 创建、启动容器并执行相应的命令 |
rename | 重命名容器名 |
ps | 查看运行中的容器 |
top | 显示容器的运行进程 |
stop | 关闭容器 |
kill | 强制关闭容器 |
restart | 重启容器 |
pause | 暂停容器 |
unpause | 恢复暂停的容器 |
exec | 在已运行的容器中执行命令 |
attach | 进入运行中的容器, 显示该容器的控制台界面。 |
logs | 打印容器的控制台输出内容 |
port | 容器端口映射列表 |
rm | 删除已停止的容器 |
diff | 展示容器相对于构建它的镜像内容所做的改变 |
export | 导出容器到本地快照文件 |
cp | 在容器和宿主机之间复制文件 |
wait | 阻塞当前命令直到对应的容器被关闭, 容器关闭后打印结束代码 |
4.2 - Docker的create命令
介绍
https://docs.docker.com/engine/reference/commandline/create/
根据镜像生成一个新的容器
docker create
命令在指定的映像上创建可写容器层,并准备运行指定的命令。 然后将容器ID打印到STDOUT。 这类似于docker run -d
,但容器从未启动过。 然后,您可以使用 docker start <container_id>
命令在任何位置启动容器。
当您想要提前设置容器配置,以便在需要时启动容器已经准备好,这非常有用。 新容器的初始状态已经创建。
使用
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
常用的命令行参数:
参数 | 描述 |
---|---|
–attach , -a | Attach to STDIN, STDOUT or STDERR |
–env , -e | Set environment variables |
–env-file | Read in a file of environment variables |
–expose | Expose a port or a range of ports |
–interactive , -i | Keep STDIN open even if not attached |
–label , -l | Set meta data on a container |
–label-file | Read in a line delimited file of labels |
–mount | Attach a filesystem mount to the container |
–name | Assign a name to the container |
–publish , -p | Publish a container’s port(s) to the host |
–read-only | Mount the container’s root filesystem as read only |
–rm | Automatically remove the container when it exits |
–tty , -t | Allocate a pseudo-TTY |
–user , -u | Username or UID (format: <name|uid>[:<group|gid>]) |
–volume , -v | Bind mount a volume |
–volumes-from | Mount volumes from the specified container(s) |
–workdir , -w | Working directory inside the container |
4.3 - Docker的启停命令
start命令
https://docs.docker.com/engine/reference/commandline/start/
启动一个或者多个停止的容器
docker start [OPTIONS] CONTAINER [CONTAINER...]
命令行参数:
参数 | 描述 |
---|---|
–attach , -a | Attach to STDIN, STDOUT or STDERR |
–interactive , -i | Keep STDIN open even if not attached |
date: 2019-01-27T07:30:00+08:00
title: start命令
weight: 342
menu:
main:
parent: "command-container"
description : "Docker的start命令"
stop命令
https://docs.docker.com/engine/reference/commandline/stop
停止一个或者多个运行的容器
容器内的主进程将先接收到 SIGTERM 信号,并在优雅关闭限期后,接收到 SIGKILL 信号。
docker stop [OPTIONS] CONTAINER [CONTAINER...]
命令行参数:
参数 | 描述 |
---|---|
–time , -t | Seconds to wait for stop before killing it |
kill命令
https://docs.docker.com/engine/reference/commandline/kill
杀死一个或者多个运行的容器
容器内的主进程将先接收到 SIGTERM 信号,并在优雅关闭限期后,接收到 SIGKILL 信号。
docker kill [OPTIONS] CONTAINER [CONTAINER...]
命令行参数:
参数 | 描述 |
---|---|
–signal , -s | Signal to send to the container |
restart命令
https://docs.docker.com/engine/reference/commandline/restart
重新启动一个或者多个运行的容器
docker restart [OPTIONS] CONTAINER [CONTAINER...]
命令行参数:
参数 | 描述 |
---|---|
–time , -t | Seconds to wait for stop before killing the container |
pause命令
https://docs.docker.com/engine/reference/commandline/pause
暂停一个或多个容器中的所有进程
docker pause命令挂起(suspend)指定容器中的所有进程。 在Linux上,它使用cgroups freezer。 传统上,当暂停进程时,使用SIGSTOP信号,该进程被暂停可观察到。 使用cgroups freezer,该过程无感知,无法捕获它被暂停和随后的恢复。 在Windows上,只有Hyper-V容器可以被暂停。
docker pause CONTAINER [CONTAINER...]
unpause命令
恢复一个或多个容器中的所有暂停进程
docker unpause CONTAINER [CONTAINER...]
4.4 - Docker的run命令
介绍
https://docs.docker.com/engine/reference/commandline/run/
创建、启动容器并执行相应的命令。
在新的容器中运行命令。
docker run命令首先在指定的镜像上创建一个可写容器层,然后使用指定的命令启动它。 也就是说,docker run相当于API /containers/create
再 /containers/(id)/start
。 可以使用 docker start
重新启动已停止的容器,并使其先前的所有更改保持不变。 请参阅 docker ps -a
以查看所有容器的列表。
docker run
命令可与 docker commit
结合使用,以更改容器运行的命令。
更多资料:
使用
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
和 docker create 命令相同。
常用的命令行参数:
参数 | 描述 |
---|---|
–attach , -a | Attach to STDIN, STDOUT or STDERR |
–env , -e | Set environment variables |
–env-file | Read in a file of environment variables |
–expose | Expose a port or a range of ports |
--hostname , -h |
Container host name |
–interactive , -i | Keep STDIN open even if not attached |
–label , -l | Set meta data on a container |
–label-file | Read in a line delimited file of labels |
–mount | Attach a filesystem mount to the container |
–name | Assign a name to the container |
–publish , -p | Publish a container’s port(s) to the host |
–read-only | Mount the container’s root filesystem as read only |
–rm | Automatically remove the container when it exits |
–tty , -t | Allocate a pseudo-TTY |
–user , -u | Username or UID (format: <name|uid>[:<group|gid>]) |
–volume , -v | Bind mount a volume |
–volumes-from | Mount volumes from the specified container(s) |
–workdir , -w | Working directory inside the container |
分配名字和伪TTY (–name, -it)
$ docker run --name test -it debian
连接到STDIN/STDOUT/STDERR (-a)
-a
标志告诉 docker run
绑定到容器的STDIN,STDOUT或STDERR。 这使得可以根据需要操纵输出和输入。
$ docker run -a stdout ubuntu echo test
test
完整容器能力 (–privileged)
特权容器?
默认情况下,大多数潜在危险的内核功能都会被删除; 包括 cap_sys_admin(挂载文件系统所需)。 但是,–privileged标志将允许它运行。
$ docker run -t -i --privileged ubuntu bash
--privileged
标志为容器提供了所有功能,它还解除了设备cgroup控制器强制执行的所有限制。 换句话说,容器几乎可以完成主机可以执行的所有操作。 此标志存在以允许特殊用例,例如在Docker中运行Docker。
设置工作目录 (-w)
$ docker run -w /path/to/dir/ -i -t ubuntu pwd
/path/to/dir
-w
允许命令在给定的目录中执行,这里是 /path/to/dir/
。 如果路径不存在,则在容器内创建。
挂载卷 (-v, –read-only)
docker run -v `pwd`:`pwd` -w `pwd` -i -t ubuntu pwd
-v
标志将当前工作目录挂载到容器中。 -w
让命令在当前工作目录中执行,方法是将工作目录更改为pwd返回的值。所以这个组合使用容器执行命令,但在当前工作目录中。
发布或者暴露端口 (-p, –expose)
docker run -p 127.0.0.1:80:8080/tcp ubuntu bash
这将容器的端口8080绑定到主机的127.0.0.1上的TCP端口80。还可以指定udp和sctp端口。
docker run --expose 80 ubuntu bash
这会暴露容器的端口80,而不会将端口发布到主机系统接口。
设置环境变量(-e, –env, –env-file)
可以通过-e, --env, --env-file
设置容器的环境变量:
docker run -e MYVAR1 --env MYVAR2=foo --env-file ./env.list ubuntu bash
本地已经export的环境变量,可以不用=号和值:
export VAR1=value1
export VAR2=value2
$ docker run --env VAR1 --env VAR2 ubuntu env | grep VAR
VAR1=value1
VAR2=value2
在容器上设置元数据(-l, –label, –label-file)
可以通过-l, --label, --label-file
设置容器的label:
$ docker run -l my-label --label com.example.foo=bar ubuntu bash
将容器连接到网络(–network)
docker run -itd --network=my-net busybox
docker run -itd --network=my-net --ip=10.10.9.75 busybox
也可以使用 docker connect
命令
从容器挂载卷(–volumes-from)
docker run --volumes-from 777f7dc92da7 --volumes-from ba8c0c54f0f2:ro -i -t ubuntu pwd
4.5 - Docker的ps命令
介绍
https://docs.docker.com/engine/reference/commandline/ps/
列出容器
使用
docker ps [OPTIONS]
常用的命令行参数:
参数 | 描述 |
---|---|
–all , -a | Show all containers (default shows just running) |
--filter , -f |
Filter output based on conditions provided |
--last , -n |
Show n last created containers (includes all states) |
–latest , -l | Show the latest created container (includes all states) |
–size , -s | Display total file sizes |
过滤
过滤标志(-f或--filter
)格式是 key=value 对。 如果有多个过滤器,则传递多个标志(例如 --filter "foo=bar" --filter "bif=baz"
)
支持多种过滤方式,如 id,name,label,status等,具体看官方文档
docker ps --filter "label=color"
docker ps --filter "label=color=blue"
docker ps --filter "name=nostalgic_stallman"
docker ps --filter "name=nostalgic" # name可以使用substring
docker ps -a --filter 'exited=0'
docker ps -a --filter 'exited=137'
docker ps --filter status=running
docker ps --filter status=paused
docker ps --filter ancestor=ubuntu
docker ps --filter network=net1
docker ps --filter publish=80
docker ps --filter expose=8000-8080/tcp
docker ps --filter publish=80/udp
格式化输出
docker ps --format "{{.ID}}: {{.Command}}"
docker ps --format "table {{.ID}}\t{{.Labels}}"
看官方文档
4.6 - Docker的exec命令
介绍
https://docs.docker.com/engine/reference/commandline/exec/
在运行的容器内运行命令
docker exec 命令在正在运行的容器中运行新命令。
使用docker exec启动的命令仅在容器的主进程(PID 1)运行时运行,如果重新启动容器则不会重新启动。
COMMAND将在容器的默认目录中运行。 如果底层镜像在其Dockerfile中使用WORKDIR指令指定有自定义目录,则将使用此目录。
COMMAND应该是可执行文件,链接或带引号的命令不起作用。 例:
docker exec -ti my_container "echo a && echo b"
不会工作, 但是 docker exec -ti my_container sh -c "echo a && echo b"
可以.
使用
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
常用的命令行参数:
参数 | 描述 |
---|---|
–detach , -d | Detached mode: run command in the background |
–env , -e | Set environment variables |
–interactive , -i | Keep STDIN open even if not attached |
–privileged | Give extended privileges to the command |
–tty , -t | Allocate a pseudo-TTY |
–user , -u | Username or UID (format: <name|uid>[:<group|gid>]) |
–workdir , -w | Working directory inside the container |
启动命令
先启动一个容器:
$ docker run -it --rm --name exectest ubuntu bash
root@f13ee9356da6:/#
用docker ps命令确认一下:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f13ee9356da6 ubuntu "bash" 24 seconds ago Up 22 seconds exectest
运行简单命令:
$ docker exec exectest pwd
/
$ docker exec exectest ls /
bin
boot
dev
etc
......
如果想后台执行:
$ docker exec -d exectest pwd
也可以用进到容器里面,打开bash,再慢慢执行命令:
$ docker exec -it exectest bash
root@f13ee9356da6:/# pwd
/
这会在容器 exectest 里面创建一个新的bash session。
可以在进入容器时定义一些环境变量,通过 -e 参数传递进去:
$ docker exec -it -e var1=v1 exectest bash
root@f13ee9356da6:/# echo $var1
v1
注意这个环境变量只有在这个新的bash session里面才能看到,在原来打开这个容器的bash里面是无法看到的。
默认新的 bash session 的工作目录是在当前容器被创建时设置的工作目录,可以通过 -w 参数修改:
$ docker exec -it -w /root exectest bash
root@f13ee9356da6:~# pwd
/root
4.7 - Docker的top命令
介绍
https://docs.docker.com/engine/reference/commandline/top/
显示容器的运行进程
使用
docker top CONTAINER [ps OPTIONS]
命令行参数可以参考ps命名。
# 在一个终端中启动容器
$ docker run -it --rm --name toptest ubuntu bash
root@7493e17d1238:/#
# 在另一个终端中查看
$ docker top toptest
UID PID PPID C STIME TTY TIME CMD
root 21872 21848 0 11:46 pts/0 00:00:00 bash
4.8 - Docker的attach命令
介绍
https://docs.docker.com/engine/reference/commandline/attach/
将本地标准 input,output 和 error 流附加到正在运行的容器。
使用 docker attach 将终端的标准 input,output 和 error (或三者的任意组合)通过容器的ID或名称附加到正在运行的容器中。这允许您查看其正在进行的输出或以交互方式控制它,就像命令直接在您的终端中运行一样。
注意:attach命令将显示 ENTRYPOINT/CMD 进程的输出。这可能看起来好像挂起命令被挂起,而实际上该进程实际上可能根本就没有与终端进行交互。
您可以从Docker主机上的不同会话同时多次附加到同一个容器进程。
要停止容器,请使用CTRL-c。 此键序列将SIGKILL发送到容器。 如果–sig-proxy为true(默认值),则CTRL-c将SIGINT发送到容器。 您可以使用CTRL-p CTRL-q键序列从容器中分离并使其保持运行。
注意:在容器内作为PID 1运行的进程由Linux专门处理:它忽略具有默认操作的任何信号。 因此,除非进行编码,否则进程不会在SIGINT或SIGTERM上终止。
在附加到启用tty的容器(即:使用-t启动)时,禁止重定向docker attach命令的标准输入。
当客户端使用docker attach连接到容器的stdio时,Docker使用~1MB内存缓冲区来最大化应用程序的吞吐量。 如果填充此缓冲区,API连接的速度将开始影响过程输出写入速度。 这类似于SSH等其他应用程序。 因此,建议不要运行性能关键型应用程序,这些应用程序通过慢速客户端连接在前台生成大量输出。 相反,用户应使用docker logs命令来访问日志。
使用
docker attach [OPTIONS] CONTAINER
常用的命令行参数:
参数 | 描述 |
---|---|
–no-stdin | Do not attach STDIN |
–sig-proxy | Proxy all received signals to the process |
启动命令
先启动一个容器:
$ docker run -it --rm --name attachtest ubuntu bash
root@f13ee9356da6:/#
然后再在另外一个终端中运行:
docker attach attachtest
之后在两个终端中输入命令,都可以看到同样的输出。
备注:当第二个终端用 exit 命令退出时,第一个终端(也就是启动容器的终端)也会同样因为stdin里面输入了exit 命令而退出,容器关闭。
如果不想影响原有容器的工作,可以用 –no-stdin 参数:
docker attach --no-stdin attachtest
这样不附加 stdin ,也就不会有输入影响容器的运行,这个终端需要推出时,ctrl + c 即可。
4.9 - Docker的logs命令
介绍
https://docs.docker.com/engine/reference/commandline/logs/
docker logs命令批量检索执行时存在的日志。
注意:此命令仅适用于使用 json-file 或 journald 日志记录驱动程序启动的容器。
docker logs --follow
命令将持续从容器的 STDOUT 和 STDERR 流式传输新输出。
将负数或非整数传递给 --tail
无效,并且在该情况下将值设置为all。
docker logs --timestamps
命令将为每个日志条目添加 RFC3339 Nano时间戳,例如 2014-09-16T06:17:46.000000000Z 。为了确保时间戳对齐,时间戳的纳秒部分将在必要时填充为零。
docker logs --details
命令将添加在创建容器时提供给 --log-opt
的额外属性,例如环境变量和标签。
--since
选项仅显示在给定日期之后生成的容器日志。您可以将日期指定为RFC 3339日期,UNIX时间戳或Go duration string(例如1m30s,3h)。除RFC3339日期格式外,您还可以使用RFC3339Nano, 2006-01-02T15:04:05, 2006-01-02T15:04:05.999999999, 2006-01-02Z07:00, and 2006-01-02。如果在时间戳结束时未提供Z或 +-00:00 时区偏移,则将使用客户端上的本地时区。提供Unix时间戳时输入秒[.nanoseconds],其中秒是自1970年1月1日(午夜UTC / GMT)以来经过的秒数,不计算闰秒(也称为Unix纪元或Unix时间)和可选项。纳秒字段是一秒的一小部分,不超过九位数。您可以将–since选项与–follow或–tail选项中的任何一个或两者结合使用。
使用
docker logs [OPTIONS] CONTAINER
常用的命令行参数:
参数 | 描述 |
---|---|
--details |
Show extra details provided to logs |
--follow , -f |
Follow log output |
--since |
Show logs since timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes) |
--tail |
Number of lines to show from the end of the logs |
–timestamps , -t | Show timestamps |
--until |
Show logs before a timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes) |
示例
先启动一个容器,这里会每秒钟打印一条日志:
docker run -it --rm --name logstest ubuntu sh -c "while true; do $(echo date); sleep 1; done"
然后再在另外一个终端中运行:
docker logs -f logstest
就可以在第二个终端中看到输出。
4.10 - Docker的port命令
介绍
https://docs.docker.com/engine/reference/commandline/port/
列出容器的端口映射或特定映射
使用
docker port CONTAINER [PRIVATE_PORT[/PROTO]]
示例
$ docker port test
$ docker port test 7890/tcp
$ docker port test 7890/udp
$ docker port test 7890
4.11 - Docker的rm命令
介绍
https://docs.docker.com/engine/reference/commandline/rm/
删除一个或者多个容器
使用
docker rm [OPTIONS] CONTAINER [CONTAINER...]
命令行参数:
参数 | 描述 |
---|---|
--force , -f |
Force the removal of a running container (uses SIGKILL) |
--link , -l |
Remove the specified link |
--volumes , -v |
Remove the volumes associated with the container |
示例
$ docker rm test
$ docker rm --force redis
$ docker rm $(docker ps -a -q) # 删除所有停止运行的容器
$ docker rm -v redis
5 - Docker资源类命令
5.1 - Docker资源类命令概述
资源类的Docker命令:
命令 | 命令描述 |
---|---|
stats | 显示容器硬件资源使用情况 |
update | 更新容器的硬件资源限制 |
system | 管理系统资源 |
5.2 - Docker的stats命令
介绍
https://docs.docker.com/engine/reference/commandline/stats/
显示容器资源使用情况统计信息的实时流。
docker stats命令返回用于运行容器的实时数据流。要将数据限制为一个或多个特定容器,请指定由空格分隔的容器名称或ID列表。您可以指定已停止的容器,但已停止的容器不会返回任何数据。
如果您想了解有关容器资源使用情况的更多详细信息,请使用 /containers/(id)/stats API端点。
注意:在Linux上,Docker CLI通过从总内存使用量中减去页面缓存使用情况来报告内存使用情况。 API不执行此类计算,而是提供总内存使用量和页面缓存中的金额,以便客户端可以根据需要使用数据。
注意:PIDS列包含该容器创建的进程数和内核线程数。线程是Linux内核使用的术语。其他等效术语是“轻量级进程”或“内核任务”等.PIDS列中的大量数据与少量进程(由ps或top报告)可能表明容器中的某些内容正在创建许多线程。
使用
docker stats [OPTIONS] [CONTAINER...]
常用命令行参数
参数 | 描述 |
---|---|
–all , -a | Show all containers (default shows just running) |
示例
如果没有运行的容器,用下面命令启动一个:
docker run -it --rm --name statstest ubuntu sh -c "while true; do $(echo date); sleep 1; done"
然后在另外一个终端中执行 docker stats
:
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
0412e567f426 statstest 0.32% 1.801MiB / 15.12GiB 0.01% 2.85kB / 0B 0B / 0B 2
更多用法和格式化输出见官方文档。
5.3 - Docker的system命令
介绍
https://docs.docker.com/engine/reference/commandline/system/
管理docker系统
使用
docker system COMMAND
df 子命令
显示docker的磁盘使用
https://docs.docker.com/engine/reference/commandline/system_df/
docker system df
docker system df -v
events 子命令
和docker events命令有何差异?看输出是一样。
info 子命令
和docker info命令有何差异?看输出是一样。
prune 子命令
删除不再使用的资源。
https://docs.docker.com/engine/reference/commandline/system_prune/