前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Docker | 使用dockerfile生成镜像,清理docker空间

Docker | 使用dockerfile生成镜像,清理docker空间

作者头像
甜点cc
发布2022-10-24 16:09:23
发布2022-10-24 16:09:23
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

dockerfile生成镜像并挂载数据卷

编写dockerfile文件

  1. 创建dockerfile01 文件
代码语言:javascript
代码运行次数:0
运行
复制
# 基础镜像
FROM centos

VOLUME ["volume01", "volume02"]

CMD echo "-----end----"
  1. docker build 构建镜像
代码语言:javascript
代码运行次数:0
运行
复制
docker build -f ./dockerfile01 -t xiao-centos .
  1. 启动镜像
代码语言:javascript
代码运行次数:0
运行
复制
docker run -it 镜像ID /bin/bash

可以看到生成镜像时自动挂载的,数据卷目录

以上dockerfile方式属于匿名挂载数据卷

清理docker使用空间

我个人使用的是单核2G的云服务器,用了快三年了,内存、cpu严重吃紧,所以就尝试了清理docker使用空间,主要是删除未使用过的镜像、容器、数据卷、网络命令,具体如下:

官方文档链接 https://docs.docker.com/config/pruning/

  • 执行如下可以查看 Docker 的磁盘使用情况(类似于 Linux 上的 df 命令)
代码语言:javascript
代码运行次数:0
运行
复制
docker system df
  • 删除所有未使用过的镜像
代码语言:javascript
代码运行次数:0
运行
复制
docker image prune -a
  • 删除所有停止的容器
代码语言:javascript
代码运行次数:0
运行
复制
docker container prune
docker rm -f $(docker ps -aq)
  • 仅删除超过 24 小时的停止容器
代码语言:javascript
代码运行次数:0
运行
复制
docker container prune --filter "until=24h"

数据卷永远不会自动删除,因为这样做可能会破坏数据

  • 删除未使用的数据卷
代码语言:javascript
代码运行次数:0
运行
复制
docker volume prune
  • 删除没有使用过的网络
代码语言:javascript
代码运行次数:0
运行
复制
docker network prune
  • 删除所有未使用过的资源
代码语言:javascript
代码运行次数:0
运行
复制
docker system prune

手动删除/var/lib/docker/volumes的问题解决

当时清理docker使用空间的时候,清过头了,一下子把挂载的数据卷也给顺手清理了🤣,真是自己给自己找事做。

错误信息

手动删除了挂载到宿主机上的所有数据卷,在启动容器挂载数据卷的时候就会报错

如下,重新运行容器,原先具名挂载数据卷juming-nginx,报错信息如下👇

docker run -d -P --name nginx01 -v juming-nginx:/etc/nginx nginx

代码语言:javascript
代码运行次数:0
运行
复制
docker: Error response from daemon: open /var/lib/docker/volumes/juming-nginx/_data: no such file or directory.

尝试方法一(不建议使用):

  1. 删除所有容器
  2. 删除所有镜像
  3. 重新运行一个新的容器并挂载数据卷
代码语言:javascript
代码运行次数:0
运行
复制
# 1
docker rm -f $(docker ps -aq)

# 2
docker rmi -f $(docker images -aq)

# 3.
docker run -d -P --name nginx01 -v juming-nginx:/etc/nginx nginx

# 还是报错

结论:

无法解决问题,且删除所有容器、镜像存在的风险较大,不建议使用!

尝试方法二(推荐使用):

  1. 停止docker服务
  2. 重新启动docker服务
  3. 再次运行容器
代码语言:javascript
代码运行次数:0
运行
复制
# 1
systemctl stop docker

# 2
systemctl restart docker

# 3
docker run -d -P --name nginx01 -v juming-nginx:/etc/nginx nginx

# 没有报错,docker ps查看 成功运行

结论

没有报错,docker ps查看,成功运行

docker volume ls 查看镜像,可以看到具名数据卷juming-nginx已显示出来了

代码语言:javascript
代码运行次数:0
运行
复制
docker volume ls
DRIVER    VOLUME NAME
local     a9b39215509378332ec9dfcdc3e10857b500694ea66efd9c2b7a6a9c55a2f10a
local     juming-nginx

我是 甜点cc

热爱前端,也喜欢专研各种跟本职工作关系不大的技术,技术、产品兴趣广泛且浓厚,等待着一个创业机会。本号主要致力于分享个人经验总结,希望可以给一小部分人一些微小帮助。

希望能和大家一起努力营造一个良好的学习氛围,为了个人和家庭、为了我国的互联网物联网技术、数字化转型、数字经济发展做一点点贡献。数风流人物还看中国、看今朝、看你我。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 用dockerfile生成镜像并挂载数据卷
    • 编写dockerfile文件
  • 清理docker使用空间
  • 手动删除/var/lib/docker/volumes的问题解决
    • 错误信息
    • 尝试方法一(不建议使用):
    • 尝试方法二(推荐使用):
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档