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

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

  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秒后可重发
新密码
重复密码
请选择支付方式
余额支付

购买将消耗【10

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

请输入验证码

点击验证码可以刷新

你确认吗?

确认

2024年10月1日

新增

新增