乐趣区

关于node.js:Docker-系列-03-入门-Node-服务

  • 本篇文档对应的代码:https://github.com/LiangJunro…
  • Docker 系列文档:https://github.com/LiangJunro…

一、前文回顾

通过前文的解说,想必小伙伴们对 Docker 的一些相干词语有所理解,这里咱们小小回归一下:

  • 宿主机:你的电脑对应的零碎机子
  • Dockfile:一份文件,能够用来创立镜像
  • 镜像:相似光盘,能够用来创立容器,相当于装置操作系统时须要用到的 ISO 文件
  • 容器:轻量级虚构技术,相当于通过 IOS 文件发明的一个零碎

一千个哈姆雷特,每个人认识不同,欢送吐槽

二、一个 Node.js Demo

那么,既然要将 Node.js 塞到 Docker 上,咱们就要有一个 Node 服务,所以 jsliang 拿了本人写的一个根底 Node.js + TypeScript 的服务。

它的目录构造如下:

docker-node

> src
.eslintrc.js
.gitignore
package-lock.json
package.json
README.md
tsconfig.json

启动这个 Demo 只须要 2 步:

  • 安装包:npm i
  • 启动服务:npm run robot

等到每分钟的第 0 秒的时候,终端会打印:

这个 Demo 简略来说,就是通过 commander.js,运行 npm run robot 时,走命令 ts-node ./src/index.ts robot

而后 /src/index.ts 中的工作,次要是:

// ……代码省略
console.log('你好,已进入程序'); // 打印
schedule.scheduleJob('0 * * * * *', () => { // 设置定时工作
  const {year, month, day, hour, minute, second} = getDateDetail(new Date());
  console.log(`${year}/${month}/${day} ${hour}:${minute}:${second}`);
});
// ……代码省略

即打印一行文本,而后在每分钟的第 0 秒打印 年 / 月 / 日 时: 分: 秒

感兴趣的小伙伴能够停下来先看下 Demo,不感兴趣的能够持续往下看。

三、革新 Node.js 服务,增加 Docker 必备文件

上面咱们看看如何将这个 Node.js 服务塞到 Docker 外面。

  • 指标 在 Docker 中构建 Node.js 环境且启动服务

docker-node

> src
+ .dockerignore
.eslintrc.js
.gitignore
+ Dockerfile
package-lock.json
package.json
README.md
tsconfig.json

咱们增加两个文件,别离是 .dockerignoreDockerfile,而后往里面塞内容:

.dockerignore

node_modules
.dockerignore
Dockerfile
*-debug.log
*-error.log
.git
.hg
.svn
.vscode

.dockerignore 就像 .gitignore 一样,起到疏忽文件 / 文件夹的作用,所以 Docker 在运行 Dockerfile 的时候,会选择性疏忽外面对应的文件 / 文件夹。

Dockerfile

# 本镜像拷贝自 Node v14 版本
FROM node:14

# 指定执行 CMD 的目录,即先 cd 到该目录上
WORKDIR /usr/src/app

# 拷贝宿主机(以后运行终端的地位)的文件到容器中的 app 目录中
COPY . .

# 装置 npm 包
RUN npm install

# 对外裸露本镜像的 80 端口
EXPOSE 80

# 启动 Node 服务
CMD ["npm", "run", "robot"];

Dockerfile 会通知 Docker:你只须要这样,而后这样,而后再这样……

具体的我就不颤抖了,下面的正文写得很分明了。

那么接下来咱们只须要 Show 下操作,狂敲指令即可!

四、Docker 部署 Node.js 服务

  • 创立镜像(Image):docker image build ./ -t docker-node:1.0.0

    • docker image build:创立镜像
    • ./:基于当前目录
    • -t:为容器重新分配一个伪输出终端,通常与 -i 同时应用
    • docker-node:1.0.0:对应的镜像名称和 TAG

  • 创立容器(Container):docker container create -p 3333:80 docker-node:1.0.0

    • docker container create:创立容器
    • -p 3333:80:端口,3333:80宿主机: 容器
    • docker-node:1.0.0:对应的镜像及其 TAG

  • 启动容器(Container):docker container start dd420fc4267ad3bdb9eadfdbf37d89e2592dbc9d030a501b96fe10b07ac565ff

    • docker container start:启动容器
    • dd420fc4267ad3bdb9eadfdbf37d89e2592dbc9d030a501b96fe10b07ac565ff:容器 ID,即 docker ps -a 查找到的 CONTAINER ID

  • 查看容器(Container)运行状况:docker ps -a

  • 查看容器(Container)的日志:docker logs -f dd420fc4267a

    • dd420fc4267a:容器 ID,可通过 docker ps -a 查找到

  • 进入容器(Container):docker exec -it dd420fc4267a bash

    • dd420fc4267a:容器 ID,可通过 docker ps -a 查找到
  • 查看 README.md 文件:cat -n README.md

    • cat:cat(英文全拼:concatenate)命令用于连贯文件并打印到规范输出设备上
    • -n:由 1 开始对所有输入的行数编号

五、小结

通过下面的解说,想必小伙伴们大抵理解了 Docker 的一些指令,下篇咱们会解说 Docker 中新人必备的 指令 和如何做 Hosts 隔离,且批改容器外面的工夫。

敬请期待:05 – 解疑 & Docker 指令


不折腾的前端,和咸鱼有什么区别!

感觉文章不错的小伙伴欢送点赞 / 点 Star。

如果小伙伴须要分割 jsliang

  • Github

集体联系方式寄存在 Github 首页,欢送一起折腾~

争取打造本人成为一个充斥摸索欲,喜爱折腾,乐于扩大本人知识面的一生学习横杠程序员。

jsliang 的文档库由 梁峻荣 采纳 常识共享 署名 - 非商业性应用 - 雷同形式共享 4.0 国内 许可协定 进行许可。<br/> 基于 https://github.com/LiangJunrong/document-library 上的作品创作。<br/> 本许可协定受权之外的应用权限能够从 https://creativecommons.org/licenses/by-nc-sa/2.5/cn/ 处取得。

退出移动版