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 资源的绝对数量,而是一个相对的权重值