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 指令的末尾删除缓存。如果你在下一条指令中删除缓存,不会减小镜像的体积

尽量使用官方镜像  ;基础镜像尽量不要使用 latest 标签

使用多阶段构建来删除构建时的依赖项

多阶段构建可以由多个 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 资源的绝对数量,而是一个相对的权重值

 

posted on 2018-04-02 15:59  我和你并没有不同  阅读(176)  评论(0编辑  收藏  举报