代码容器化

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

内容简介:从代码到镜像,再到跑起来的容器,就是代码容器化的过程,主要步骤是构建出对应镜像,所以容器化的基础和实质是镜像,所以也可以认为容器化过程就是从代码到镜像的过程。容器化的过程一般有两个步骤:编译和构建。根据编程语言不同,有的语言需要编译,比如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


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

查看所有标签

猜你喜欢:

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

通灵芯片

通灵芯片

Daniel Hillis / 崔良沂 / 上海世纪出版集团 / 2009-1 / 19.80元

本书深入浅出地阐述了计算机科学中许多基本而重要的概念,包括布尔逻辑、有限自动机、编程语言、图灵机的普遍性、信息论、算法、并行计算、量子计算、神经网络、机器学习乃至自组织系统。 作者高屋建瓴式的概括,既不失深度,又妙趣横生,相信读者读后会有很多启发。 目录: 序言:石的奇迹 第一章 通用件 第二章 万能积木 第三章 程序设计 第四章 图灵机的普适性 第......一起来看看 《通灵芯片》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具