代码容器化

栏目: Node.js · 发布时间: 6年前

内容简介:从代码到镜像,再到跑起来的容器,就是代码容器化的过程,主要步骤是构建出对应镜像,所以容器化的基础和实质是镜像,所以也可以认为容器化过程就是从代码到镜像的过程。容器化的过程一般有两个步骤:编译和构建。根据编程语言不同,有的语言需要编译,比如java、golang;有的语言不需要编译,比如python、nodejs,所以可以分成编译性语言容器化步骤和非编译性语言容器化步骤来进行讲解。java代码容器化的一般步骤是:首先编译生成war包,然后,tomcat+war包启动服务。编译的过程依赖远远大于业务运行的依赖的

综述

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

容器化的过程一般有两个步骤:编译和构建。根据编程语言不同,有的语言需要编译,比如 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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

HTML5与CSS3权威指南(上册) (第3版)

HTML5与CSS3权威指南(上册) (第3版)

陆凌牛 / 机械工业出版社 / 2015-9-1 / CNY 89.00

本书是HTML 5与CSS 3领域公认的标杆之作,被读者誉为“系统学习HTML 5与CSS 3的最佳著作”和“Web前端工程师案头必备图书之_”。 前两版累计印刷超过15次,网络书店评论超过8000条,98%以上的评论都是五星级的好评。不仅是HTML 5与CSS 3图书领域当之无愧的领头羊,而且在整个原创计算机图书领域是佼佼者。 第3版首先从技术的角度根据最新的HTML 5和CSS 3......一起来看看 《HTML5与CSS3权威指南(上册) (第3版)》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具