这是一个非常简单的 JavaScript 项目。
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"]
对以上文件进行解释:
FROM
:指定基础镜像,这里使用的是 node:14.15.4-alpine3.12
,这是一个非常小的镜像,只有 88.9MB。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 查看效果。
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