• 陈志成
    2022-12-12 来自广东
    因为 docker 镜像是分层的,先 COPY requirements.txt 再安装依赖,这样 COPY,install 这两层不包含代码文件,这样整体的镜像大小相对更小。

    作者回复: 👍🏻 非常正确!

    共 4 条评论
    26
  • Daniel
    2022-12-12 来自广东
    首先感谢老师的文章,比较适合我这种 先感受,再理论(先feel it,再know it)的实战派。 问题中的"所有的文件" 可能是一个动态变化的“一堆文件”,因为后期随着项目的不断迭代,里面会引进一些其它的文件,因此这个所谓的“所有文件”可能是一个动态文件, 而 COPY requirements.txt 在今后的镜像构建里是一个静态的单一文件,因为只有'requirements.txt'。 docker 在构建镜像的时候,dockerfile的会每一个命令会构建一个层, 而在构建的时候是有一个缓存的特点,而这个缓存机制如果是遇到发生变化的层,即使后面的层没有发生变化,也会重新构建,进而并不会用到缓存。 所以,把不变的层放在前面,变的层放在后面,就会让变化之前的层利用到构建镜像的缓存机制,来加速构建镜像的时间。 不知道我说的对不,还请老师指点,我之前有遇到过这个问题。

    作者回复: 感谢你对课程的认可,我个人也比较喜欢从实战学习一门技术。 回到你的问题,从缓存的角度上来说是这样的。所以在构建镜像的时候要注意把经常会变化以及不变的区分开,这样可以最大程度利用缓存,加速镜像构建镜像。

    
    12
  • Librant
    2022-12-20 来自广东
    跟着老师一步一个脚印,github.com/librant/git-ops-learn 每章节的详细实践,可以大家一起学习分享,觉得不错的可以帮忙 star一下,我会坚持到课程结束嘞

    作者回复: 太棒了!已 Star。

    共 2 条评论
    5
  • Dexter
    2022-12-13 来自广东
    老师讲一下最新的buildkit和之前docker built之间的异同

    作者回复: 对大的区别是 BuildKit 支持并行构建,标准的 docker build 命令是串行构建的。当然它还有其他很多的特性,比如自动垃圾回收、更高效的缓存(支持从远端仓库读取缓存)、不需要 Root 特权等等。 BuildKit 其实不仅仅可以用来构建镜像,最近比较火 Dagger 项目用 BuildKit 做 CI/CD,非常有意思。

    
    5
  • 栖枝
    2022-12-14 来自广东
    思考题:因为镜像是按照分层构建的,如果每一层的文件没有变化,是不会重复构建的,会使用之前构建好的层,加快构建速度

    作者回复: ✅

    
    4
  • Layne
    2022-12-30 来自广东
    docker在构建对象的时候,是有个分层的概念,可以通过指令 docker inspect 185eac234bc3。可以看到对应的分层RootFS信息。所以在编写构建语句的时候,需要考虑静态和动态信息,这样可以减少存储大小,静态信息对应的分层是不需要重新生成的。

    作者回复: 正确!最大程度利用缓存。

    
    1
  • 范飞扬
    2023-01-24 来自广西
    有个小建议,文中shell命令可以去掉前面的$符号吗,因为按“复制代码”的时候也会把$复制进来。《k8s入门实战》就是我说的这样的

    作者回复: 感谢,很好的建议~

    
    
  • 码小呆
    2022-12-13 来自广东
    因为语句是自上而下执行的,如果都copy文件,那么有些文件的依赖没有安装,那么执行就会保持,镜像就无法构建成功,会失败,所以需要先安装依赖,在copy所有文件

    作者回复: 可以实践一下试试看~

    
    
  • ghostwritten
    2022-12-20 来自北京
    应用: - python flask demo - go gin demo - nodejs - shell........ docker login -u <user> -p <passwd> url docker pull & docker push docker tag <image>:tag <rep>/<image>:new-tag docker build -t flask:v1.0.0 -f Dockerfile . docker run -ti -p 8080:5000 -v /app/data:/app/data -v /app/config:/app/config --name flask-demo hello-world-flask:latest 编写 Dockerfile: https://smoothies.com.cn/docker-docs/Docker/Dockerfile/ 镜像构建工具:[buildah](https://ghostwritten.blog.csdn.net/article/details/128024372) 镜像搬运工具:[skopeo](https://ghostwritten.blog.csdn.net/article/details/127342981) 私有镜像仓库:registry、VMware harbor、 jfrog artifactory、SUSE Portus、Sonatype Nexus 公共镜像仓库:docker.io、quay.io....... 无守护进程容器引擎:[podman](https://blog.csdn.net/xixihahalelehehe/article/details/121611523)
    展开
    
    2