linux配置nodejs内网镜像,制作nodejs项目镜像,实现docker下的快速部署

前言

前面的文章《centos7+ docker1.12 实践部署docker及配置direct_lvm》中,已经实践了如何在centos7下安装,配置docker, 所以接下来就打算去制作一个nodejs项目镜像包. 从网上一搜,大部分的Dockerfile内容都是如下这样的:

c580dfb6a68aafb9b5515422f61ed0be.gif

FROM centos:centos7

MAINTAINER yourname@example.com

RUN yum -y update; yum clean all

RUN yum -y install epel-release; yum clean all

RUN yum -y install nodejs npm; yum clean all

# copy 程序代码到容器的/src 下

ADD . /src

RUN cd /src; npm install

EXPOSE 3500

CMD ["node", "/src/index.js"]

1ed2b82caaf84bec5201bf0f70cba57b.gif

这个代码片段笔者并没有实践过,直接使用会不会报错不是很清楚,不过这个不是重点。重点是,网上大部分的做法都是基于centos/ubuntu 系统镜像包,再安装nodejs,npm...之类的package来配置自己需要的环境.

那么当时就有了一个疑问,nodejs官方镜像包该怎么用呢,是不是可以同时"FROM centos:centos7 FROM node:7.3.0"来基于多个基础文件来制作出一个自己的镜像文件呢,后来发现是不行的.

后来在docker hub的node仓库中,找到了答案

87b78bba2040b1ae014f036f55ee49ea.png

node官方镜像包是基于linux项目制作的,内部本身就包含了自己所需要的最小的可运行的轻量级的虚拟机.

那么我就来试用一些node镜像包吧

基于node:7.3.0制作镜像文件

1,nodejs项目

关于如何编写nodejs项目,跟本文主提无关,这里就不再细说. 我这里直接使用已有的一个练手项目LittleFileServer.通过xftp4软件将代码copy到centos7服务器中,路径为 "/home/dockertestdir/dockernodetest/LittleFileServer",其中LittleFileServer文件夹就是项目的根目录

31eeaef4f6fd5b3e93bd797453919471.gif

[root@iZ28uvczcf6Z ~]# cd /home/dockertestdir/dockernodetest/LittleFileServer

[root@iZ28uvczcf6Z LittleFileServer]# ls -al

total 88

drwxr-xr-x 14 root root 4096 Jan 5 11:01 .

drwxr-xr-x 3 root root 4096 Jan 3 18:26 ..

drwxr-xr-x 2 root root 4096 Dec 21 19:30 api

drwxr-xr-x 2 root root 4096 Dec 21 18:51 bll

drwxr-xr-x 2 root root 4096 Dec 21 18:53 cache

drwxr-xr-x 2 root root 4096 Dec 21 12:22 common

drwxr-xr-x 2 root root 4096 Dec 21 16:31 config

drwxr-xr-x 3 root root 4096 Dec 30 19:01 .idea

-rw-r--r-- 1 root root 3892 Dec 21 14:58 index.js

drwxr-xr-x 2 root root 4096 Nov 21 14:50 logs

-rw-r--r-- 1 root root 16187 Jun 22 2015 mime.json

drwxr-xr-x 20 root root 4096 Dec 21 17:00 node_modules

-rw-r--r-- 1 root root 861 Jan 4 16:45 package.json

drwxr-xr-x 6 root root 4096 Dec 22 09:53 public

-rw-r--r-- 1 root root 1271 Dec 21 18:56 routes.js

drwxr-xr-x 2 root root 4096 Dec 21 19:11 tempup

drwxr-xr-x 4 root root 4096 Nov 24 14:17 uploads

drwxr-xr-x 2 root root 4096 Dec 22 09:45 views

[root@iZ28uvczcf6Z LittleFileServer]#

cf37c2f26fbdb179b8215b75825f0843.gif

2. 编写Dockerfile文件

在项目根目录中编写Dockerfile (名字是固定的,不能变)

[root@iZ28uvczcf6Z LittleFileServer]# vi Dockerfile

Dockerfile内容如下

2a173400bcfe414c2da56344e439d899.gif

FROM node:7.3.0

COPY . /home/lfs

WORKDIR /home/lfs

EXPOSE 3500

CMD node index

04199a73bc5529a4cd68a4748585c2b3.gif

3. build镜像文件

c35f2bcb1c40be1218e9b1237d35a266.gif

[root@iZ28uvczcf6Z LittleFileServer]# docker build -t node-lfs-official:v1 .

Sending build context to Docker daemon 32.78 MB

Step 1 : FROM node:7.3.0

---> d1699fb7d2bf

Step 2 : COPY . /home/lfs

---> 00e25cf692d5

Removing intermediate container 2daa5c07d098

Step 3 : WORKDIR /home/lfs

---> Running in c582d6bb69bb

---> 59f598113734

Removing intermediate container c582d6bb69bb

Step 4 : EXPOSE 3500

---> Running in f21b15adc0f6

---> 0b515a644212

Removing intermediate container f21b15adc0f6

Step 5 : CMD node index

---> Running in 46965228c387

---> 5a5da4c52c17

Removing intermediate container 46965228c387

Successfully built 5a5da4c52c17

[root@iZ28uvczcf6Z LittleFileServer]#

83bd8ae5e5fa3953a36d6733ef9d35a0.gif

4.查看一下image文件

749d033a7e36ce55a6a3230b56933c76.gif

[root@iZ28uvczcf6Z LittleFileServer]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

node-lfs-official v1 5a5da4c52c17 56 seconds ago 687.8 MB

node-lfs v2 cda2998a607f 19 hours ago 82.74 MB

ubuntu 16.04 dd0ff4f609fa 23 hours ago 168.4 MB

node 7.3.0-alpine d0a6661914f4 8 days ago 54.65 MB

node 7.3.0 d1699fb7d2bf 2 weeks ago 659.7 MB

ubuntu 104bec311bcd 2 weeks ago 128.9 MB

[root@iZ28uvczcf6Z LittleFileServer]#

7a74b3575410ba5e7aaec8fa066fce1f.gif

5. 运行container

确认文件ok,那就下面就可以启动一个container了。

[root@iZ28uvczcf6Z LittleFileServer]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

cf7c8b8ac39a node-lfs-official:v1 "/bin/sh -c 'node ind" 11 seconds ago Up 8 seconds 0.0.0.0:3500->3500/tcp condescending_nobel

[root@iZ28uvczcf6Z LittleFileServer]#

" -p" :是设置端口,格式为[主机端口:容器端口]

"-d" :是设置容器运行在后台模式下.("后台模式"的详细内容,可以参考:后台(background)运行 ;)

下面我们来查询下container的状态

c0179df0836ccad420b87566e4b5e715.gif

[root@iZ28uvczcf6Z LittleFileServer]# docker run -d -p 3500:3500 node-lfs-official:v1

cf7c8b8ac39a170461b18e79d60a774ff0ce09a50070eb6d15ce9236ff078b67

[root@iZ28uvczcf6Z LittleFileServer]#

155db9cadfbd226fd7ec1220c86e40f0.gif

状态ok,然后就可以在本地 通过  ip:port  来访问了。

变化

镜像文件大小(node:7.3.0-alpine)

从镜像列表可以很清楚的发现,node:7.3.0是659M,基于它制作的node-lfs-official:v1 是687M;

而node:7.3.0-alpine版是54M,基于它制作的node-lfs:v2 只有82M。

所以,如果你对镜像文件大小有特殊要求,就不妨把Dockerfile中的"FROM node:7.3.0"换成 "FROM node:7.3.0-alpine"吧,其他流程完全一样,你的镜像包就可以缩小8倍多. 至于node:7.3.0与node:7.3.0-alpine之间的区别,参考官方网页: docker_hub-node 。 下面再给个截图:

7e811734283137b67b18eae6d074b9f3.png

结果

回到文章开篇所提的问题,两种制作nodejs项目镜像文件的方式: 方式1=>基于centos/ubuntu系统镜像,安装所需的node,npm等环境来运行nodejs项目 ; 方式二=>直接基于node官方镜像包,运行自己的项目 ; 二者有什么区别?

笔者自己的感觉是,前者的扩展性更好,可以配置更复杂一些的环境。如果你的环境很复杂,需要配置很多软件,比如你要再集成nginx,mongodb等,使用方式一,你可以很方便的进行控制,扩展; 而方式二,则比较适合简单一些的环境,例如现在很火热的"微服务"概念,这也是大家认为docker很适合的一个应用场景. 如果你的nodejs项目没有太复杂的环境需求,例如 node,nginx,mongodb全部被独立拆分,各自微服务化,那么直接使用node官方镜像会很方便.

后言

笔者能力有限,对于docker这么一个新东西,也是在不断学习之中. 文章的目的也是基于"分享心得,互相学习,共同进步"的想法。。

文章的内容有不对的地方,欢迎大家在下方 评论区指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值