如何优化镜像构建.docx
- 文档编号:8029635
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:10
- 大小:792.77KB
如何优化镜像构建.docx
《如何优化镜像构建.docx》由会员分享,可在线阅读,更多相关《如何优化镜像构建.docx(10页珍藏版)》请在冰豆网上搜索。
如何优化镜像构建
如何优化镜像构建
提纲
一、docker镜像最佳实践(包含海量示例)
二、尽量不要使用动态类型语言
三、实例分析:
shadowsocks镜像制作优化实践
四、镜像自动化构建
一、docker镜像最佳实践
1.一个容器中只放一个服务
2.容器运行时的持久数据要volume出来
3.编译和运行环境分离
4.少用ENTRYPOINT,多用CMD
5.日志打印到console,不要打印在文件里
6.服务不要以daemon方式启动
7.执行dockerbuild时,build目录越干净越好
1.一个容器中只放一个服务
2.持久数据要volume出来
Bad容器重启以后,所有/var/lib/mysql下的数据,都会丢失。
Good数据存在宿主机的目录(/my/own/datadir)下,重启容器不会丢失。
(来源:
VeryGood数据存在分布式的网络磁盘上,有三个备份。
宿主机挂掉,数据也不会丢。
来源:
3.编译和运行环境分离(针对静态语言)
BadPractice:
1.依赖于编译环境,体积超级大,2.编译环境依赖,在运行时大都用不到
GoodPractice:
1.binary不依赖编译环境,2.Go语言编译时是静态链接,多数服务不依赖于容器中的操作系统。
来源:
4.少用ENTRYPOINT,多用CMD
•ENTRYPOINT不能被override
•CMD可以被override
•dockerrun–itxxx/bin/sh
5.日志打印到console,而非文件
•微服务
6.服务不要以daemon方式启动
dockerrun–namenginx-v/some/nginx.conf:
/etc/nginx/nginx.conf:
ro-dnginx
7.dockerbuild时,build目录越干净越好
•加快build速度
来源:
使用.dockerignore,语法与.gitignore一致
二、尽量不要使用动态类型语言
•依赖于操作系统,体积大
•代码安全性(如果不开源)
推荐的baseimage:
三、实例分析
Shadowsocks-server镜像为例(Version1)
本地大小:
355M
问题:
1.apt-getinstall后没有删除缓存
2.依赖python、依赖操作系统
Shadowsocks-server镜像为例(Version2)
本地大小:
4.8M
优化:
1.go语言版的ssserver,编译binary
2.使用scratch作为baseimage
问题:
1.baseimage没有shell,不方便调试
2.不能直接跑起来
来源:
Shadowsocks-server镜像为例(Version3)
本地大小:
5.9M
优化:
1.增加run.sh,标准化启动方式
2.busybox包含shell,便于调试,并支持时速云webshell
3.通过环境变量传参,而非CMD,便于设置默认参数
4.写死暴露端口,便于在云平台上部署
四、自动化构建
•半自动(集成代码编译和镜像构建)
1.Makefile
2.npm/gulp
3.puppet等工具
•全自动(只有镜像构建)
1.dockerhub
2.时速云()
DockerHub设置webhook进行自动化构建
时速云平台
设置webhook进行自动化构建
来源:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 如何 优化 构建
![提示](https://static.bdocx.com/images/bang_tan.gif)