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

转载  2016-10-13   投稿: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的话也最快。

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

总结

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

相关文章

  • 浅谈Windows平台上Docker安装与使用

    浅谈Windows平台上Docker安装与使用

    本篇文章主要介绍了浅谈Windows平台上Docker安装与使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • Docker 如何分配宿主机网段 IP

    Docker 如何分配宿主机网段 IP

    本篇文章主要介绍了Docker 如何分配宿主机网段 IP,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • 详解如何在 Docker 中设置 Go 并部署应用

    详解如何在 Docker 中设置 Go 并部署应用

    在本教程中,我们将学习如何使用 docker 部署 golang web 应用程序。 具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • 局域网内部署 Docker Registry(推荐)

    局域网内部署 Docker Registry(推荐)

    本文将从创建单机的 Docker Registry 开始,逐步完成局域网内可用的 Docker Registry 的创建,并重点解释如何使用 IP 地址访问 Registry 的方法
    2017-05-05
  • 使用Docker搭建Java环境的步骤方法

    使用Docker搭建Java环境的步骤方法

    本篇文章主要介绍了使用Docker搭建Java环境的步骤方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Docker使用Dockerfile来创建镜像

    Docker使用Dockerfile来创建镜像

    本篇文章主要介绍了Docker使用Dockerfile来创建镜像,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Docker如何添加自定义网桥

    Docker如何添加自定义网桥

    本篇文章主要介绍了Docker如何添加自定义网桥,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • docker连接spring boot和mysql容器方法介绍

    docker连接spring boot和mysql容器方法介绍

    这篇文章主要介绍了docker连接spring boot和mysql容器方法介绍,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • docker上安装使用mysql镜像

    docker上安装使用mysql镜像

    本文主要给大家介绍了如何在docker中安装并运行MySQL镜像,属于个人尝试,这里总结下分享给大家,有需要的小伙伴可以参考下
    2017-02-02
  • 详解nodejs之创建最小docker镜像

    详解nodejs之创建最小docker镜像

    这篇文章主要介绍了详解nodejs之创建最小docker镜像,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04

最新评论