浅析Docker镜像分层的注意事项

 更新时间:2016年10月13日 10:53:17   投稿:daisy  
不知道大家在对程序进行Docker镜像打包会不会有些疑惑,比如镜像分层打包最后汇总成程序的镜像问题,所以这篇针对一些问题进行了分析,文章主要介绍了Docker镜像分层的一些注意事项,有需要的朋友们可以参考学习,下面来一起看看吧。

前言

我们平常在对程序进行Docker镜像打包的时候总会有些困惑,到底是将最终的镜像分层打包最后汇总成程序的镜像(也就是一层一层的 From )合适,还是说直接将程序从Source code就打包出最终的镜像更合适呢?其实这里面没有说那个是对或错的,要看程序包自身的情况做选择。

Docker build的注意点

如果接触过Docker,Docker build大家都清楚怎么用了,但是有几个容易忽略的注意点:

     1、Dockerfile开头的 From 和 MAINTAINER 其实都是一层镜像

     2、如果 From 和 MAINTAINER 不同,就算是后面的命令语句相同也不会是相同的镜像。如都是执行 RUN echo "hello world" >> test.txt ,如果 MAINTAINER 不同,则生成的这个语句的镜像层将是不同的。

     3、原理上如果每一层对应的父层不同,那怕执行的命令相同,Docker也会生成一层新的镜像,如下面两个Dockerfile文件

Dockerfile 1:

FROM centos:latest
MAINTAINER duffqiu@gmail.com

RUN echo "test" >> hello.txt
RUN echo "hello" > test.txt

Dockerfile 2:

FROM centos:latest
MAINTAINER duffqiu@gmail.com

RUN echo "hello" > test.txt
RUN echo "test" >> hello.txt

这两个文件的内容只是两个 RUN 语句顺序不一样,但是最后它们生成的image层是不一样的,可以通过 docker history <image name> 来对比

从这里面也看到一个问题,From最好不要用lastest标签,避免不同镜像的顶层是不同,从而无法复用。

实践建议

需要看具体情况,如果有一个包是公用的,且比较大,则最好先将这个包打成Image再给后续的程序打包使用,这样使用时占用的机器磁盘空间最小,启动时如果需要pull的话也最快。

但是如果包本身就是很小,过细的分层也不利于维护和管理,所以最终还是一个艺术问题

总结

以上就是这篇文章的全部内容,希望这篇文章的内容对大家的学习或者工作能有一定的帮助,如果有疑问大家可以留言交流。

相关文章

  • Docker安装FastDFS的方法步骤

    Docker安装FastDFS的方法步骤

    这篇文章主要介绍了Docker安装FastDFS的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • Docker 给运行中的容器设置端口映射的方法

    Docker 给运行中的容器设置端口映射的方法

    这篇文章主要介绍了Docker 给运行中的容器设置端口映射的方法,详细的介绍了端口映射的概念和方法,具体一定的参考价值,有兴趣的可以了解一下
    2017-11-11
  • Docker容器镜像加载及底层基本原理深入解析

    Docker容器镜像加载及底层基本原理深入解析

    这篇文章主要为大家介绍了Docker容器镜像加载及底层基本原理深入分析,让大家能够有更深入的理解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03
  • 用Docker作为PaaS的替代方案是否完美无缺

    用Docker作为PaaS的替代方案是否完美无缺

    Docker的出现似乎又带来了一种新的选择,而且对于开发者来说更加灵活、便捷、易用。既然用户可以直接在Docker上运行,PaaS是否还有应用场景?面对企业繁杂的应用环境,用Docker作为PaaS的替代方案是否完美无缺
    2016-11-11
  • docker容器高效连接Redis的方法步骤

    docker容器高效连接Redis的方法步骤

    在微服务架构中,Redis 是一种常见的高效缓存解决方案,通常用于存储临时数据、会话信息或 token,这篇博客将以实际项目为例,详细介绍如何配置 Flask 应用中的服务容器连接宿主机上的 Redis 服务,需要的朋友可以参考下
    2024-09-09
  • ubuntu docker搭建Hadoop集群环境的方法

    ubuntu docker搭建Hadoop集群环境的方法

    这篇文章主要介绍了ubuntu docker搭建Hadoop集群环境,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Docker安装MySql8并远程访问的实现

    Docker安装MySql8并远程访问的实现

    本文主要介绍了Docker安装MySql8并远程访问的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • CentOS下Docker的安装教程详解

    CentOS下Docker的安装教程详解

    今天小编就为大家分享一篇关于CentOS下Docker的安装教程详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • 查找每个Docker镜像的层和层大小的两种方法

    查找每个Docker镜像的层和层大小的两种方法

    本文主要介绍了查找每个Docker镜像的层和层大小的两种方法,这对于识别可能导致镜像整体大小的大型层,以及确定哪些层可以被删除或优化以减少镜像的大小是非常有用的,感兴趣的可以了解一下
    2023-10-10
  • 解决docker镜像(centos系统)中无sudo命令问题

    解决docker镜像(centos系统)中无sudo命令问题

    这篇文章主要介绍了解决docker镜像(centos系统)中无sudo命令问题,具有很好的参考价值,希望对大家有所帮助,
    2023-11-11

最新评论