Ubuntu 16.04 LTS 下 Docker 快速部署 Node.js

声明:非原创,仅供学习使用!

原文地址:https://www.cnblogs.com/li-peng/p/5827104.html

目录

一、前言

二、实现准备

三、创建 Node.js 程序

四、创建 Dockerfile

五、构建 Image

六、运行镜像

七、测试

八、总结


一、前言

Docker 是由 Go 语言编写的,一个快速部署的轻量级虚拟技术项目,允许开发人员将自己的程序和运行环境一起打包,制作成一个 Docker 的 Image(镜像),部署到服务器上,用户只需要下载这个 Image 就可以运行程序,免去每次都需要安装各种依赖和环境的麻烦,还能够做到应用程序之间的隔离。

安装 Docker:https://blog.csdn.net/jinking01/article/details/82490688

注意,为了开放权限,建议使用 root(超级用户):

sudo -i

二、实现准备

先创建一个简单的 Node.js Web app,来构建一个 Image。然后基于这个 Image 运行一个 Container(容器),从而实现快速部署。Image 与 Container 的关系:https://blog.csdn.net/taifei/article/details/82697312

由于网络的原因,Node.js 镜像从国内的镜像库下载,而不是 Docker Hub。

先从国内的镜像网站上 pull 下 nodejs 镜像:

docker pull hub.c.163.com/nce2/nodejs:0.12.2

下载完后查看我们的镜像,找到 Image Repository,等会会用到:

docker images

三、创建 Node.js 程序

之后所有文件的位置都在 ~ 下,也可以都放在自定义目录下。

创建 package.json,并写入相关信息和依赖:

vim package.json
{
 "name": "webtest",
 "version": "1.0.0",
 "description": "Node.js on Docker",
 "author": "lpxxn",
 "main": "server.js",
 "scripts": {
 "start": "node server.js"
 },
 "dependencies": {
 "express": "^4.13.3"
 }
}

创建 server.js:

vim server.js

写一个最简单的 Web,这个 Web 基于 express 框架,返回 Hello word。注意,我们监听的是 8888 端口:

'use strict';
 
var express = require('express');
 
var PORT = 8888;
 
var app = express();
app.get('/', function (req, res) {
 res.send('Hello world\n');
});
 
app.listen(PORT);
console.log('Running on http://localhost:' + PORT);

四、创建 Dockerfile

创建 Dockerfile 文件,这个文件是创建镜像所必需的文件:

vim Dockerfile

Docker 会依照 Dockerfile 的内容来构建一个镜像。先给出完整的代码,再一行一行的给出解释:

FROM hub.c.163.com/nce2/nodejs:0.12.2
 
# Create app directory
RUN mkdir -p /home/Service
WORKDIR /home/Service
 
# Bundle app source
COPY . /home/Service
RUN npm install
 
EXPOSE 8888
CMD [ "npm", "start" ]

我们来一句一句的解释:

1、

FROM hub.c.163.com/nce2/nodejs:0.12.2

FROM 是构建镜像的基础源镜像,hub.c.163.com/nce2/nodejs:0.12.2 是镜像的名称,也就是我们一开始从国内服务器上拉下来的那个 Image。如果本地没有,会自己 pull 镜像。

2、

# Create app directory

RUN mkdir -p /home/Service

WORKDIR /home/Service

第一句 RUN 用于在 Image 里创建一个文件夹,将来用于保存我们的代码。

第二句 WORKDIR 是将我们创建的文件夹做为工作目录。

3、

# Bundle app source

COPY . /home/Service

RUN npm install

第一句的 COPY 是把本机当前目录下的所有文件拷贝到 Image 的 /home/Service 文件夹下。

第二句的 RUN 使用 npm 安装我们的 App 所需要的所有依赖。

4、

EXPOSE 8888

由于我们的 Web app 监听的是 8888 端口,把这个端口暴露给主机,这样就能从外部访问 Web 了。

5、

CMD [ "npm", "start" ]

运行 npm start 命令,这个命令会运行 node service.js 来启动我们的 Web app。

五、构建 Image

在 Dockerfile 文件所在的目录下运行下面的命令来构建一个 Image:

docker build -t mynodeapp .

别忘了最后的的那个点,mynodeapp 是 Image 的名称:

...

出现上面两个 Successfully 表示成功。

构建完后查看一下我们的镜像:

docker images

六、运行镜像

docker run -d -p 8888:8888 52e3321d5b71

 

-d 表明 Container 会在后台运行,-p 表示端口映射,把本机的 8888 端口映射到 Container 的 8888 端口,这样外网就能通过本机的 8888 端口访问我们的 Web了。 

52e3321d5b71 是我们 Image 的 ID。

通过 docker ps 查看我们刚运行的 Container 的 ID:

8d4bddb59017 就是我们的 Container ID。查看 logs(日志):

如果你想到 Container 里,可以执行下面的命令,进入到里边后就可以像操作普通的 Linux 一样。如果想退出可执行 exit 命令:

docker exec -i -t 8d4bddb59017 /bin/bash

七、测试

我们先通过 curl 看能不能访问我们的 Web:

curl -i localhost:8888

也可以通过浏览器来看一下,注意,如果虚拟机带的动就用内部的火狐,否则用主机的浏览器。

ifconfig 查看 IP 地址:

在主机浏览器输入 192.168.220.155:8888:

成功!

八、总结

这个教程到此就结束了,希望这篇文章能帮助到你。如果有什么问题或者疑问可以留言交流。