• 参考我之前的文章运维 GitLab, Docker, Ruby on Rails CI/CD 实践,采用编译环境和生产环境分离,可以极大的减少镜像大小。我的生产镜像,基于Ubuntu 18.04,包括ruby 2.5,passenger, nginx, nodejs,imagemagick,mysql驱动,postgresql驱动,才431MB。而编译环境镜像大概要接近600MB,主要是编译工具占了很大的空间。用dive工具看了一下,估计可以进一步缩减到400MB一下。

  • 上次看的时候还不支持阿里云接口,更新真快。牛x

  • 从上帝视角看微服务 at 2018年12月24日

    为什么会有ServiceMesh呢? 就是因为微服务落地门槛太高,太过复杂。

    服务注册/发现、限流、熔断、负载均衡、灰度发布... 对一个中小企业来说,自己搭建维护这一套东西成本太高了。

    ServiceMesh将上述功能抽离出来,作为通用的基础设施统一提供(终于可以不用依赖SpringCloud了)。 这和就像Rails的理念非常像,基础服务都已经提供了,只需要专注业务实现。 厂商也可以遵循统一的接口规范,提供企业级服务,帮助中小企业快速落地微服务。

    ServiceMesh如果没有了Service,还Mesh啥?

  • 从上帝视角看微服务 at 2018年12月23日

    ServiceMesh的主要目的就是降低微服务的门槛,提供一系列开箱即用的微服务基础架构。

  • 从上帝视角看微服务 at 2018年12月14日

    ServiceMesh顺便了解一下

  • 把要部署的都打成镜像,然后想怎么部署就怎么部署了。 入门可以试试用rancher 2 + k8s + helm,微服务的话再加上istio。 有钱的话还可以购买rancher 2的企业服务支持。

  • Ruby China 7 岁生日快乐 at 2018年10月29日

    🍻

  • 不会的,编译环境和运行环境几乎一样,只是运行环境少了编译工具,因此运行环境打出的镜像会小很多(大概小300M)。我们的项目里有很多gem都依赖c扩张,都可以无障碍运行。

  • 谢谢指正! 刚做了一下测试,对compile和build部分做了2处修订:

    • 编译时将.bundle目录加入缓存(这是bundle的配置文件目录);
    • 构建镜像时去掉bundle install(没有必要了);

    也许可以先将vendor/bundle先ADD进去,利用Docker build cache缩短时间。

  • 因为Docker自带Fluented驱动,我们用EFK(ElasticSearch + Fluented + Kibana)组合。先将日志文件重定向到标准输出,然后运行容器时指定log-driver为fluented即可。