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


    dockerfile生成镜像并挂载数据卷

    编写dockerfile文件

    1. 创建dockerfile01 文件
    # 基础镜像
    FROM centos
    
    VOLUME ["volume01", "volume02"]
    
    CMD echo "-----end----"
    
    
    1. docker build 构建镜像
    docker build -f ./dockerfile01 -t xiao-centos .
    

    1. 启动镜像
    docker run -it 镜像ID /bin/bash
    

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

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

    清理docker使用空间

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

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

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

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

    • 删除未使用的数据卷
    docker volume prune
    
    • 删除没有使用过的网络
    docker network prune
    
    • 删除所有未使用过的资源
    docker system prune
    

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

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

    错误信息

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

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

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

    docker: Error response from daemon: open /var/lib/docker/volumes/juming-nginx/_data: no such file or directory.
    

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

    1. 删除所有容器

    2. 删除所有镜像

    3. 重新运行一个新的容器并挂载数据卷

    # 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. 再次运行容器

    # 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已显示出来了

    docker volume ls
    DRIVER    VOLUME NAME
    local     a9b39215509378332ec9dfcdc3e10857b500694ea66efd9c2b7a6a9c55a2f10a
    local     juming-nginx
    

    我是 甜点cc

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

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

  • 相关阅读:
    Js逆向教程-06js逆向断点的种类及介绍
    【C++多线程那些事儿】多线程的执行顺序如你预期吗?
    js语法(es6)
    Fooocus框架代码分析
    Java基础(一)——Hello World,8种数据类型,键盘录入
    java-php-python-ssm学生在线评教系统计算机毕业设计
    关于 Angular 里 module 和 Component 包含粒度的一个讨论
    程序员如何过中秋 | 如何画月饼
    网工知识角|什么是防火墙你知道吗?一篇直接搞懂
    C语言自定义类型详解 —— 结构体、枚举、联合体
  • 原文地址:https://www.cnblogs.com/all-smile/p/16789104.html