Jerry's Blog

Recording what I learned everyday

View on GitHub


30 April 2021

Docker 3 -- docker项目示例simpleweb

by Jerry Zhang

创建nodejs项目

创建一个package.json文件

{
    "dependencies": {
        "express": "*"
    },
    "scripts": {
        "start": "node index.js"
    }
}

星号代表任意版本

创建index.js文件

const express = require('express');

const app = express();

app.get('/', (req, res) => {
    res.send('How are you doing');
});

app.listen(8080, () => {
    console.log('Listening on port 8080');
});

创建Dockerfile

# Specify a base image
FROM node:alpine

WORKDIR /usr/app

# Install some dependencies
COPY ./package.json ./
RUN npm install
COPY . .

# Default command
CMD ["npm", "start"]

为什么要“COPY . .”

因为在Dockerfile中,每一步都是基于上一步创建出的临时image来操作的。在新的容器中,并不包含主机中的任何文件。因此首先要把当前项目目录下的所有文件copy到容器的某个位置,才能开始在容器中使用当前项目中的文件。

为什么要先COPY package.json文件

这样只要依赖不变,就能生成一个cache,将来其他代码修改的时候,就不需要重新npm install了,节省了大量时间。

build docker image并运行

docker build -t jerry4013/simpleweb .
docker run -p 8080:8080 jerry4013/simpleweb

这里一定要mapping 8080端口,否则从外部无法访问容器。

查看容器内部状态

docker run -it jerry4013/simpleweb sh
# 或者
docker exec -it <container id> sh
tags: Docker