⭐️ 更多前端技术和知识点,搜索订阅号
JS 菌
订阅
用 Docker 快速部署 node App 须要以下几个步骤:前端
Docker 的安装看官方文档,文档很详细了 https://docs.docker.com/docker-for-mac/install/node
而后安装 Docker 的 VSC 插件,安装这个插件仅仅是为了方便操做 Docker。nginx
安装完毕后打开 Docker 服务执行命令检查是否安装完毕:git
$ docker -v Docker version 18.09.2, build 6247962
最后使用国内的镜像源:docker
https://registry.docker-cn.com
express
咱们的目的是要在 nginx 的 Container 中对外暴露一个端口,Container 中是咱们打包后的 node App,外部可经过这个端口访问咱们的服务。npm
npm init npm install -S express
安装完成后建立一个简单的 node App:json
// 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') })
而后 VSC 调用 >dockerfile
经过 docker 插件建立一个新的 dockerfile,在选项中选择 nodeapp
插件自动在当前目录下建立 Dockerfile
, docker-compose.yml
, docker-compose.debug.yml
, .dockerignore
curl
目录结构以下:
. ├── 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
RUN 和 CMD 的区别见这篇文章 https://stackoverflow.com/questions/37461868/difference-between-run-and-cmd-in-a-docker-file
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
done 🔥
请关注个人订阅号,不按期推送有关 JS 的技术文章,只谈技术不谈八卦 😊