如何使你的镜像更小和更效率

当你启动容器时,更小的镜像可以更快的下载下来和载入内存中.更效率的镜像可以方便你用起来更爽.以下就提供了几个要点来保持你的镜像更小化.

  1. 用一个合适的基础镜像,比如你想使用JDK镜像,你应该使用官方制作的openjdk镜像为基础镜像.而不应该使用ubuntu为基础镜像后,再安装openjdk.

  2. 使用多级构建.举个例子,当你要部署一个javaweb应用时.你首先要使用Maven镜像作为开发环境,但是当你开发完成后,应该重新使用Tomcat镜像作为运行环境.只需要你把它们写在一个Dockerfile中,最后保留下来的就是只包含Tomcat镜像运行环境的javaweb应用.

    这里你要明白Dockerfile文件的特点,它的每条指令会构建一个镜像,比如它有2条指令,它会先以第一条指令构建一个镜像,再在这个镜像的基础上使用第二条指令构建最终镜像,同时会把第一个镜像丢弃掉.我们简化下:假设Maven镜像作为第一条指令,Tomcat镜像作为第二条指令,当第二条指令构建完成后,第一条指令构建的开发环境会被丢弃.所以简单的理解多级构建就是多写几条指令.

  3. 如果你有许多镜像拥有共同的基础特征,你应该先创建一个基础镜像,再在这个基础镜像上构建其他镜像.因为docker只会加载一次基础镜像,并缓存起来.当你使用该基础镜像构建的其他镜像时,docker会利用这个缓存快速加载其他镜像.

    我举个例子,比如你有两个镜像是以一个基础镜像构建的.当第一个镜像被实例化为容器后,你又想实例化第二个镜像为容器.这时候第二个镜像并不会从头开始加载为容器,而是会寻找第一个容器的公共基础部分(已经被缓存起来了),并从这里开始快速构建第二个容器.

  4. 保持你的生产镜像足够精简,但是要包含调试工具.你可以以生产镜像为基础镜像,再在该镜像上面增加调试工具层.(这个不多解释,没调试工具出错了都不知道怎么处理)

  5. 你应该给你的镜像加上合适的标签,比如开发环境的标签,生产环境的标签,测试环境的标签等等,不要过度依赖自动化的latest标签.

哪里和怎样持久化你的数据

  1. 避免把你应用的数据直接写在该容器中.这样会增加你容器的大小从而影响效率,并且容器内读写的I/O没有使用volumes挂载卷快.

  2. 建议在开发环境的时候使用挂载卷,在生产环境的时候使用volumes

    挂载卷就是你docker run -v 本地目录:容器目录,这样可以方便开发.volumes就是你使用DockerfileVOLUME指令创建的公共区域.该区域是独立于容器的,就算容器被销毁,保存在该区域的数据还是存在的.为什么建议生产环境使用volumes其实很容易理解.因为使用-v 本地目录:容器目录会使数据太散乱不好管理(比如备份很麻烦,当然,如果你只有一个独立容器,当我没说).

使用CI/CD测试和部署

说白了就是使用远程仓库对你的镜像进项版本控制,就像git一样.你可以申请Docker Hub,这东西就是docker版的github.

开发环境与生产环境的不同点

开发环境

生产环境

使用挂载卷

使用volumes

使用mac和windows的Docker Desktop开发

使用Docker Engine作为生产环境,可以更好的与宿主机进行隔离

不用担心网络时间同步问题

确保你的所有容器的网络时间同步

THE END
开启精彩搜索

热门搜索

暂无

历史搜索

用户名/邮箱/手机号
密码
用户名
密码
重复密码
邮箱/手机号
验证码
发送验证码
59秒后可重发
注册
找回密码
邮箱/手机号
验证码
发送验证码
59秒后可重发
新密码
重复密码
请选择支付方式
余额支付

购买将消耗【10

微信支付
微信扫码支付 0 元
[ 04分50秒 ]
请使用微信扫一扫
扫描二维码支付
支付宝支付
支付宝扫码支付 0 元
[ 04分50秒 ]
请使用支付宝扫一扫
扫描二维码支付
已完成支付
未完成支付

请输入验证码

点击验证码可以刷新

你确认吗?

确认

2024年10月1日

2024年10月

新增

新增

新增

新增

新增

新增

新增

新增

新增

新增