docker提升效率方法----- 持续更新

dockerfile角度

dockerfile的架构、编写都将影响docker 的性能。

docker语句注意点:

  • 1、利用构建缓存:镜像构建是从dockerfile第一句开始执行,并一步一步往下的,故docker镜像升级导致会改动的语句镜像写在下面。因为一旦有一层没命中,往下的每条语句都不会利用缓存。
  • 2、合并镜像:执行docker build语句时,增加–squash,创建一个合并的镜像。为合并前,一个打包的镜像由很多镜像层构建,使用该参数后只存在一层整体镜像层
  • 3、构建时利用apt包管理器,在执行apt-get install时命令应增加 no-install-recommends参数,这样可以保证APT仅安装核心依赖,减少不必要的包下载。
  • 4、每执行一次RUN命令就会增加一层镜像层,习惯使用&&连接多个命令以及()换行的方法是个很好的习惯。

docker多阶段构建:一个运行环境可能存在多个阶段、比如前端变异阶段、jar包编译阶段、执行发布jar包阶段。这样会导致最终的镜像包特别大、事实上最终镜像可以抛弃不必要的编译工具,npm、maven等。想实现这种效果推荐使用建造者模式
在这里插入图片描述

可以观察到该dockerfile存在三个阶段:

  • 阶段0: 称为storefront。npm install 作用:安装模块到node_module中,npm run build 作用:执行package.json中script下的在这里插入图片描述
    输出符合各个模块规范的js文件。
  • 阶段1: 称为appserver,该阶段执行了编译打包动作,生成了jar文件
  • 阶段2: 称为production,该阶段拉取执行jar包的jdk8基础镜像,接着创建一个用户,设置工作路径,然后执行COPY–from指令,他从之前阶段构建的镜像中仅复制生产环境相关的应用代码和文件,最后设置当前应用程序为容器启动时的主程序,CMD用来给ENTRYPOINT追加参数。

构建完成使用dockerbuild命令,如 docker image build -t multi:stage .
那么构建过程如下:

使用docker image ls查看生成的镜像。
在这里插入图片描述
我们可以观察到:storefront、appserver、production都成了分开的镜像,如此操作大大缩小了镜像的size。

docker存储驱动设置角度

每个docker容器都有一个本地存储空间、保存层叠的镜像层 和 容器文件系统。容器的所有读写操作都在镜像层和容器文件系统。

以往本地存储通过存储驱动(Storage Driver)进行管理,为了稳定性,docker还是使用自己支持的存储驱动。Docker 在 Linux底层支持了几种不同驱动的具体实现,他和本地存储一样都采用不同方法实现了栈式镜像层和写时复制。

修改驱动:可以在/etc/docker/deamon.json文件修改存储引擎,并重启docker才生效。格式如下:
在这里插入图片描述
如果修改了正在运行的docker存储引擎类型,重启之后现有的镜像和容器将不可用,因为存的位置是不一样的,通常在/var/lib/docker//…目录下。只有切换到原来引擎才可使用,或者 将镜像上传到镜像仓库,切换引擎后重新下载。选择引擎推荐清单如下(请查阅最新的清单)。
在这里插入图片描述

Device Mapper驱动配置

如果您选用的是Device Mapper驱动,需要设置direct-lvm,因为默认设置的模式为loopbac mounted sparse file ,性能很慢。设置内容如下
在这里插入图片描述
原因 这种设置通过裸块设备(Raw Blow Device)的lvm精简池可获取更好的性能。这种设置的限制:这种方式只能配置在一个块设备。且只能在第一次安装后生效,以后可能会改变。(以后看看linux内核再来思考这块)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值