简单的nodejs应用打包成docker镜像

编写一个简单的nodejs应用

首先,创建一个新文件夹以便于容纳需要的所有文件,并且在此其中创建一个 package.json 文件,描述你应用程序以及需要的依赖:

{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "Joy",
  "main": "app.js",
  "scripts": {
    "start": "node app.js"
  },
  "dependencies": {
    "express": "^4.17.1"
  }
}

配合着你的 package.json 请运行 npm install。如果你使用的 npm 是版本 5 或者之后的版本,这会自动生成一个 package-lock.json 文件,它将一起被拷贝进入你的 Docker 镜像中。

然后,创建一个 app.js 文件,使用 Express.js 框架定义一个 Web 应用:

// 引入Express模块
const express = require('express');

const PORT = 3000;
const HOST = '0.0.0.0';

// 实例化
const app = express();
app.get('/', (req, res) => {
  res.send('Hello World');
});

// 监听
app.listen(PORT, HOST);
console.log(`Running on http://${HOST}:${PORT}`);

创建一个名称为 Dockerfile 的文件

你的 Dockerfile 现在看上去是这个样子:

# from 构建镜像的基础源镜像 该image镜像文件继承官方的node image
FROM node:10.0

# 在容器中创建一个目录
RUN mkdir -p /usr/src/app/

# 定位到容器的工作目录
WORKDIR /usr/src/app/

# RUN/COPY是分层的,package.json 提前,只要没修改就不会重新安装包
COPY package.json /usr/src/app/package.json
RUN cd /usr/src/app/
RUN npm i

# 把当前目录下所有的文件拷贝到 Image 的 /usr/src/app/目录下
COPY . /usr/src/app/

EXPOSE 3000
CMD npm start

或者这个样子:(上面的不行就用下面的)

# from 构建镜像的基础源镜像 该image镜像文件继承官方的node image
FROM node:10.0

# 在容器中创建一个工作目录
WORKDIR /usr/src/app

# RUN/COPY是分层的,package.json 提前,只要没修改就不会重新安装包
COPY package*.json ./
RUN npm install -g cnpm --registry=https://registry.npm.taobao.org
RUN cnpm install

# 捆绑应用程序源
COPY . .

EXPOSE 3000
CMD ["node", "app.js"]

构建你的镜像

进入到 Dockerfile 所在的那个目录中,运行以下命令构建 Docker 镜像。
注意这里是有个点的,点标明是在根据当前目录构建

$ docker build . -t demo

Docker 现在将给出你的镜像列表:

$ docker images

# Example
REPOSITORY                      TAG        ID              CREATED
node                            10         1934b0b038d1    5 days ago
demo                            latest     d64d3505b0d2    1 minute ago

运行镜像

使用 -d 模式运行镜像将以分离模式运行 Docker 容器,使得容器在后台自助运行。开关符 -p 在容器中把一个公共端口导向到私有的端口,请用以下命令运行你之前构建的镜像:

$ docker run -d --name demo -p 3000:3000 demo

如果你需要进入容器中,请运行 exec 命令:

$ docker exec -it <容器名/容器Id> /bin/bash

如果你需要设置容器随docker启动而启动

$ docker container update --restart=always <容器名/容器Id>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值