[Docker] Build A Node.js Image

Docker + Node.js

最近开始接触容器化技术后,开始觉得这是未来的趋势,于是开始参加与报名了许多课程,而上完课后就是要来实作,所以这边来纪录如何将 Node.js 专案建置成 Docker Image。

Install

这边假设你已经安装并设定好 Docker ,专案我使用 express-generator 来建置 express 做一个简单的範例:

$ yarn global add express-generator$ express --no-view --git express-docker #这里不使用任何 View 模板$ cd express-docker$ yarn #安装 package$ node bin\www #启动专案

接着打开浏览器输入 http://localhost:3000,就可以  看到我们的专案正常启动了。

express-index

建立 DockerFile

测试没问题后,我们就可以了来建立 Dockerfile 了,在专案根目录中新增 Dockerfile 档案并贴上以下内容

# 使用 Node 的版本FROM node:8.9-alpine# Node 环境设定为 productionENV NODE_ENV production# Node 在容器内的位置WORKDIR /usr/src/app# 複製 package 设定COPY ["package.json", "yarn.lock", "./"]# 安装必要的套件并移动到专案的 node_modules 底下RUN yarn --production --silent && mv node_modules ../# 第一个 . 是我们本地位置,第二个是 docker 里面专案的位置,就是将我们专案的程式码全部複製进去COPY . .# 开放对外的 portEXPOSE 3000# 执行专案CMD yarn start

这边使用 node:8.9-alpine 是因为这个版本是官方基于 Alpine Linux 来建置的专案,整个容器大小不会超过 5MB(完整版本大约有 600MB)

 建立 image

当我们 Dockerfile 建立好后,就可以来建立 image,开启你的 terminal 并切换到专案的根目录下,然后执行:

$ docker build -t jeremy/express-docker:1.0.0 .Sending build context to Docker daemon  2.121MBStep 1/8 : FROM node:8.9-alpine ---> 406f227b21f5Step 2/8 : ENV NODE_ENV production ---> Using cache ---> a5f4608e1b01Step 3/8 : WORKDIR /usr/src/app ---> Using cache ---> 77f3a6f6ba55Step 4/8 : COPY ["package.json", "yarn.lock", "./"] ---> Using cache ---> e382743b8956Step 5/8 : RUN yarn --production --silent && mv node_modules ../ ---> Using cache ---> 1b8ea95fa231Step 6/8 : COPY . . ---> Using cache ---> 802418a0f972Step 7/8 : EXPOSE 3000 ---> Using cache ---> 6a6649b4f0b8Step 8/8 : CMD yarn start ---> Using cache ---> a9658953386fSuccessfully built a9658953386fSuccessfully tagged jeremy/express-docker:1.0.0

通常在建立是我们会用 -t 这个参数来设定 container 的名称以及标籤来  简单的做辨识,而用法是 [名称]:[标籤]
而从上面的输出结果我们可以看到,dockr 在建置的时候会按照 Dockerfile 里面的设定顺序来执行,每一行执行成功才会往下执行,最后结果出现编译成功,再来我们在 terminal 内输入 docker image ls  来查看刚刚建立的 image。

$ docker image lsREPOSITORY            TAG   IMAGE ID     CREATED        SIZEjeremy/express-docker 1.0.0 a9658953386f 14 seconds ago 74.2MB

Run

接下来我们要来将刚刚建立好的 image 执行起来, 所以执行一下指令:

$ docker run -d -p 3000:3000 jeremy/express-docker:1.0.07501cc988eaaac5f38cab9c5d5e1a0dd3d1e5292411c370b46185ce4f6de6751

因为正式在操作时可能会遇到不同版本的 image , 所以要指定执行哪一个 tag 比较好
-d 让 container 在背景执行,如果拿掉这个参数就会立即在 terminal 上执行
-p 指定要使用那个 port , 第一个是指定 container 对外的 port,第二个是指定对内要到哪一个 port
其他设定可以使用 docker run --help 来查看更多设定

最后,我们打开浏览器, 网址输入 http://localhost:3000,就可以看到 express 正常执行了!

结语

像这样的作法算是比较简单的方式,不过在设定上可能需要下达许多指令,今天先初步了解 Dockerfile 的功能,之后会再介绍如何使用 docker compose ,来对 container 做更细部的设定,让我们可以针对 port, memory, cpu 等做调整。

同步收录于部落格


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章