Published 2023-02-07

如何创建一个JavaScript docker镜像

源码:fhsinchy/hello-dock

这是一个非常简单的 JavaScript 项目。

创建一个 Dockerfile

FROM node:14.15.4-alpine3.12
EXPOSE 3000
USER node
RUN mkdir /home/node/app
WORKDIR /home/node/app
COPY ./package.json .
RUN npm install

COPY . .

CMD ["npm", "start"]

对以上文件进行解释:

构建镜像

docker build -t hello-dock .

--file选项可以指定 Dockerfile 的路径,-t选项可以指定镜像的名称。

执行命令后可以访问 http://localhost:3000 查看效果。

挂载本地目录

JTD5j1

docker run -it -p 3000:3000 -v $(pwd):/home/node/app hello-dock

-v选项可以挂载本地目录,这里挂载的是当前目录,也就是 .

挂载本地目录后,修改本地文件后,可以直接在浏览器中查看效果。

使用匿名卷

docker run -it -p 3000:3000 -v /home/node/app/node_modules -v $(pwd):/home/node/app hello-dock

多阶段构建

FROM node:lts-alpine as builder

WORKDIR /app

COPY ./package.json ./
RUN npm install

COPY . .
RUN npm run build

FROM nginx:stable-alpine

EXPOSE 80

COPY --from=builder /app/dist /usr/share/nginx/html

多阶段构建和单阶段构建的区别在于,多阶段构建可以减少镜像的大小。

构建镜像后,可以访问 http://localhost:8080 查看效果。

多阶段构建适用于前端项目,因为前端项目的构建过程比较复杂,需要安装很多依赖,构建完成后,只需要将构建后的文件复制到 Nginx 的目录下即可。

忽略不需要的文件

.git
*Dockerfile*
*docker-compose*
node_modules