目录
1、进入docker容器
##shbzserver是容器名,以下就是进入该容器的命令
docker exec -it shbzserver /bin/bash
2、删除docker 容器
##查看所有的容器
docker ps -a
##查看所有运行的容器
docker ps
##根据一个镜像运行容器
##将镜像shbzserver:1.0.1 在后台运行为一个名为shbzserver的容器,将内部17006端口映射到容器外的17008
##并将宿主机的/work/shbz/data目录和容器内的/opt/data目录相互映射
docker run -d --name shbzserver -p 17008:17006 -v /work/shbz/data:/opt/data shbzserver:1.0.1
##暂停容器
docker stop shbzserver
##启动容器
docker start shbzserver
##重启容器
docker restart shbzserver
##删除容器(必须先暂停掉)
docker rm shbzserver
##强制删除容器
docker rm -f shbzserver
3、将容器内的文件或目录拷贝到宿主机上
##将容器名为shbzserver的容器中/opt/logs/shbz.log文件拷贝到宿主机的/work/shbzserver/logs/目录下
docker cp shbzserver:/opt/logs/shbz.log /work/shbzserver/logs/
4、将运行的容器导出成新的镜像
语法
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS说明:
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
示例:
docker commit -a "***" -m "my datasync" datasyncserver datasyncserver:1.1.1
查看镜像:
docker images datasyncserver:1.1.1
REPOSITORY TAG IMAGE ID CREATED SIZE
datasyncserver 1.1.1 439d80ca9576 20 seconds ago 930MB
5、镜像常用命令
##查看所有镜像
docker images
##查看某个镜像
docker images imagename:tag
##删除镜像
docker rmi -f imagename
6、导出导入镜像
##导出镜像
docker save imagename:tag > image.tar
##示例
docker save harbor.com/integrated/bjcaauthserver:1.0.0 > bjcaserver.tar
##导入镜像
docker load < image.tar
##示例
docker load < bjcaserver.tar
7、重启docker
service docker restart
8、Docker System命令详解
Docker镜像,容器,数据卷以及网络都会占用主机的磁盘空间,这样的话,磁盘很容易就会被用完。这篇博客介绍了一个简单的解决方案 - Docker System命令。
##查看所有镜像/容器/容器卷/network占用的空间情况
docker system df
##查看所有镜像/容器/容器卷/network占用的空间的详情
docker system df -v
##清理所有不用的镜像和暂停的容器和容器卷和network以及dangling镜像 成产环境慎用
docker system prune
9、docker 删除所有无名称的镜像(悬空镜像)
我们在build镜像的过程中,可能会产生一些临时的不具有名称也没有作用的镜像他们的名称一般都是,我们可以执行下面的命令将其清除掉:
docker rmi $(docker images -f "dangling=true" -q)
# 或者
docker image prune -a -
10、docker stats监控容器资源消耗
在容器的使用过程中,如果能及时的掌握容器使用的系统资源,无论对开发还是运维工作都是非常有益的。幸运的是 docker 自己就提供了这样的命令:docker stats。
默认情况下,stats 命令会每隔 1 秒钟刷新一次输出的内容直到你按下 ctrl + c。下面是输出的主要内容:
[CONTAINER]:以短格式显示容器的 ID。
[CPU %]:CPU 的使用情况。
[MEM USAGE / LIMIT]:当前使用的内存和最大可以使用的内存。
[MEM %]:以百分比的形式显示内存使用情况。
[NET I/O]:网络 I/O 数据。
[BLOCK I/O]:磁盘 I/O 数据。
[PIDS]:PID 号。
只返回当前状态:
如果不想持续的监控容器使用资源的情况,可以通过 --no-stream 选项只输出当前的状态:
docker stats --no-stream
这样输出的结果就不会变化了,看起来省劲不少。
只输出指定的容器:
如果我们只想查看个别容器的资源使用情况,可以为 docker stats 命令显式的指定目标容器的名称或者是 ID:
docker stats --no-stream registry 1493
当有很多的容器在运行时,这样的结果看起来会清爽一些。这里的 registry 和 1493 分别是容器的名称和容器的 ID。注意,多个容器的名称或者是 ID 之间需要用空格进行分割。
细心的同学可能已经发现了,第一列不再显示默认的容器 ID,而是显示了我们传入的容器名称和 ID。基于此,我们可以通过简单的方式使用容器的名称替代默认输出中的容器 ID:
docker stats $(docker ps --format={{.Names}})
用容器的名称替代 ID 后输出的结果是不是友好一些?
格式化输出的结果
我们在前面搞了点小手段把输出中的容器 ID 替换成了名称。其实 docker stats 命令支持我们通过 --format 选项自定义输出的内容和格式:
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
上面的命令中我们只输出了 Name, CPUPerc 和 Memusage 三列。下面是自定义的格式中可以使用的所有占位符:
.Container 根据用户指定的名称显示容器的名称或 ID。
.Name 容器名称。
.ID 容器 ID。
.CPUPerc CPU 使用率。
.MemUsage 内存使用量。
.NetIO 网络 I/O。
.BlockIO 磁盘 I/O。
.MemPerc 内存使用率。
.PIDs PID 号。
有了这些信息我们就可以完全按照自己的需求或者是偏好来控制 docker stats 命令输出的内容了。
除了以 table 格式输出结果,还可以通过 format 选项输出 json 格式的结果:
docker stats --no-stream --format \
"{\"container\":\"{{ .Container }}\",\"memory\":{\"raw\":\"{{ .MemUsage }}\",\"percent\":\"{{ .MemPerc }}\"},\"cpu\":\"{{ .CPUPerc }}\"}"