docker使用问题总结

本文总结了 Docker 的核心概念,包括系统虚拟化与容器虚拟化的差异,并详细介绍了 Dockerfile 的编写技巧,如如何避免缓存问题。还涵盖了 Docker 空间管理,如 Swarm 基本指令,以及遇到的常见错误及其解决方案,如证书过期、网络问题等。此外,还提到了 Docker 配置文件格式错误的解决方法以及 Docker 集群部署时的注意事项。

概念解读

系统虚拟化与容器虚拟化

系统虚拟化,Hypervisor Virtualization,全虚拟化。在 Host 中通过 Hypervisor 层实现安装多个 GuestOS。每个 GuestOS 都有自己的内核,和主机的内核不同,GuestOS 之间完全隔离。
容器虚拟化,Operating System Virtualization ,使用 Linux 内核中的 namespaces 和 cgroups实现进程组之间的隔离。是用内核技术实现的隔离,所以它是一个共享内核的虚拟化技术。

注:容器虚拟化没有 GuestOS,使用 Docker 时下载的镜像,只是为运行 App 提供的一个依赖的环境,是一个删减版本的系统镜像。一般情况下系统虚拟化没有容器虚拟化的运行效率高,但是系统安全性高很多。

知识点总结

Dockerfile编写

  • 将RUN apt-get update和apt-get install组合成一条RUN声明。
    如果将apt-get update放在一条单独的RUN声明中会导致缓存问题以及后续的apt-get install失败。
  • 指令过apt-get install相关指令后,需要清理掉apt缓存。
     rm -rf /var/lib/apt/lists/*

注意:官方的 Debian 和 Ubuntu 镜像会自动运行apt-get clean,所以不需要显示的调用apt-get clean。

  • ADD和COPY的使用
    • 虽然ADD和COPY功能类似,但一般优先使用COPY。因为它比ADD更透明。
    • COPY只支持简单将本地文件拷贝到容器中,而ADD有一些并不明显的功能(比如本地 tar 提取和远程 URL 支持)。因此,ADD的最佳用例是将本地 tar 文件自动提取到镜像中。
    • 如果你的 Dockerfiles 有多个步骤需要使用上下文中不同的文件。单独COPY每个文件,而不是一次性COPY完。这将保证每个步骤的构建缓存只在特定的文件变化时失效。
    • 为了让镜像尽量小,最好不要使用ADD指令从远程 URL 获取包,而是使用curl和wget。这样你可以在文件提取完之后删掉不再需要的文件,可以避免在镜像中额外添加一层。
      注:ADD指令不能和其他指令合并,所以前者ADD指令会单独产生一层镜像。而后者可以将获取、提取、安装、删除合并到同一条RUN指令中,只有一层镜像。

docker空间管理

 ## 查看空间
     docker system df
 ## 查看volume容器
    docker volume ls(查看volume容器id:docker volume ls -qf dangling=true)
 ##  删除所有容器
    docker rm `docker ps -a -q`
 ## 删除所有关闭的容器
    docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm(docker rm $(sudo docker 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值