docker 常用命令
帮助命令
docker version
docker info
info
比version
更加详细
docker --help
查看可用使用的命令
镜像命令
docker images
列出本地主机的镜像
docker images
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat latest 6fa48e047721 7 days ago 507MB
centos latest 0f3e07c0138f 2 months ago 220MB
标题 | 说明 |
---|---|
REPOSITORY | 镜像的仓库源 |
TAG | 镜像的标签 |
IMAGE ID | 镜像的ID |
CREATED | 镜像创建的时间 |
SIZE | 镜像的大小 |
同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。
如果你不指定一个镜像的版本标签,例如你只使用ubuntu
,docker 将默认使用 ubuntu:latest
镜像
OPTION | 说明 |
---|---|
-a | 列出本地所有的镜像(含中间映像层) |
-q | 只显示镜像ID |
--digests | 显示镜像的摘要信息 |
--no-trunc | 显示完整的镜像信息 |
docker search 某个镜像名字
网站:https://hub.docker.com
命令:docker search [OPTIONS] 镜像名字
OPTION | 说明 |
---|---|
--no-trunc | 显示完整的镜像描述 |
-s | 列出收藏数不小于指定值的镜像 |
--automated | 只列出 automated build类型的镜像 |
docker pull 某个镜像名字
用于下载镜像
命令:docker pull 镜像名字[:TAG]
docker rmi 某个镜像名字 ID
用于删除镜像
-
删除单个
docker rmi -f 镜像ID
-
删除多个
docker rmi -f 镜像名1:TAG 镜像名2:TAG
-
删除全部
docker rmi -f $(docker images -qa)
容器命令
下载一个CentOS镜像演示
docker pull centos
新建并启动容器
docker run [OPTIONS] IMAGE COMMAND
OPTIONS | 说明 |
---|---|
--name="容器新名字" | 为容器指定一个名称 |
-d | 后台运行容器,并返回容器ID,也即启动守护式容器 |
-i | 以交互模式运行容器,通常与 -t 同时使用 |
-t | 为容器重新分配一个伪输入终端,通常与 -i 同时使用 |
-P | 随机端口映射 |
-p | 指定端口映射,有以下四种格式(常用:hostPort:containerPort ) |
[root@localhost ~]# docker run -it --name mycentos0115 centos
[root@e2ec073c1616 /]#
[root@e2ec073c1616 /]# exit
exit
[root@localhost ~]#
列出当前所有正在运行的容器
docker ps [OPTIONS]
OPTIONS | 说明 |
---|---|
-a | 列出当前所有正在运行的容器+历史上运行过的 |
-l | 显示最近创建的容器 |
-n | 显示最近n个创建的容器 |
-q | 静默模式,只显示容器编号 |
--no-trunc | 不截断输出 |
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e2ec073c1616 centos "/bin/bash" 46 hours ago Exited (0) 8 minutes ago mycentos0115
[root@localhost ~]# docker ps -n 3
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e2ec073c1616 centos "/bin/bash" 46 hours ago Exited (0) 9 minutes ago mycentos0115
d88d8916e6ed 0f3e07c0138f "/bin/bash" 46 hours ago Exited (0) 46 hours ago cool_golick
023bcc5511da fce289e99eb9 "/hello" 2 days ago Exited (0) 2 days ago jovial_lovelace
[root@localhost ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e2ec073c1616 centos "/bin/bash" 46 hours ago Exited (0) 9 minutes ago mycentos0115
退出容器
两种退出方式:
-
exit
:容器停止退出[root@localhost ~]# docker run -it --name mycentos0115 centos [root@e2ec073c1616 /]# [root@e2ec073c1616 /]# exit exit [root@localhost ~]#
-
ctrl+P+Q
:容器不停止退出
启动容器
docker start 容器ID或者容器名
重启容器
docker restart 容器ID或者容器名
停止容器
docker stop 容器ID或者容器名
强制停止容器
docker kill 容器ID或者容器名
stop
:正常停止(相当于正常关机)
kill
:强制停止(相当于拔电源)
删除已停止的容器
docker rm 容器ID
一次性删除多个容器
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm
重点
启动守护式容器
docker run -d 容器名
[root@localhost ~]# docker run -d centos
523e8e75c1ebc006d001f425207de9383df238d65a6e1133b25d4b6fcdedd384
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
523e8e75c1eb centos "/bin/bash" 36 seconds ago Exited (0) 34 seconds ago confident_ptolemy
使用镜像centos:latest
以后台模式启动一个容器
问题:然后docker ps -a
进行查看, 会发现容器已经退出
很重要的要说明的一点: Docker容器后台运行,就必须有一个前台进程.
容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。
这样的容器后台启动后,会立即自杀因为他觉得他没事可做了.
所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行
查看容器日志
docker logs -f -t --tail 容器ID
[root@localhost ~]# docker run -d centos /bin/sh -c "while true;do echo hello zzyy;sleep 2;done"
99f4fa63e4a5d9b2bb3199dbca9e6c9bb8824e5cae0c1e4ac25f599c234795ec
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
99f4fa63e4a5 centos "/bin/sh -c 'while t…" 15 seconds ago Up 14 seconds goofy_wescoff
[root@localhost ~]# docker logs -tf --tail 10 99f4fa63e4a5
2019-12-23T03:56:11.629302121Z hello zzyy
2019-12-23T03:56:13.633494515Z hello zzyy
2019-12-23T03:56:15.636471680Z hello zzyy
2019-12-23T03:56:17.639973740Z hello zzyy
2019-12-23T03:56:19.643071248Z hello zzyy
2019-12-23T03:56:21.646532522Z hello zzyy
2019-12-23T03:56:23.651153202Z hello zzyy
2019-12-23T03:56:25.656709811Z hello zzyy
2019-12-23T03:56:27.660367510Z hello zzyy
2019-12-23T03:56:29.663420597Z hello zzyy
2019-12-23T03:56:31.670791148Z hello zzyy
2019-12-23T03:56:33.674902206Z hello zzyy
2019-12-23T03:56:35.677960002Z hello zzyy
OPTIONS | 说明 |
---|---|
-t | 加入时间戳 |
-f | 跟随最新的日志打印 |
--tail | 数字 显示最后多少条 |
查看容器内运行的进程
docker top 容器ID
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
09b9a3956ae8 centos "/bin/sh -c 'while t…" 2 minutes ago Up 2 minutes festive_lumiere
[root@localhost ~]# docker top 09b9a3956ae8
UID PID PPID C STIME TTY TIME CMD
root 39147 39130 0 19:58 ? 00:00:00 /bin/sh -c while true;do echo hello zzyy;sleep 2;done
root 39482 39147 0 20:00 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 2
查看容器内部细节
docker inspect 容器ID
[root@localhost ~]# docker inspect 09b9a3956ae8
[
{
"Id": "09b9a3956ae84312103f16f916175df0aa5b2264a2bfc2deae13ad01c839ca2a",
"Created": "2019-12-23T11:58:11.202580642Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true;do echo hello zzyy;sleep 2;done"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 39147,
"ExitCode": 0,
"Error": "",
"StartedAt": "2019-12-23T11:58:12.157584635Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:0f3e07c0138fbe05abcb7a9cc7d63d9bd4c980c3f61fea5efa32e7c4217ef4da",
"ResolvConfPath": "/var/lib/docker/containers/09b9a3956ae84312103f16f916175df0aa5b2264a2bfc2deae13ad01c839ca2a/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/09b9a3956ae84312103f16f916175df0aa5b2264a2bfc2deae13ad01c839ca2a/hostname",
"HostsPath": "/var/lib/docker/containers/09b9a3956ae84312103f16f916175df0aa5b2264a2bfc2deae13ad01c839ca2a/hosts",
"LogPath": "/var/lib/docker/containers/09b9a3956ae84312103f16f916175df0aa5b2264a2bfc2deae13ad01c839ca2a/09b9a3956ae84312103f16f916175df0aa5b2264a2bfc2deae13ad01c839ca2a-json.log",
"Name": "/festive_lumiere",
"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,
"Capabilities": null,
"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/9dfbf6fc69dcb3088fa62d76d042b5f1e7044e8e640fa65cd40a092ab32cad43-init/diff:/var/lib/docker/overlay2/6c1a51d70b795ac7f286b93a085563f5017435cced27f40c8cf282aa334d7e9c/diff",
"MergedDir": "/var/lib/docker/overlay2/9dfbf6fc69dcb3088fa62d76d042b5f1e7044e8e640fa65cd40a092ab32cad43/merged",
"UpperDir": "/var/lib/docker/overlay2/9dfbf6fc69dcb3088fa62d76d042b5f1e7044e8e640fa65cd40a092ab32cad43/diff",
"WorkDir": "/var/lib/docker/overlay2/9dfbf6fc69dcb3088fa62d76d042b5f1e7044e8e640fa65cd40a092ab32cad43/work"
},
"Name": "overlay2"
},
"Mounts": [],
"Config": {
"Hostname": "09b9a3956ae8",
"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",
"while true;do echo hello zzyy;sleep 2;done"
],
"Image": "centos",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20190927",
"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": "0b978ac2f380701aeb0b94d1a375f9b0fc5634cecd5e644b3e9b8568e069abd4",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/0b978ac2f380",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "bd918fa955d1accaa37e10a0a07e17c362300ecc3cc474f3e2e371e50fa9dfcd",
"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": "1b606ccc32ec343d8cc31ad4923d595e7143afb8b01f7c447cdb2ecd358a588e",
"EndpointID": "bd918fa955d1accaa37e10a0a07e17c362300ecc3cc474f3e2e371e50fa9dfcd",
"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
}
}
}
}
]
进入正在运行的容器并以命令行交互
docker exec -it 容器ID /bin/bash
# 重新进入
docker attach 容器ID
[root@localhost ~]# docker run -it centos
[root@46ff744958d4 /]# [root@localhost ~]#
[root@localhost ~]# docker exec -t 46ff744958d4 ls -l /tmp
total 8
-rwx------. 1 root root 1379 Sep 27 17:13 ks-script-0n44nrd1
-rwx------. 1 root root 671 Sep 27 17:13 ks-script-w6m6m_20
[root@localhost ~]#
[root@localhost ~]# docker exec -t 46ff744958d4 /bin/bash
[root@46ff744958d4 /]#
[root@localhost ~]# docker run -it centos /bin/bash
[root@eaa45b31aa88 /]# [root@localhost ~]#
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eaa45b31aa88 centos "/bin/bash" 59 seconds ago Up 58 seconds elegant_lehmann
[root@localhost ~]# docker attach eaa45b31aa88
[root@eaa45b31aa88 /]# ls -l
total 0
lrwxrwxrwx. 1 root root 7 May 11 2019 bin -> usr/bin
drwxr-xr-x. 5 root root 360 Dec 23 12:07 dev
drwxr-xr-x. 1 root root 66 Dec 23 12:07 etc
...
两者区别:
-
attach
:直接进入容器启动命令的终端,不会启动新的进程 -
exec
:是在容器中打开新的终端,并且可以启动新的进程
从容器内拷贝文件到主机上
docker cp 容器ID:容器内路径 目的主机路径
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
46ff744958d4 centos "/bin/bash" 10 minutes ago Up 10 minutes objective_goldstine
[root@localhost ~]# docker attach 46ff744958d4
[root@46ff744958d4 /]# cd /tmp/
[root@46ff744958d4 tmp]# ls
ks-script-0n44nrd1 ks-script-w6m6m_20
[root@46ff744958d4 tmp]#
[root@localhost ~]# docker cp 46ff744958d4:/tmp/ks-script-0n44nrd1 /root
[root@localhost ~]# ll
总用量 12
-rw-------. 1 root root 1799 8月 6 15:51 anaconda-ks.cfg
-rw-r--r--. 1 root root 1847 8月 6 15:56 initial-setup-ks.cfg
-rwx------. 1 root root 1379 9月 28 01:13 ks-script-0n44nrd1
drwxr-xr-x. 2 root root 6 12月 21 10:27 公共
drwxr-xr-x. 2 root root 6 12月 21 10:27 模板
drwxr-xr-x. 2 root root 6 12月 21 10:27 视频
drwxr-xr-x. 2 root root 6 12月 21 10:27 图片
drwxr-xr-x. 2 root root 6 12月 21 10:27 文档
drwxr-xr-x. 2 root root 6 12月 21 10:27 下载
drwxr-xr-x. 2 root root 6 12月 21 10:27 音乐
drwxr-xr-x. 3 root root 18 12月 21 16:30 桌面
[root@localhost ~]#
小总结
操作 | 英文说明 | 翻译 |
---|---|---|
attach | Attach to a running container | 当前 shell 下 attach 连接指定运行镜像 |
build | Build an image from a Dockerfile | 通过 Dockerfile 定制镜像 |
commit | Create a new image from a container changes | 提交当前容器为新的镜像 |
cp | Copy files/folders from the containers filesystem to the host path | 从容器中拷贝指定文件或者目录到宿主机中 |
create | Create a new container | 创建一个新的容器,同 run,但不启动容器 |
diff | Inspect changes on a container’s filesystem | 查看 docker 容器变化 |
events | Get real time events from the server | 从 docker 服务获取容器实时事件 |
exec | Run a command in an existing container | 在已存在的容器上运行命令 |
export | Stream the contents of a container as a tar archive | 导出容器的内容流作为一个 tar 归档文件[对应 import ] |
history | Show the history of an image | 展示一个镜像形成历史 |
images | List images | 列出系统当前镜像 |
import | Create a new filesystem image from the contents of a tarball | 从tar包中的内容创建一个新的文件系统映像[对应export] |
info | Display system-wide information | 显示系统相关信息 |
inspect | Return low-level information on a container | 查看容器详细信息 |
kill | Kill a running container | kill 指定 docker 容器 |
load | Load an image from a tar archive | 从一个 tar 包中加载一个镜像[对应 save] |
login | Register or Login to the docker registry server | 注册或者登陆一个 docker 源服务器 |
logout | Log out from a Docker registry server | 从当前 Docker registry 退出 |
logs | Fetch the logs of a container | 输出当前容器日志信息 |
port | Lookup the public-facing port which is NAT-ed to PRIVATE_PORT | 查看映射端口对应的容器内部源端口 |
pause | Pause all processes within a container | 暂停容器 |
ps | List containers | 列出容器列表 |
pull | Pull an image or a repository from the docker registry server | 从docker镜像源服务器拉取指定镜像或者库镜像 |
push | Push an image or a repository to the docker registry server | 推送指定镜像或者库镜像至docker源服务器 |
restart | Restart a running container | 重启运行的容器 |
rm | Remove one or more containers | 移除一个或者多个容器 |
rmi | Remove one or more images | 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除] |
run | Run a command in a new container | 创建一个新的容器并运行一个命令 |
save | Save an image to a tar archive | 保存一个镜像为一个 tar 包[对应 load] |
search | Search for an image on the Docker Hub | 在 docker hub 中搜索镜像 |
start | Start a stopped containers | 启动容器 |
stop | Stop a running containers | 停止容器 |
tag | Tag an image into a repository | 给源中镜像打标签 |
top | Lookup the running processes of a container | 查看容器中运行的进程信息 |
unpause | Unpause a paused container | 取消暂停容器 |
version | Show the docker version information | 查看 docker 版本号 |
wait | Block until a container stops, then print its exit code | 截取容器停止时的退出状态值 |