网站首页 > 技术教程 正文
Docker 快速部署一个 node App
?? 更多前端技术和知识点,搜索订阅号 JS 菌 订阅
用 Docker 快速部署 node App 需要如下几个步骤:
- 安装 Docker 和 VSCode Docker 插件(方便操作 Docker)
- 创建 node 应用
- 创建 Dockerfile 并将应用打包成 image
- 事例化 image 创建 Container
首先安装 Docker
Docker 的安装看官方文档,文档很详细了 docs.docker.com/docker-for-…
然后安装 Docker 的 VSC 插件,安装这个插件仅仅是为了方便操作 Docker。
安装完毕后打开 Docker 服务执行命令检查是否安装完毕:
$ docker -v Docker version 18.09.2, build 6247962 复制代码
最后使用国内的镜像源:
https://registry.docker-cn.com
创建 node App
我们的目的是要在 nginx 的 Container 中对外暴露一个端口,Container 中是我们打包后的 node App,外部可通过这个端口访问我们的服务。
npm init npm install -S express 复制代码
安装完成后创建一个简单的 node App:
// app.js const express = require('express') const url = require('url') const execa = require('execa') const app = express() app.use((req, res, next) => { console.log(url.resolve(req.url)) res.end('hello world') }) app.listen(8888, () => { console.log('listening at port: 8888') }) 复制代码
创建 Dockerfile
然后 VSC 调用 >dockerfile 通过 docker 插件创建一个新的 dockerfile,在选项中选择 node
插件自动在当前目录下创建 Dockerfile, docker-compose.yml, docker-compose.debug.yml, .dockerignore
目录结构如下:
. ├── Dockerfile ├── app.js ├── docker-compose.debug.yml ├── docker-compose.yml ├── node_modules ├── package.json └── yarn.lock 复制代码
在 Docker image 中我们肯定是只将必要的文件打包进去,像 .dockerignore .gitignore 这种文件是肯定不能被打包的。
Docker 插件自动创建的 .dockerignore 中自动帮我们写好了配置文件:
node_modules npm-debug.log Dockerfile* docker-compose* .dockerignore .git .gitignore .env */bin */obj README.md LICENSE .vscode 复制代码
最后我们来编辑一下 Dockerfile
FROM node ENV NODE_ENV production WORKDIR /usr/src/app COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"] RUN npm install --production --silent && mv node_modules ../ COPY . . EXPOSE 8888 CMD node app.js 复制代码
- FROM 指定基础镜像
- ENV 配置环境变量
- WORKDIR 指定工作目录
- COPY 拷贝 package.json 等配置文件到工作目录
- RUN 执行命令安装依赖
- COPY 拷贝项目文件 app.js 等到指定工作目录
- EXPOSE 对外暴露 8888 端口
- CMD 执行命令启动项目
RUN 和 CMD 的区别见这篇文章 stackoverflow.com/questions/3…
打包成 image
Dockerfile 和项目文件创建完毕了,紧接着我们就需要通过 Docker 打包项目成 iamge:
>dockerbuild
填入指定的 image 别名即可:
或使用如下 docker build 命令
docker build -t essearch/ess-elasticsearch:1.7.6 --build-arg number_of_shards=5 --build-arg number_of_replicas=2 --no-cache . 复制代码
最后创建容器
最后创建容器即可通过暴露的端口访问到应用
>dockerrun
或执行 docker run 命令:
$ docker run --rm -d -p 8888:8888/tcp test:latest 265575b6dc2866a6fa778ee74ad71d823554e1d96f577b31034ba544177204cb 复制代码
使用 curl 验证一下:
$ curl localhost:8888 hello world% 复制代码 docker container ls # 获取所有正在运行中的 container docker images # 获取所有 images 复制代码
猜你喜欢
- 2024-10-11 Nginx自定义数据结构之字符串(String)数组(Array)链表(List)
- 2024-10-11 那些你不知道的?——支付宝架构师眼中的高并发架构
- 2024-10-11 脚本语言,node在前端都有什么作用?
- 2024-10-11 什么是Java开发人员的Node.js?(java node是什么)
- 2024-10-11 提高 kubernetes 集群管理工具 kubectl 使用生产力
- 2024-10-11 基于阿里云的 Node.js 稳定性实践
- 2024-10-11 从静态到node再到负载均衡,你知道多少?【前端篇】
- 2024-10-11 高效管理 Kubernetes 集群之道(kubernetes集群应用部署的哪些功能)
- 2024-10-11 Vue 项目部署到服务器的问题解决方法
- 2024-10-11 Node编程基本语法(nodejs编程)
你 发表评论:
欢迎- 最近发表
-
- Linux新手必看:几种方法帮你查看CPU核心数量
- linux基础命令之lscpu命令(linux中ls命令的用法)
- Linux lscpu 命令使用详解(linux常用ls命令)
- 如何查询 Linux 中 CPU 的数量?这几个命令要知道!
- 在linux上怎么查看cpu信息(linux如何查看cpu信息)
- 查看 CPU 的命令和磁盘 IO 的命令
- 如何在CentOS7上改变网卡名(centos怎么改网卡名字)
- 网工必备Linux网络管理命令(网工必备linux网络管理命令是什么)
- Linux 网络命令知多少(linux 网络 命令)
- Linux通过命令行连接wifi的方式(linux命令行连接无线网)
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)