⭐️ 更多前端技術和知識點,搜索訂閱號
JS 菌
訂閱前端
用 Docker 快速部署 node App 須要以下幾個步驟:node
Docker 的安裝看官方文檔,文檔很詳細了 docs.docker.com/docker-for-…nginx
而後安裝 Docker 的 VSC 插件,安裝這個插件僅僅是爲了方便操做 Docker。git
安裝完畢後打開 Docker 服務執行命令檢查是否安裝完畢:docker
$ docker -v
Docker version 18.09.2, build 6247962
複製代碼
最後使用國內的鏡像源:express
https://registry.docker-cn.com
npm
咱們的目的是要在 nginx 的 Container 中對外暴露一個端口,Container 中是咱們打包後的 node App,外部可經過這個端口訪問咱們的服務。json
npm init
npm install -S express
複製代碼
安裝完成後建立一個簡單的 node App:bash
// 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
目錄結構以下:
.
├── 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 的區別見這篇文章 stackoverflow.com/questions/3…
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 的技術文章,只談技術不談八卦 😊