docker 清理无用容器或者镜像 docker删除容器和镜像


8-docker 无法删除dead状态的容器docker rm 的时候 , 死活删除不了容器 , docker kill也不行  , 容器状态是dead , 重启docker服务也试过了 , 不行
想到可能是我迁移过docker容器的存储地址导致的 , 不太确定原因
https://www.cnblogs.com/jie-fang/p/10279426.html
以下为自己实践过程 , 建议先看完教程再实践 , 后面有坑:
按照上面一顿操作后 , 发现nginx转发异常 , 项目无法访问
赶紧用这个方法: https://www.jianshu.com/p/19cefdedc3fc
cd /var/run
touch nginx.pid
输入nginx的进程id(master process对应的那个id)
nginx -s reload
发现还是不行 , 继续执行
nginx -c /etc/nginx/nginx.conf
nginx -s reload
ok , 完成!
docker 清理无用容器或者镜像
docker rmdocker ps -a | grep Exited | awk '带迹{print $1}'删除异常停止的蠢慧并碧返docker容器
docker rmi -fdocker images | grep '<none>' | awk '{print $3}'删除名称或标签为none的镜像
Docker 占用资源膨胀那么快 , 你知道怎么清理?
如果经常使用 docker , 你会发现 docker 占用的资源膨胀很快 , 其中最明显也最容易被察觉的应该是对磁盘空间的占用 。本文将介绍如何快速的清理 docker 占用的系统资源 , 具体点说就是删除那些无用的 镜像、容器、网络和数据卷 。
在进行资源清理之前我们有必要搞清楚 docker 都占用了哪些系统的资源 。这需要综合使用不同的命令来完成 。
docker container ls :默认只列出正在运行的容器 , -a 选项会列出包括停止的所有容器 。
docker image ls :列出镜像信息 , -a 选项会列出 intermediate 镜像(就是其它镜像依赖的层) 。
docker volume ls :列出数据卷 。
docker network ls :列出 network 。
docker info :显示系统级别的信息 , 比如容器和镜像的数量等 。
通过这些命令查看 docker 使用的资源情况后 , 相信你已经决定要清理 docker 占用的一些资源了!让我们先从那些未被使用的资源开始 。
Docker 提供了方便的 docker system prune 命令来删除那些已停止的容器、dangling 镜像、未被容器引用的 network 和构建过程中的 cache:
<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">$ docker system prune</pre>
安全起见 , 这个命令默认不会删除那些未被任何容器引用的数据卷 , 如果需要同时删除这些数据卷 , 你需要显式的指定 --volumns 参数 。比如你可能想要执行下面的命令:
<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">$ docker system prune --all --force --volumns</pre>
这次不仅会删除数据卷 , 而且连确认的过程都没有了!注意 , 使用 --all 参数后会删除所有未被引用的镜像而不仅仅是 dangling 镜像 。
这里有必要解释一下何为 dangling images , 其实可以简单的理解为未被任何镜像引用的镜像 。比如在你重新构建了镜像后 , 那些之前构建的且不再被引用的镜像层就变成了 dangling images:
在本地的镜像更新之后 , 就会出现类似图中红框内的 <none> 镜像 。这表示旧的镜像已经不再被引用了 , 此时它们就变成了 dangling images 。如果使用 -a 参数 , 你还会发现另外一种类型的 <none> 镜像 , 它们的 repository 和 tag 列都表现为 <none>:
这些镜像被称为 intermediate 镜像(就是其它镜像依赖的层) 。
我们还可在不同在子命令下执行 prune , 这样删除的就是某类资源:
docker container prune# 删除所有退出状态的容器
docker volume prune# 删除未被使用的数据卷
docker image prune# 删除 dangling 或所有未被使用的镜像
这里的 "安装时的状态" 指资源占用情况而不是 docker 的相关配置 。这也是一种比较常见的用例 , 比如笔者就需要在一个干净的 docker 环境中自动化的还原出某天的一个生产环境(使用生产环境的备份数据)用于 bug 调查 。让我们一起来看看都需要做些什么?
回想我们前面介绍的 docker system prune --all --force --volumns 命令 , 如果在执行这个命令前系统中所有的容器都已停止 , 那么这个命令就会移除所有的资源!好 , 现在让我们想办法停掉系统中的所有容器 。
docker container stop 命令可以停止一个或多个容器 , 我们只需要把系统中所有在运行的容器罗列出来就可以了 。由于 docker 并不介意我们再次停止一个已经停止了的容器 , 干脆简单粗暴点 , 直接列出所有的容器(包括已经停止的)!
<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">$ docker container ls -a -q</pre>
-a 显示所有的容器 , -q 只显示数字形式的容器 ID 。
然后把这里命令执行的结果作为 docker container stop 命令的参数:
<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">(docker container ls -a -q)</pre>
完整的恢复 docker 环境的命令如下:
<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">(docker container ls -a -q) && docker system prune --all --force --volumns</pre>
和前面的 prune 命令类似 , 也可以完全删除某一类资源:
删除容器 :docker container rm(docker image ls -a -q)
删除数据卷 :docker volume rm(docker network ls -q)
上面的命令可以完成任务但是却很繁琐 , 我们可以通过 shell 的别名功能来简化这些命令的执行 。
<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">alias docker-clean-unused='docker system prune --all --force --volumes' alias docker-clean-all='docker stop $(docker container ls -a -q) && docker system prune --all --force --volumes'</pre>
把上面的命令写入到用户的 ~/.bashrc 文件中就可以了!
执行一次清理任务:
经常清理系统资源不仅能够让系统运行的更流畅 , 也利于我们把精力集中在相关的重点资源上面 。所以建议大家能够使用相关的资源清理命令 , 让 docker 保持清爽和高效 。
参考:
Clean out your Docker images, containers and volumes with single commands
Python 零基础入门课程
此课程为面授班和网络班 , 一共 15 个课时 , 每周上一个全天 , 历时4个月 。附加:录播视频+笔记+答疑2019-6月份开课
Python 自动化运维进阶课程
此课程为面授班和网络班 , 一共 15 个课时 , 每周上一个全天 , 历时4个月 。附加:录播视频+笔记+答疑2019-4月份开课
Docker+K8s 课程
此课程为网络班 , 一共 150个课时 , 每周上一个全天 , 历时4个月 。附加:录播视频+笔记+答疑现已开课
现在报名即可享受早鸟价
golang 课程
早报名可享受早鸟价
想要详细了解和报名的同学可以扫码添加好友私聊

docker的容器常规操作解释:创建一个容器 , 但容器处于停止状态
解释:启动容器
解释:
-t : 让Docker分配一个伪终端并绑定到容器的标准输入上
-i: 让容器的标准输入保持打开
-d: 让Docker容器在后台以守护态运行
解释:
-details:打印详细信息
-f,-follow:保持持续输出
-since string:输出从某个时间开始的日志
-tail string:输出最近的若干日志
-t,-timestamps:输出时间戳信息
-until string:输出某个时间之前的日志
解释:暂停容器 , 暂停后 , 容器处于paused状态
解释:将paused状态的容器恢复至运行状态
解释: 终止一个运行状态的容器 , 但是这个终止不是立即执行的 。该命令会先向容器发送一个SIGTERM信号 , 等待一段超时时间(默认为10s)后,再发送SIGKILL信号终止容器 , 而终止容器的关键就在于SIGKILL信号 。
解释: 终止一个运行状态的容器 , 但是这个终止是立即执行的 。该命令直接发送SIGKILL信号强行终止容器 。
解释: 重启容器
解释:进入容器 。使用这个命令有时候并不方便 , 当多个窗口同时attach到同一个容器的时候 , 所有窗口都会同步显示;当某个窗口因命令阻塞时 , 其他窗口也无法执行操作;默认使用CTRL+q或者CTRL+p退出容器
解释:
-d,--detach:在容器中后台执行命令
--detach-keys="":指定将容器切回后台的案件
-e,--env=[]:指定环境变量列表
-i,--interactive=true|false:打开标准输入接收用户输入命令 , 默认值为false
--privileged=true|false:是否给执行命令以高权限 , 默认值为false
-t,--try=true|false:分配伪终端 , 默认值为false
-u , --user="":执行命令的用户名或ID
解释:
删除处于退出或者终止状态的容器
-f,--force=false:是否强行终止并删除一个处于运行状态的容器
-l,--link=false:删除容器的链接 , 但保留容器
-v,--volumns=false:删除容器挂载的数据卷
解释:导出容器 。导出一个已经创建的容器到文件 , 不管此时这个容器是否处于运行状态 。在这里如果把export换成save , 再把af18换成镜像名称:tag , 就是导出镜像的命令了 。但是这两个命令的区别在于:docker export命令丢弃了原容器的历史信息及元数据,而docker save命令会保留原文件的历史信息 。
解释:将导出的文件变成镜像 。当然 , 这个也可以用docker load命令来执行 。
解释:查看容器具体信息 , 比如:容器ID,创建时间 , 路径 , 状态 , 镜像 , 配置等
解释: 查看容器内进程信息
解释:查看容器的内存、CPU、存储、网络等使用情况
-a,-all:输出所有容器统计信息
-format string: 格式化输出信息
-no-stream:不持续输出 , 默认会自动更新持续实时结果
-no-trunc:不截断输出信息
解释:第一行命令为将test容器的temp文件夹复制到主机的data文件夹下
第二行的命令为将主机的data文件夹复制到test容器的tmp文件夹下
解释:查看容器内的数据修改
解释:查看test容器的端口映射情况
解释:修改容器的一些运行时配置 。主要是一些资源限制配额 。
docker删除镜像的命令
docker删除镜像的命令是docker rmi 。
如果要删除本地的镜像 , 可以使用docker rmi(注意rm为删除容器 , 而rmi为删除镜像 , 其中i代表image)命令 , 它的具体语法如下:docker rmi [OPTIONS] IMAGE [IMAGE…] 。
其中:docker rmi:Docker删除镜像的命令关键词;OPTIIONS:命令选项 , -f强制删除镜像;IMAGE:需要删除的镜像 。灶数码这里的镜像可以用“镜像短ID”、“镜像长ID”、“镜像名”、毕羡“镜像的digest”来标识 。
使用docker images--digests查看镜像的具体信息 , 包括镜像的digest 。
Docker
Docker是一个开源的应用容器引隐哪擎 , 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中 , 然后发布到任何流行的Linux机器上 , 也可以实现虚拟化 , 容器是完全使用沙箱机制 , 相互之间不会有任何接口 。
Docker是PaaS提供商dotCloud开源的一个基于LXC的高级容器引擎 , 源代码托管在Github上 , 基于go语言并遵从Apache2.0协议开源 。

docker 使用运行容器
sudo docker run -it -v /home/lcj/test_docker:/home/lcj/test_docker tensorflow/tensorflow:1.13.1-gpu-py3
参数:
-d 后台运行并返回容器ID , 如 -itd
-e 设置环境变量 , 如 -e NVIDIA_VISIBLE_DEVICE=0 使用编号为 0 的GPU
-i 打开 STDIN , 用于控制台交互 , 通常跟 -t 一起使用
--net 容器网络设置 , 如 --net my_network , 或者 --net=contianer:NAME_or_ID , 使用其他容器的网络 , 共享 IP 和 PORT 等资源
--restart 指定容器停止后的启动的策略 , 如 --restart=always
--runtime=nvidia 使用 nvidia 模式运行 , 跟 -e 一起使用 , 可以在容器里使用 GPU
-t 为容器重新分配一个伪输入终端 , 通常与 -i 一起使用
-v 给容器挂载存储卷 , 挂载到容器的某个目录 , 如 -v /home/lcj/test_docker:/home/lcj/test_docker
-w 指定容器的工作目录
停止容器
docker stop 容器ID
或者 docker stop `docker ps -a -q` 停止所有容器
重启容器
docker restart 容器ID
进入一个运行中的容器
docker attach 容器ID
保存容器
docker save myimage | bzip2 -9 -c > /home/lcj/save.tar.bz2
加载容器
bzip2 -d -c < /home/lcj/save.tar.bz2 | docker load
杀掉运行中的容器
docker kill -s KILL 容器ID
-s:向容器中发送一个信号
docker rm 命令
参数:
-f :通过 SIGKILL 强制删除一个容器 , 如 docker rm -f a
-l:移除容器间的网络连接 , 而非容器本身 , 如 docker rm -l b , 其中 b 为连接名 , 而非容器名
-v:删除与容器关联的卷
docker create :创建一个容器但不运行它 , 语法同 docker run
docker ps
-a:显示所有的容器 , 包括未运行的
-f:根据条件过滤显示的内容
-l:显示最近创建的容器
-n:列出最近创建的 n 个容器
-q:静默模式 , 只显示容器 ID
列出所有创建的容器 ID
docker ps -a -q
停止所有容器 ID
docker stop`docker ps -a -q`
获取容器/镜像的元数据
docker inspect 容器/镜像名
docker top :查看容器中的进程信息
docker top a(a 是容器)
docker attach :链接到正在运行的容器(该容器必须正在运行)
docker attach a (a 是容器)
docker events :从服务器获取实时事件
-f:根据条件过滤事件
--since:从指定的时间戳后显示所有的事件
--until:流水时间显示到指定的时间为止
显示docker 2016年7月1日后的所有事件
docker events -since="1467302400"
显示docker 镜像为mysql:5.6 2016年7月1日后的相关事件
docker events -f "image"="mysql:5.6" --since="1467302400"
备注:如果指定的时间是到秒级的 , 需要将时间转成时间戳 。如果时间为日期的话 , 可以直接使用 , 如--since="2016-07-01"
docker export :将文件系统作为一个 tar 压缩文件导出到 STDOUT
docker port :列出指定的容器端口的映射 , 或者查找将 PRIVATE_PORT NAT 到面向公众的端口
docker port a(a 为容器名)
docker commit: 从容器创建一个新的镜像
-a:提交的镜像作者
-c:使用 Dockerfile 文件来创建镜像
-m:提交时说明的文字
-p:在 commit 时暂停容器
docker commit -a 'lcj' -m 'has update' 容器 ID 镜像名
docker cp :用于容器与主机之间的数据拷贝
将主机的 test_docker 目录拷贝到容器 /home/lcj 目录下
docker cp /home/lcj/test_docker 容器 ID:/home/lcj/
将容器 /home/lcj 目录拷贝到主机的 test_docker 目录下
docker cp 容器 ID:/home/lcj/ /home/lcj/test_docker
docker login/logout :登录或退出一个 Docker 镜像仓库 , 如果未指定镜像仓库地址 , 则默认为 官方 Docker Hub
docker login -u 用户名 -p 密码
docker logout
docker pull :从镜像仓库中拉取或者更新指定镜像
docker pull java
docker push:将本地的镜像上传到镜像仓库 , 需先登录到镜像仓库
docker push myapache:v1
docker search :从 Docker Hub 查找镜像
--automated , 只列出 automated build(自动生成) 类型的镜像
--no-trunc , 显示完整的镜像描述
-s:列出收藏数不少于指定值的镜像
从Docker Hub查找所有镜像名包含java , 并且收藏数大于10的镜像
docker search -s 10 java
docker images :列出本地所有的镜像
-a:列出本地所有的镜像(含中间映像层 , 默认情况下 , 过滤中间映像层)
-q:只显示镜像 ID
docker images 或 docker images ubuntu , 列出本地所有镜像或本地仓库名为 ubuntu 的所有的镜像
dockerrmi :删除一个或多个镜像
-f:强制移除
--no_prune:不移除该镜像的过程镜像 , 默认移除
强制删除本地镜像w3cschool/ubuntu:v4
docker rmi -f w3cschool/ubuntu:v4
docker tag :标记本地镜像 , 将其归入到某一个仓库
将镜像ubuntu:15.10标记为 w3cschool/ubuntu:v3 镜像
docker tag ubuntu:15.10 w3cschool/ubuntu:v3
docker build:使用 Dockerfile 文件创建镜像
使用当前目录的Dockerfile创建镜像
docker build -t w3cscholl/ubuntu:v3 . (不要漏掉最后的.符号)
使用URLgithub.com/creack/docker-firefox的 Dockerfile 创建镜像
docker build github.com/creack/docker-firefox
docker history :查看指定镜像的创建历史
docker save :将指定镜像保存成 tar 压缩文件
-o:输出到文件
docker save -o my_ubuntu_v3.tar w3cschool/ubuntu:v3
docker import:从压缩文件中创建镜像
-c:应用 docker 指令创建镜像
-m:提交时的说明文字
从镜像归档文件my_ubuntu_v3.tar创建镜像 , 命名为w3cschool/ubuntu:v4
docker import my_buntu_v3.tar w3cschool/ubuntu:v4
【docker 清理无用容器或者镜像 docker删除容器和镜像】关于docker删除容器和docker删除容器和镜像的内容就分享到这儿!更多实用知识经验 , 尽在 www.hubeilong.com