轻松玩转应用容器化(一)- 初识容器迁移工具Derrick

前言

2017年是容器领域交战非常激烈的一年,容器编排领域逐渐形成一超多强的局面,各种容器解决方案变得越来越成熟,传统的中间件(监控、日志、报警)对容器化场景支持逐渐完善。到了今年,如果一家公司还没有开始对Docker进行关注,真的不好意思说是在互联网的圈子里了。

越来越多的企业开始在生产环境中使用容器技术进行架构,在各种互联网大会上,也有越来越多的嘉宾开始分享他们在使用容器上的心得。但是选择容器技术进行整体的技术架构转型实际上需要极大勇气的,在几年前,容器的解决方案还不完善,第一批吃螃蟹的企业和开发者都头破血流的搭建容器的集群、修改可选项不多的开源工具、适应着整个流程的变更。今天,容器架构的技术债务已经基本还清,k8s、swarm、prometheus、grafana等等一系列容器相关的开源工具都被越来越多的企业与开发者证明他们的稳定,选择容器化已经没有那么痛苦。但是,我们发现依旧有很多大型的企业在进行容器化转型前有所犹豫,那么大家的犹豫的点在什么。

Derrick助力企业容器化转型

很多大型企业对容器的认知是清晰的,容器能够带来的好处是显而易见的,但是同样也会带来一些成本。如果投入和产出的边际效益并不可观,那么会让很多企业没有动力使用容器。总结起来这些根本的因素并不是架构的变更带来的技术成本,而是使用容器后对于现有流程的冲击,而这个冲击并不是指技术的投入,真正的冲击是对人的冲击,是使用容器后对于人的学习成本与习惯成本的冲击。如果使用容器需要让所有的开发者都成为Docker的专家,这样的成本我想大部分的公司都无法接受。容器技术或者容器平台缺乏一个桥梁,可以无缝将提供的服务与开发者的本地代码连接起来,这个才是对于容器化而言的最大痛点。

于是基于这一点,在今年的杭州云栖大会上,阿里云容器团队开源了阿里云容器迁移工具Derrick。Derrick的idea在早在去年3月就开始酝酿,当时mesos、k8s、swarm还在群雄割据,使用容器的开发者的关注点还在到底该选用哪个编排工具以及相应的上下游的解决方案支持。很多时候当一个大型企业下定决心选择了容器编排工具以及上下游方案后发现团队中大部分开发人员连完整的Dockerfile都没有办法完整写出来,更别提如何进行容器化架构改造带来的其他技术成本了。为了解决这个问题,我们为客户编写了大量的Dockerfile,包括Java、Python、C++、NodeJs等常见语言、常见框架的都做了支持。在支持客户的过程中发现大部分的Dockerfile的编写工作是由运维人员或者开发Team中的极少数人编写的,大部分的开发者倾向于对Docker是无感知的,而是通过Jenkins或者自动化流程来进行自动部署。从中我们可以发现三件事情:1.一个公司应用编程框架是可复制的,一个Dockerfile可以在多个团队间共享。2.使用容器的公司或者团队一定会有少数几个人员会成为Docker的专家。3.直接在测试环境容器化验证会导致持续集成的流程变得更长,更难排查问题。

为了解决这个问题我们萌发了构建一个自动化工具的想法,通过自动化工具将一些预定好的Dockerfile挖坑,通过探测或者开发者填写信息,然后转变为Dockerfile。最开始的思路比较简单,只需要一个类似yeoman的工具,可以将不同的语言或者框架定义成模板,然后开发者自己填写参数进而进行预定的Dockerfile以及相关文件的渲染,再通过封装Docker命令屏蔽开发者本地验证的学习成本。按照这个想法做出了雏形之后,我们发现真实的情况是有所出入的,一个从零开始的项目会能够快速的进行容器化流程开发,但是对于大部分企业而言如何迁移一个应用是更常见的场景。因此,就按照这个想法借鉴Buildpack的思维,构建了现在的Derrick,目前支持NodeJs与Java两种语言,通过代码的探测、分析可以在几秒钟内完成一个应用高质量的容器化过程。

Derrick一键实现容器化


Derrick是一个Python语言的本地工具,目前支持NodeJs、Python、Java,开发者可以通过pip在本地进行安装

# 不常使用Python的开发者建议先执行 sudo pip install --ignore-installed six  升级six包
sudo pip install python-derrick

下面我们通过一个简单的NodeJs进行举例

# 下载NodeJs demo项目
git clone git@github.com:ringtail/derrick-nodejs-demo.git 

# 进入项目目录
cd derrick-nodejs-demo 

# 运行Derrick 输入想要构建的镜像与版本例如: nodejs-demo:0.1
derrick init 

# 本地验证容器化结果
derrick up

首次执行derrick init的结果如下


    8888888b.                       d8b        888
    888  "Y88b                      Y8P        888
    888    888                                 888
    888    888 .d88b. 888d888888d888888 .d8888b888  888
    888    888d8P  Y8b888P"  888P"  888d88P"   888 .88P
    888    88888888888888    888    888888     888888K
    888  .d88PY8b.    888    888    888Y88b.   888 "88b
    8888888P"  "Y8888 888    888    888 "Y8888P888  888

    ===================================================
    Derrick is a scaffold tool to migrate applications
    You can use Derrick to migrate your project simply.
    ===================================================

    This is the first time to run Derrick.

    Successfully create DERRICK_HOME in /Users/zhongweilzw/.derrick
    Derrick detect your platform is NodeJs and compile successfully.

此时在项目的根目录下已经生成了Dockerfile、docker-compose.yml等文件了,而这些配置文件则会成为后续整个DevOps流程的基础配置信息,此时执行derrick up的结果如下。

Building web
Step 1/14 : FROM registry.cn-beijing.aliyuncs.com/codepipeline/node:6 AS base
 ---> c0cea7b613ca
Step 2/14 : WORKDIR /app
 ---> Using cache
 ---> c8c07dfd8dc9
Step 3/14 : COPY package.json .
 ---> Using cache
 ---> 055581ce2b5c
Step 4/14 : RUN npm set progress=false && npm config set depth 0
 ---> Using cache
 ---> 623f6b32520b
Step 5/14 : RUN npm install --only=production --registry=https://registry.npm.taobao.org
 ---> Using cache
 ---> f69ea9289d5c
Step 6/14 : RUN cp -R node_modules prod_node_modules
 ---> Using cache
 ---> 53ac8e86e88b
Step 7/14 : RUN npm install --registry=https://registry.npm.taobao.org
 ---> Using cache
 ---> d75ad55f841b
Step 8/14 : FROM base As test
 ---> d75ad55f841b
Step 9/14 : COPY . /app
 ---> Using cache
 ---> 5eb0247a9f71
Step 10/14 : RUN npm test
 ---> Using cache
 ---> 765536e52fc6
Step 11/14 : FROM base AS release
 ---> d75ad55f841b
Step 12/14 : COPY --from=base /app/prod_node_modules /app/node_modules
 ---> c1f1db7c2dc9
Step 13/14 : COPY . /app
 ---> 6c340f7d54ee
Step 14/14 : CMD npm start
 ---> Running in 3bec7ae892b4
 ---> 9ab9c384c029
Removing intermediate container 3bec7ae892b4
Successfully built 9ab9c384c029
Successfully tagged registry.cn-beijing.aliyuncs.com/ringtail/nodejs-demo:latest
WARNING: Image for service web was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating nodejsdemo_web_1 ...
Creating nodejsdemo_web_1 ... done
Your application has been up to running! You can run `docker ps` to get exposed ports.

通过 docker ps,我们可以找到此时映射的端口,通过访问端口,即可在本地验证应用容器化的效果。

(venv)  derrick-nodejs-demo git:(master)  docker ps
CONTAINER ID        IMAGE                                      COMMAND                  CREATED             STATUS              PORTS                     NAMES
c47e02a9fe0d        nodejs-demo:0.1                            "npm start"              3 seconds ago       Up 2 seconds        0.0.0.0:32774->3000/tcp   derricknodejsdemo_web_1

访问浏览器localhost:32774,一个NodeJs的应用已经容器化完毕了。

尾声

Derrick目前暂时只支持NodeJs、Python、Java三种语言,但是Derrick的强大之处在于他的插件体系,开发者可以定义自定义插件的方式来实现自己特定场景的探测。在下一篇文章中会讲解下如何通过自定义插件的方式来实现自定义业务的容器化。

Derrick地址:https://github.com/alibaba/derrick,欢迎大家积极参与,提交代码。

时间: 2024-11-30 03:59:20

轻松玩转应用容器化(一)- 初识容器迁移工具Derrick的相关文章

如何开始容器化

本文讲的是如何开始容器化[编者的话]这是一篇入门级的文章.这篇文章描述了DevOps团队开始使用容器的原因及指导DevOps工程师明确进行应用容器化的战略. [3 天烧脑式容器存储网络训练营 | 深圳站]本次培训以容器存储和网络为主题,包括:Docker Plugin.Docker storage driver.Docker Volume Pulgin.Kubernetes Storage机制.容器网络实现原理和模型.Docker网络实现.网络插件.Calico.Contiv Netplugin

为什么我们必须将OpenStack容器化

本文讲的是为什么我们必须将OpenStack容器化[编者的话]本文主要涉及GoDaddy为何将OpenStack容器化和Kubernetes结合的思路.希望能给大家带来一些借鉴. Go Daddy是一家提供域名注册和互联网主机服务的美国公司,服务产品涉及域名主机领域基础业务:域名注册.虚拟主机.VPS.独立主机,以及域名主机领域的衍生业务:独立IP.SSL证书.网站建设.邮箱.相册.速成网站.加速搜索引擎收录.网站分析等(百度百科). OpenStack现在已经变得不仅可以与基础设施交互,而且更

利用Docker轻松玩转Cassandra

Cassandra 是一个流行的分布式NoSQL数据存储系统.最近有客户问起了Cassandra在如何Docker中运行的一些问题.本文将利用Docker Compose和阿里云容器服务轻松玩转Cassandra. 一键创建Cassandra集群 Docker Hub上已经提供了Cassandra的官方镜像,可以方便地创建单节点Cassandra实例或Cassandra集群.Cassandra采用去中心化的集群架构,没有master节点的概念:但是会有seed节点在新节点连入时通知当前集群. 下

DockOne微信分享(一一七):沪江容器化运维实践

本文讲的是DockOne微信分享(一一七):沪江容器化运维实践[编者的话]沪江目前容器技术主要应用场景:OCS课件业务无状态应用:基于Apache Mesos+Marathon实现沪江容器系统调度管理:Consul + Consul Template + Nginx实现服务自动发现和注册:Prometheus + Grafana + Alertmanager报警实现容器监控报警.本次分享将从以下几方面来讲解: 选择容器技术缘由 容器技术选型 容器存储 容器网络 监控报警 镜像管理 调度管理 服务

暴走漫画基于阿里云的全面容器化架构实践

标题有所修改. 很高兴能和大家分享一些暴走漫画基于公有云的容器化架构的实践经验. 基于之前在暴漫的经验,我到了扇贝以后,大概用了一个月的时间,就将扇贝的产品成功迁移到了容器环境中,并做了很多改进,也有了更多的思考. 暴走漫画(以下简称"暴漫")相信大家都不陌生,它应该算一个互联网应用.先简单介绍一下背景:暴漫主要做App和网站,后端主要是Ruby,也有一些Python.Scala的异构化系统.整体架构是标准的互联网应用架构.包括负载均衡.Nginx.应用服务器.数据库(MySQL),等

DC/OS 1.10:一个面向容器化未来的平台

本文讲的是DC/OS 1.10:一个面向容器化未来的平台[译者的话]本文介绍了Mesosphere平台即将推出的最新版本的特性,创造性地引入了Kubernetes作为容器编排引擎,作为面向容器化的未来的一个平台,值得期待. [烧脑式Kubernetes实战训练营]本次培训理论结合实践,主要包括:Kubernetes架构和资源调度原理.Kubernetes DNS与服务发现.基于Kubernetes和Jenkins的持续部署方案 .Kubernetes网络部署实践.监控.日志.Kubernetes

HPE和Docker合作容器化数据中心 各取所需

Docker凭借自己的容器技术,正在通过与HPE合作进入企业领域. HPE押注Docker,期望成为未来自己数据中心产品的容器 这次战略联盟从这种规模上来说是Docker的第一次,包括销售.工程.支持和针对HPE数据中心客户的知识共享.这次联盟的核心是HPE的Docker就绪服务器项目.HPE项目将与基于Linux的Docker Engine及支持捆绑在一起.这将让客户可以创建容器化的应用,跨所有HPE服务器是可移动的. "为了在理想的经济环境下生存和发展,企业必须变革IT体验,这样业务线和开发

全面容器化——初创公司StorageOS来啦!

StorageOS是一家英国的初创公司,给无状态容器提供简单的自动块存储.状态来运行数据库和其他需要企业级存储功能,但避免随之而来的复杂性.刚性以及成本. 它在Linux系统中作为一个容器运行,为其他容器提供插件使用,使其轻松地对有状态的存储服务进行编程访问. StorageOS是由首席执行官Chris Brandon.首席技术官Alex Chircop.产品管理副总裁Simon Croome以及工程副总裁James Spurin共同创建.这是Brandon的第五家初创公司,其他两家包括Gree

不看不知道,容器化OpenStack的10个好处

1.升级 这个其实大家都可以想到,容器最大的特点,就是升级.企业使用OpenStack,最大的一个顾虑,就是升级.尤其在OpenStack 1年两个版本下,不断的有新的功能的需求的情况下,如果不能升级,其实是很痛苦.尤其在企业的迅速发展的过程中. 容器化的OpenStack,升级有多么简单呢?其实就是删掉容器,换上新的容器,用户基本是无感知的状态下完成. 升级子所以很困难,有一个很现实的原因,线上环境,很难模拟,升级验证测试很难进行.当采用容器化以后,我们很容易模拟出一个线上环境,进行升级测试,