准备:

需要5个文件

新建一个docker文件夹

1 .ignore git忽略文件用的

2 pakage.json 安装NODE程序的 也可以直接拷贝进 docker文件加

3 node环境 linux版本

4 node程序

5 dockerfile配置文件

package可以有也可以没有

此处分为两种:

一种是node程序在git上

一种是直接拷贝到docker程序中

为了简便我用的是第二种

dockerfile配置如下:

FROM centos:latest

ENV NPM_CONFIG_LOGLEVEL info

# NODE版本
ENV NODE_VERSION 4.5.
# XCLOUD版本
ENV XCLOUD_VERSION 1.0. # linux node at https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.x
# e.g, curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz"
#此处将node环境拷贝进docker 在linux中需要编译安装,在docker中只需将其考进去便可以,考到root/app中 这个文件对外看不到
COPY ./node-v4.5.0-linux-x64.tar.xz /
COPY ./node_modules/am-privatecloud /root/app RUN tar -xJf "node-v$NODE_VERSION-linux-x64.tar.xz" -C /usr/local --strip-components= \
&& rm "node-v$NODE_VERSION-linux-x64.tar.xz" \
#此处不明白为什么多了一个连接????
&& ln -s /usr/local/bin/node /usr/local/bin/nodejs # 进入工作目录
WORKDIR /root/app # 安装项目依赖
RUN npm install # 启动项目
ENTRYPOINT ["node"]
CMD ["-v"] # 开放30000端口
EXPOSE

在虚拟机上按照型号安装好docker ;

1、将上面的docker文件拷贝到虚拟机上,进入目录运行

docker build -t yunshipei/private-xcloud:1.0.0 .

参数含义
-t yunshipei/private-xcloud:1.0.0 镜像名字为yunshipei/private-xcloud,tag为1.0.0
. 代表当前目录,即Dockerfile所在目录

生成docker镜像 即images

2、 测试镜像docker run --rm yunshipei/private-xcloud:1.0.0,如果输出v4.5.0说明容器没有问题。

参数含义
--rm 容器停止后删除容器
yunshipei/private-xcloud:1.0.0 镜像名:tag
这里没有指定启动命令,这时自动命令是Dockerfile中配置的ENTRYPOINT + CMD即node -v。如果指定了命令,指定的命令就会替换掉CMD的默认命令。

3、 启动容器

docker run -d --name xcloud -e "NODE_ENV=production" -v /root/xcloud:/root/app/static --restart=always -p : yunshipei/private-xcloud:1.0. /root/app/bin/www

此处注意 末尾 /root/app/bin/www 启动文件

参数含义: -d 以后台进程方式启动
--name xcloud容器名字为xcloud
-e "NODE_ENV=production" 设置环境变量NODE_ENV=production
-v /root/xcloud:/root/app/static 本地/root/xcloud(任意指定)目录映射到容器内的/root/app/static(不能变)目录(用户存放拉取下来的allmobilize.min.js)
--restart=always 如果进程异常退出总是自动重启
-p 30000:30000 将主机的30000端口映射到容器内的30000端口
yunshipei/private-xcloud:1.0.0 镜像名:tag
/root/app/server.js 启动命令(实际全部的启动命令为 node /root/app/server.js,因为在Dockerfile中已经设置了ENTRYPOINT为node)

4、 查看容器状态docker ps -a,找到Name是xcloud查看器状态。如果STATUS是UP说明容器正常启动了。

参数含义
ps -a 查看所有容器 查看名字是xloud的容器

如果配置完成,外网不能访问。那么检查一下本地系统的转发支持

sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

如果是0表示没有开启,则需要手动打开

sysctl -w net.ipv4.ip_forward=1    

以上设置在重启后就不生效了,想要永久生效需要在/etc/sysctl.conf找到net.ipv4.ip_forward部分设置为1(如果没有,在最后追加一项)

net.ipv4.ip_forward = 1

然后运行sysctl -p

镜像的导入导出

在机器上第一次编译镜像时间比较慢(首次编译如果本地没有镜像缓存,还要去中央仓库拉取依赖的镜像),另外新机器也可能没有权限去拉取Git上面的项目。在这种情况下在本地把镜像编译后,导出来,分发给客户镜像压缩包。客户那边直接装载这个导出的镜像即可。

镜像导出

docker save yunshipei/private-xcloud:1.0.0 | gzip -c > xcloud-100.tar.gz   

参数含义:
导出命令为docker save
yunshipei/private-xcloud:1.0.0 镜像名:tag
| gzip -c > xcloud-100.tar.gz 输出重定向到gzip执行压缩,然后输出到 xcloud-100.tar.gz文件中

镜像导入

gunzip -c xcloud-100.tar.gz | docker load                      

参数含义:
docker load 为导入镜像命令
gunzip -c xcloud-100.tar.gz解压镜像压缩包输出到标准输出
| docker load 重定向标准输出到docker load

docker制作node程序镜像:的更多相关文章

  1. docker制作自己的镜像并上传dockerhub

    1.首先注册自己的dockerhub账号,注册地址:https://hub.docker.com 2.在linux服务器登录自己的账号:docker login --username=qiaoyeye ...

  2. centos7使用docker制作tomcat本地镜像

    1.安装Docker 安装docker前请确认当前linux的内核版必须是3.10及以上 命令: uname  -r 1).yum install -y yum-utils device-mapper ...

  3. 使用 Docker 部署 Node 应用 - 镜像文件尺寸的优化

    前面 使用 Docker 部署 Node 应用 一文中完成了镜像的创建和运行,不过生成的镜像还有些粗糙,需要进一步优化. 镜像的优化 通过 docker images 看到简单的一个 node 服务端 ...

  4. docker制作jdk+tomcat镜像

    docker部署TOMCAT项目 一.内核升级 [root@test01 ~]# uname -r   #内核查看确认 2.6.32-696.16.1.el6.x86_64 [root@test01 ...

  5. Docker 制作自己的镜像

    1. 下载tomcat镜像 docker pull hub.c.163.com/library/tomcat:latest 2. 创建Dockfile vi Dockerfile from hub.c ...

  6. docker学习7-Dockerfile制作自己的镜像文件

    前言 如果你是一个python自动化测试人员,某天你在公司终于完成了一个项目的接口自动化脚本工作,在你自己常用的本机或者服务器上调试完成了脚本,稳稳地没问题. 可是晚上下班回家,你自己找了个linux ...

  7. 【ASP.NET Core分布式项目实战】(五)Docker制作dotnet core控制台程序镜像

    Docker制作dotnet core控制台程序镜像 基于dotnet SDK 新建控制台程序 mkdir /home/console cd /home/console dotnet new cons ...

  8. Docker Java程序镜像制作

    Docker Java程序镜像制作 制作前的准备 jre:不需要完整的jdk,jre即可,到Oracle进行下载即可,下载链接,根据自己的情况进行选择,这里选择jre-8u221-linux-x64. ...

  9. 制作nodejs项目镜像,实现docker下的快速部署

    前言 前面的文章<centos7+ docker1.12 实践部署docker及配置direct_lvm>中,已经实践了如何在centos7下安装,配置docker, 所以接下来就打算去制 ...

随机推荐

  1. mh

    http://video.sina.com.cn/vlist/news/zt/mlxyhkhbsl/#131455718 http://www.cnblogs.com/xinye/archive/20 ...

  2. 【LeetCode练习题】Candy

    分糖果 There are N children standing in a line. Each child is assigned a rating value. You are giving c ...

  3. linux shell命令行下操作mysql 删除mysql指定数据库下的所有表--亲测成功百分百测试通过--绝对可靠

    1,在shell提示符下查看mysql指定数据库下的表等数据

  4. Js特效总结

    1.//#hidediv2为一个需要隐藏的div  这个功能实现当点击hidediv2以外的其他任何位置时,隐藏该div $(document).click(function() {          ...

  5. 触碰jQuery:AJAX异步详解(转)

    AJAX 全称 Asynchronous JavaScript and XML(异步的 JavaScript 和 XML).它并非一种新的技术,而是以下几种原有技术的结合体. 1)   使用CSS和X ...

  6. C# 获取本机IP地址以及转换字符串

    /// <summary> /// IP地址转化 /// </summary> /// <param name="ipaddr">整型的IP地址 ...

  7. 20160126--springaop

    package com.hanqi; public interface IJiSuanQi { public int jia(int a , int b); public int jian(int a ...

  8. 13个mysql数据库的实用SQL小技巧

    此文章为转载 使用CASE来重新定义数值类型 SELECT id,title, (CASE date WHEN '0000-00-00' THEN '' ELSE date END) AS date ...

  9. HDU 1033 - Edge

    题目很水 然翻译感人 顺时针或者逆时针走,输出坐标 #include <iostream> using namespace std; ]; int p; ]={,,,-,}; ]={,,- ...

  10. Eclipse开启Mybatis-config.xml配置文件智能提示

    使用Java开发的程序员一般在学习的时候,可能都会涉及到使用配置文件,在使用Eclipse类似IDE进行编辑配置配置文件的时候,如果配置文件不能自动联想,是一件比较恼人的事情.笔者这里拿mybatis ...