容器化参考文档
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
2.7 KiB

3 years ago
  1. build-a-docker-image.md
  2. -----------------------
  3. ```
  4. @version 180911:2
  5. @author zhangxuhong <zhangxuhong@xitu.io>
  6. ```
  7. Name
  8. ----
  9. build-a-docker-image - 构建Docker镜像.
  10. Table of Contents
  11. -----------------
  12. * [Name](#name)
  13. * [Image Manifest Management 镜像依赖管理](#image-manifest-management)
  14. * [Minimize Docker Image 缩减 Docker 镜像大小](#minimize-docker-image)
  15. Image Manifest Management 镜像依赖管理
  16. --------------------------------------
  17. ### 构建普通镜像
  18. 目前harbor中的镜像库包含以下几个项目
  19. - lib, 公网上的镜像备份
  20. - infrastructure, 私有基础镜像
  21. - test, 测试用, 随便用, test发版用镜像
  22. - beta, beta发版用镜像
  23. - prod, prod发版用镜像
  24. 比如现在正在构建项目:
  25. - harbor02.juejin.id/prod/demo-api
  26. 该项目依赖:
  27. - harbor02.juejin.id/infrastructure/nginx-1.10.3-centos-with-lua-nginx-module:0.0.3
  28. - harbor02.juejin.id/lib/framework:0.12.3
  29. 那么在引用依赖和发版的时候, 都应该使用latest tag的镜像, 这样可以保证每次新发布的时候, 可以获取最新的更新(需要手动把本地镜像缓存清理一下).
  30. 所以依赖应该是:
  31. - harbor02.juejin.id/infrastructure/nginx-1.10.3-centos-with-lua-nginx-module:latest
  32. - harbor02.juejin.id/lib/framework:latest
  33. 这样当这两个项目有bugfix的时候, 只需要重新构建你的项目, 而不必修改Dockerfile.
  34. 发布的时候, jenkins会自动执行你指定的jenkinsfile来把构建完毕的镜像推送到harbor, 镜像tag通常是git提交的hash值(这是在jenkinsfile自动生成的,不必手动修改).
  35. - harbor02.juejin.id/prod/demo-api:xxxxx 用来让CI程序进行发版
  36. ### 构建基础镜像
  37. 制作基础镜像也是同样的流程, 比如 harbor02.juejin.id/infrastructure/nginx-1.10.3-centos-with-lua-nginx-module 修正了一个bug, 那么版本变为:
  38. - harbor02.juejin.id/infrastructure/nginx-1.10.3-centos-with-lua-nginx-module:0.0.4
  39. 同时应再推送一个
  40. - harbor02.juejin.id/infrastructure/nginx-1.10.3-centos-with-lua-nginx-module:latest
  41. 版本方便其他依赖该镜像的项目用来更新.
  42. Minimize Docker Image 缩减 Docker 镜像大小
  43. ------------------------------------------
  44. 可以参考这篇文档:
  45. - [https://www.sandtable.com/reduce-docker-image-sizes-using-alpine/](https://www.sandtable.com/reduce-docker-image-sizes-using-alpine/)
  46. 基本思路就是用Alpine, 然后把不用的都删掉. 懒得删就用多端构建, 只把需要的bin和so拷贝过去.
  47. 有个实用的工具 dlayer, 可以分析每一行dockerfile命令带来的镜像膨胀.
  48. - [https://github.com/orisano/dlayer](https://github.com/orisano/dlayer)
  49. 已经在docker-client01v.lobj.juejin.id部署, 可以直接使用.