docker入门(5)--docker系统管理
当你需要进行一些错误排查时,下面介绍的命令将会非常有用。
1. 获取docker的系统信息
docker version
命令可以看到客户端和服务端的相关API信息、版本信息等。
[root@node2 ~]# docker version
Client:
Version: 18.06.1-ce
API version: 1.38
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:23:03 2018
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: 18.06.1-ce
API version: 1.38 (minimum version 1.12)
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:25:29 2018
OS/Arch: linux/amd64
Experimental: false
docker是C/S架构的,client端我们可以简单的看做是一个可以与server端的API进行通信的工具即可,它通过我们前面了解的docker container这样的命令与server进行交互。
server端是实际运行各个container的,它可以是本地主机,也可以是远程主机或者云服务器等。
我们可以通过在client端指定相关的环境变量配置来管理不同的server端,例如:DOCKER_HOST,DOCKER_TLS_VERIFY,DOCKER_CERT_PATH。
下一个比较重要的命令是docker system info
,这个命令可以告诉我们,当前的docker engine工作在什么模式下(例如swarm模式),使用何种存储驱动来管理统一文件系统,当前linux系统的核心版本等。
[root@node2 ~]# docker system info
Containers: 2
Running: 2
Paused: 0
Stopped: 0
Images: 8
Server Version: 18.06.1-ce
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 468a545b9edcd5932818eb9de8e72413e616e86e
runc version: 69663f0bd4b60df09991c08812a60108003fa340
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-862.14.4.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 23.37GiB
Name: node2.xxx.com
ID: UA2Y:7YJ6:ZHON:5UXE:J554:FKXM:PVHL:UHIF:SNTY:LXEU:QY7E:RVMK
Docker Root Dir: /var/lib/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://docker.mirrors.ustc.edu.cn/
Live Restore Enabled: false
2. 列出当前资源使用情况
伴随着长时间的使用,我们可能积攒了很多docker相关资源,包括:镜像、容器、数据卷。熟悉对他们进行管理,能够及时的释放我们的内存、硬盘等资源。
与磁盘空间使用情况相关的命令docker system df
:
[root@node2 ~]# docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 7 2 585MB 206.3MB (35%)
Containers 2 2 2B 0B (0%)
Local Volumes 3 2 316.7MB 0B (0%)
Build Cache 0 0 0B 0B
如果你需要更详细的信息,可以加上参数-v:docker system df -v
:
[root@node2 ~]# docker system df -v
Images space usage:
REPOSITORY TAG IMAGE ID CREATED ago SIZE SHARED SIZE UNIQUE SiZE CONTAINERS
pinger latest c3c2f4b53219 3 days ago ago 4.413MB 4.413MB 0B 0
my-alpine latest 878a60dd0a6d 3 days ago ago 5.967MB 4.413MB 1.554MB 0
centos 7 75835a67d134 2 weeks ago ago 200.4MB 0B 200.4MB 0
nginx alpine aae476eee77d 3 weeks ago ago 17.74MB 4.413MB 13.33MB 1
alpine latest 196d12cf6ab1 6 weeks ago ago 4.413MB 4.413MB 0B 0
hello-world latest 4ab4c602aa5e 7 weeks ago ago 1.84kB 0B 1.84kB 0
mongo 3.7 3db1239d511b 4 months ago ago 365.3MB 0B 365.3MB 1
Containers space usage:
CONTAINER ID IMAGE COMMAND LOCAL VOLUMES SIZE CREATED ago STATUS NAMES
e65ac72b9c3f mongo:3.7 "docker-entrypoint.s…" 2 0B 16 hours ago ago Up 16 hours my-mongo
50a5ed614ea1 nginx:alpine "nginx -g 'daemon of…" 0 2B 17 hours ago ago Up 17 hours competent_lamport
Local Volumes space usage:
VOLUME NAME LINKS SIZE
shared-data 0 0B
065a116f6ef50622aa3e1f674f81cc61d13e4618b6f726b5fd77f4813fcc5e84 1 0B
10242f5b75f1ba88e1e2abdbb2cc874887f4181353ea62ca6f2c6735c32b0e7b 1 316.7MB
Build cache usage: 0B
3. 修剪无用的资源
3.1 修剪容器
docker container prune
移除所有不在运行状态的容器:
[root@node2 ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3b51d7d65aed centos:7 "/bin/bash" 5 seconds ago Exited (0) 4 seconds ago dazzling_perlman
e65ac72b9c3f mongo:3.7 "docker-entrypoint.s…" 17 hours ago Up 17 hours 27017/tcp my-mongo
50a5ed614ea1 nginx:alpine "nginx -g 'daemon of…" 17 hours ago Up 17 hours 0.0.0.0:8080->80/tcp competent_lamport
[root@node2 ~]# docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
3b51d7d65aed1dc2b174406d303fb9c75d01bce98f3224e92349ff39021993af
Total reclaimed space: 0B
某些时候,我们可能需要移除所有的容器(包括运行中的),可以使用如下命令:
docker container rm -f $(docker container ls -aq)
3.2 修剪镜像
在自行构建镜像的过程中,可能会产生很多<none>:<none>这样的镜像,可用如下命令清除:
docker image prune
上面的命令会有一个提醒你确认删除的交互过程,可以使用-f参数,强制清除:
docker image prune -f
还可以清除所有未被使用到的镜像:
docker image prune --force --all
3.3 修剪数据卷
数据卷是用来进行数据持久化的,因此进行相关操作时,要注意确保你的数据确实是无用的,才可以进行prune:
docker volume prune
以上命令,用于删除所有未被任何容器挂载使用到的数据卷。
也可以通过标签来定向删除某一个数据卷:
docker volume prune --filter 'label=demo'
通过标签删除多个数据卷:
docker volume prune --filter 'label=demo' --filter 'label=test'
3.5 修剪网络
网络部分我们还未开始了解学习,简单先了解一下命令即可:
docker network prune
以上命令将删除所有未被任何容器或者服务连接的网络。
3.6 删除一切
以上所有的删除动作,可以使用一个命令来一起触发:
docker system prune
一般不推荐使用。
4. 获取docker系统事件
docker system events
该命令类似linux中的tail -f
命令,是阻断式的,且实时刷新。