docker学习笔记2
修改容器时间为北京时间
容器内部创建Asia时区文件
echo Asia/Shanghai >/etc/timezone
localtime可以从宿主机拷贝到容器内部(exit退出容器,在宿主机上操作docker cp)
docker cp /usr/share/zoneinfo/Asia/Shanghai 容器id:/etc/localtime
# Update timezone
ENV TIME_ZONE Asia/Shanghai
RUN cp /usr/share/zoneinfo/$TIME_ZONE /etc/localtime && \
echo "${TIME_ZONE}" > /etc/timezone
=====================
1、使用docker history changed-ubuntu命令可以清楚地查看到changed-ubuntu镜像使用了哪些image layers
2、可以使用 docker volume ls 命令查看系统分配的全部卷。若想删除某个不再使用的卷,使用 docker volume rm。
3、docker system prune --volumes 命令。这个命令会删除所有不再使用的映像或卷,以及停止后依然在系统中的容器
=========参考资料:https://www.cnblogs.com/ryanyangcs/p/11160992.html
4 当你向 Dockerfile 中添加文件,或者修改其中的某一行时,那一部分的缓存就会失效,该缓存的后续步骤都会中断,需要重新构建。所以优化缓存的最佳方法是把不需要经常更改的行放到最前面,更改最频繁的行放到最后面。
5、只拷贝需要的文件,防止缓存溢出
6 每一个 RUN
指令都会被看作是可缓存的执行单元。太多的 RUN 指令会增加镜像的层数,增大镜像体积
7 删除包管理工具的缓存
包管理工具会维护自己的缓存,这些缓存会保留在镜像文件中,推荐的处理方法是在每一个 RUN 指令的末尾删除缓存。如果你在下一条指令中删除缓存,不会减小镜像的体积
8 尽量使用官方镜像 ;基础镜像尽量不要使用 latest
标签
9 使用多阶段构建来删除构建时的依赖项
多阶段构建可以由多个 FROM 指令识别,每一个 FROM 语句表示一个新的构建阶段,阶段名称可以用 AS
参数指定。本例中指定第一阶段的名称为 builder
,它可以被第二阶段直接引用
本例是基于 Alpine 的最小 JRE 镜像。上一个构建阶段虽然会有大量的缓存,但不会出现在第二阶段中。为了将构建好的 jar 包添加到最终的镜像中,可以使用 COPY --from=STAGE_NAME
指令,其中 STAGE_NAME 是上一构建阶段的名称。
多阶段构建是删除构建依赖的首选方案。
10 启动进程正常退出或发生 OOM,此时 docker 会根据 --restart 的策略判断是否需要重启容器。但如果容器是因为执行 docker stop 或docker kill 退出,则不会自动重启
如果在启动容器时只指定 -m 而不指定 --memory-swap,那么 --memory-swap 默认为 -m 的两倍,比如:
docker run -it -m 200M ubuntu 容器最多使用 200M 物理内存和 200M swap
与内存限额不同,通过 -c 设置的 cpu share 并不是 CPU 资源的绝对数量,而是一个相对的权重值
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)