使用Docker中构建Node.js服务
发布于 3 年前 作者 huangyanxiong01 3448 次浏览 来自 分享

1 设置环境 2 创建docker镜像 3 定义服务 4 构建并且运行Node.js应用 5 体验docke-compose的其它特性

####设置构建环境 设置构建环境很简单,准备好需要的文件,放在一个文件夹下就可以,也可以直接在项目的根目录下进行设置,这样就可以和(webstrom,idea)IDE或者编辑器(sublime,atom)整合,应用就可以整合到容器中

创建构建文件夹

➜  ~ mkdir -p ~/docker/nodejs/web

创建Dockerfile

FROM ubuntu:16.04
COPY ./sources.list /etc/apt/sources.list
RUN apt-get update && apt-get install -y \
    curl \
    apt-utils \
    sudo \
    apt-transport-https \
    ca-certificates \
    apt-utils \
 && curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash - \
 && apt-get update  \
 && apt-get install -y nodejs
ADD . /code
WORKDIR /code
CMD node  app.js

创建app.js


const http = require('http');

const hostname = '0.0.0.0';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Welcome to the node-ubuntu container\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

####创建docker镜像 如果在定义服务那一步直接指定镜像,这一步也可以省略,镜像存在的话就不需要再构建,也可以直接pull远程镜像

➜  ~ docker build -t node-ubuntu:latest .

####定义服务 创建docker-compose.yaml文件,定义一个web服务,并转发3000端口到容器的3000端口,分配当前目录作为容器/code的数据卷

 version: '2'
 services:
   web:
     build: .
     ports:
      - "3000:3000"
     volumes:
      - .:/code

####使用docker-compose构建并且运行Node.js应用 可以使用-d选项放在后台运行

➜  ~ docker-compose up 

接下来就可以在浏览器输入127.0.0.1:3000访问Node.js应用

http://127.0.0.1:3000

####体验docke-compose的其它特性 如果你的镜像已经构建完成,你不必每次都要构建镜像后再运行服务,可以很简单的停止和启动容器

➜  ~ docker-compose stop #停止服务
➜  ~ docker-compose pause #暂停服务
➜  ~ docker-compose start #启动服务
➜  ~ docker-compose restart #重启服务

你也可以在服务容器运行命令

➜  ~ docker-compose run web env

Github 有兴趣的可以一起学习哈 MyFreax

11 回复

为啥不用官方node 镜像作为基础镜像来构建? 体积还小 自豪地采用 CNodeJS ionic

@immatt2015 正在学习,所以自己弄了一个

体积小用 alpine-node

但是 没有需要的版本 自豪地采用 CNodeJS ionic

@immatt2015 修改代码自行切换版本

@luoyjx 我觉得没有必要太在乎体积的问题,因为你会为容器添加迟早会为容器添加一些工具比如vim之类的

@huangyanxiong01 我只是从部署的角度来看,体积小更易于分发而已~

支持Windows吗?

@luoyjx 是,pull镜像会快些

@yakczh 支持Windows 10 64位最新版,在Windows下使用hyper-v虚拟机建立个Linux环境让docker引擎运行,本质上还是运行在Linux下

回到顶部