美文网首页
代码容器化

代码容器化

作者: 多余的午宴 | 来源:发表于2019-03-04 09:13 被阅读0次

综述

从代码到镜像,再到跑起来的容器,就是代码容器化的过程,主要步骤是构建出对应镜像,所以容器化的基础和实质是镜像,所以也可以认为容器化过程就是从代码到镜像的过程。

容器化的过程一般有两个步骤:编译和构建。根据编程语言不同,有的语言需要编译,比如java、golang;有的语言不需要编译,比如python、nodejs,所以可以分成编译性语言容器化步骤和非编译性语言容器化步骤来进行讲解。

编译性语言代码容器化步骤(以java为例)

java代码容器化的一般步骤是:首先编译生成war包,然后,tomcat+war包启动服务。编译的过程依赖远远大于业务运行的依赖的,为求镜像的最小化,一般将编译和加载war包并运行起来分开。

总结来看,从java代码到镜像两个步骤为:编译生成war包;将war包打入到tomcat的基础镜像里:

简单模拟上述两个步骤(https://github.com/nichochen/mybank-demo-maven):

  1. 编译生成war包。

    1. Git clone 代码到本地: git clone https://github.com/nichochen/mybank-demo-maven

    2. 构建mvn镜像: 镜像名mvn

    3. 使用mvn镜像在本地生成war包:docker run -v $PWD/mybank-demo-maven:/opt/mybank-demo-maven mvn bash -c 'cd /opt/mybank-demo-maven && mvn package'

    4. mvn结果:

      >> ls mybank-demo-maven/target/
      ROOT ROOT.war classes maven-archiver maven-status surefire-reports test-classes
      

      target目录下的ROOT.war包就是我们想要得到的war包。

  2. 将war包打到装有tomcat的基础镜像中,使用dockerfile构建自己的应用镜像。这里,我们使用官方的tomcat镜像(tomcat:7.0.70-jre7-alpine)

    1. 编写Dockerfile:

      FROM tomcat:7.0.70-jre7-alpine #装有tomcat的基础镜像
      ADD ./mybank-demo-maven/target/ROOT.war /usr/local/tomcat/webapps/mybank.war #将war包加载到镜像中
      
    2. 构建镜像:docker build --rm -t bank .

    3. 运行镜像,验证可用性:运行命令:docker run -d -p 8089:8080 bank,通过浏览器访问网址http://localhost:8089/mybank/ ,可以正常访问。

非编译性语言代码容器化步骤(以nodejs为例)

非编译性语言不需要编译来生成可执行文件或者war包,所以,相较于编译性语言,只有一个步骤,就是构建镜像。

模拟构建步骤,以https://github.com/luoxueping/nodejs_test.git 为例:

  1. 编写dockerfile:

    FROM nodejs # nodejs的基础镜像
    ADD ./nodejs_test /opt/nodejs_test # 加载nodejs的代码
    RUN cd /opt/nodejs_test && npm install # 安装nodejs项目的依赖(python中对应应该是pip install -r requirement)
    ENTRYPOINT cd /opt/nodejs_test && node app.js # 容器启动项
    
  2. 构建镜像nodetestdocker build --rm -t nodetest .

  3. 运行镜像,验证可用性:

    >> docker run -d -p 8888:8888 nodetest
    >> curl http://localhost:8888
    

dockerfile的几个注意事项

  1. ADD 和 COPY区别:add会解压缩。
  2. CMD和ENTRYPOINT:cmd会被run后替换掉,entrypoint是容器必然执行的,另外shell格式的entrypoint会覆盖掉cmd/run。
  3. 命令的两种格式:exec格式和shell格式。

reference

初识node.js(通过npm下载项目依赖的包的过程)

https://github.com/luoxueping/nodejs_test

相关文章

  • 代码容器化

    综述 从代码到镜像,再到跑起来的容器,就是代码容器化的过程,主要步骤是构建出对应镜像,所以容器化的基础和实质是镜像...

  • Spring容器初始化之配置信息解析

    Spring 容器初始化 初始化代码 ClassPathXmlApplicationContext代码结构图Spr...

  • Spring - IOC容器初始化

    最近阅读了一些Spring Framework里IOC容器的初始化相关的代码。 IOC容器的初始化,将对象交给容器...

  • AnnotationConfigApplicationConte

    测试代码: 容器初始化 AnnotationConfigApplicationContext继承GenericAp...

  • git + jekins + docker持续集成

    使用Git代码仓库管理,jenkins 进行自动化构建、部署(dev)、docker容器化技术实现项目运行,实现项...

  • Helper containers 辅助容器

    git 代码同步容器 代码目录挂载不同的容器中,生产者容器负责git pull 代码,生产者容器负责消费代码

  • spring自动创建所有bean(non-lazy-init)

    以下代码就是spring容器的核心初始化流程,包括ApplicationContext的实现都是使用的这样的代码实...

  • dockerfile-maven-plugin实战

    简介 越来越多的项目开始了docker容器化部署的进化,在容器化之前我们部署一个项目,可能由源代码产出一个jar或...

  • 快速构建docker镜像:maven插件

    越来越多的项目开始了docker容器化部署的进化,在容器化之前我们部署一个项目,可能由源代码产出一个jar或者wa...

  • Docker学习(8) 应用的容器化

    Docker学习(8) 应用的容器化 容器化:将应用整合到容器中并且运行起来的过程。 应用的容器化——简介 容器可...

网友评论

      本文标题:代码容器化

      本文链接:https://www.haomeiwen.com/subject/pgqbuqtx.html