3 微服务容器化实践
Docker解决了服务运行环境迁移问题,因为在使用Docker镜像时并非把业务代码、依赖的软件环境以及os直接打包镜像,而是利用Docker镜像的分层机制,在每层编写Dockerfile逐层打包镜像。
因为虽然不同微服务依赖的软件环境不同,但还是存在相同,因此打包Docker镜像时,可以分层设计、逐层复用,减少每层镜像文件大小。
4 业务案例
看看生产环境如何使用Docker镜像。某Docker镜像分为四层。
- 基础环境层
定义操作系统运行的版本、时区、语言、yum源、TERM等 - 运行时环境层
定义了业务代码的运行时环境,比如Java代码的运行时环境JDK的版本。 - Web容器层
定义了业务代码运行的容器的配置,比如Tomcat容器的JVM参数
- 业务代码层
定义了实际的业务代码的版本,比如是V4业务还是blossom业务。
如此每层镜像都基于上层添加新内容,比如V4业务的Dockerfile
FROM registry.intra.xxx.com/xxx_rd_content/tomcat_feed:jdk8.0.40_tomcat7.0.81_g1_dns ADD confs /data1/confs/ ADD node_pool /data1/node_pool/ ADD authconfs /data1/authconfs/ ADD authkey.properties /data1/ ADD watchman.properties /data1/ ADD 200.sh /data1/xxx/bin/200.sh ADD 503.sh /data1/xxx/bin/503.sh ADD catalina.sh /data1/xxx/bin/catalina.sh ADD server.xml /data1/xxx/conf/server.xml ADD logging.properties /data1/xxx/conf/logging.properties ADD ROOT /data1/xxx/webapps/ROOT/ RUN chmod +x /data1/xxx/bin/200.sh /data1/xxx/bin/503.sh /data1/xxx/bin/catalina.sh WORKDIR /data1/xxx/bin
FROM代表上层镜像文件为tomcat_feed:jdk8.0.40_tomcat7.0.81_g1_dns”,可见该层包含了Java运行时环境JDK和Web容器Tomcat及Tomcat版本和JVM参数等
ADD,即要在该层镜像添加的文件,主要包含业务的代码和配置
RUN,该层镜像启动时需要执行的命令
WORKDIR,该层镜像启动后的工作目录。如此便可通过Dockerfile基于上层镜像完成该层镜像制作
5 总结
正是因为Docker可做到一处通过、到处运行,对业务价值极大,解决了以前应用程序在开发环境、测试环境及生产环境间移植难,提高了运维自动化水平,也为DevOps理念的流行和业务上云提供了基础。
当然Docker也会带来新问题,如旧的针对物理机的运维模式就无法适应了,需要一种新的针对容器的运维模式。