Docker 快速部署一個 Node App

Docker 快速部署一個 node App

⭐️ 更多前端技術和知識點,搜索訂閱號 JS 菌 訂閱前端

用 Docker 快速部署 node App 須要以下幾個步驟:node

  • 安裝 Docker 和 VSCode Docker 插件(方便操做 Docker)
  • 建立 node 應用
  • 建立 Dockerfile 並將應用打包成 image
  • 事例化 image 建立 Container

首先安裝 Docker

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.comnpm

建立 node App

咱們的目的是要在 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')
})
複製代碼

建立 Dockerfile

而後 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 複製代碼
  • 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 別名便可:

20190714225154.png

或使用以下 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
複製代碼

20190714225501.png

使用 curl 驗證一下:

$ curl localhost:8888
hello world%                                    
複製代碼
docker container ls # 獲取全部正在運行中的 container
docker images # 獲取全部 images
複製代碼

done 🔥

JS 菌公衆帳號

請關注個人訂閱號,不按期推送有關 JS 的技術文章,只談技術不談八卦 😊

相關文章
相關標籤/搜索