Dockerfile写法
docker在我的理解中就相当于一个独立的虚拟机,里面配有运行程序所需要的运行环境和打包好的程序或源码,Dockerfile就相当于给虚拟机安装运行所需要的环境、配置所需要的源码/构建好的二进制程序/打包好的软件包如jar,并且设置好服务开机自启,而docker build就相当于将虚拟机提取出来,便于拿去给其他虚拟机服务端部署,虚拟机服务端导入后仅需点击开机(docker run)即可直接使用,无需配置环境和程序
1、引入需要的基础镜像
如下
FROM node:20.10.0
FROM后面的node:20.10.0表示引入了20.10.0版本的nodejs,后续的操作都是基于20.10.0版本的nodejs进行
2、ENV
配置环境变量
比如NODE_VERSION = 20.10.0可以写成
ENV NODE_VERSION 20.10.0
ENV后面的NODE_VERSION 20.10.0表示设置环境变量NODE_VERSION = 20.10.0
3、WORKDIR
指定工作目录
如下
WORKDIR /app
WORKDIR后面的/app表示指定/app为工作目录
4、COPY
复制指令,可以从上下文目录中复制文件或者目录到容器里指定路径
如下
COPY package.json /app
COPY后面的package.json /app表示将package.json文件复制到/app目录下
5、RUN
用于执行命令,命令格式就是shell终端里的命令格式
如下
RUN npm install
RUN后面的npm install表示执行npm install命令
注意:在dockerfile中每使用一次RUN就会在docker 上新建一层,为了不让最后构建出来的镜像体积过大,可以将多条命令之间用&&连接,整体只出现一次RUN,这样只会创建一层镜像
6、EXPOSE
声明容器运行时所监听的端口,就是通俗意义上的内部端口
如下
EXPOSE 8080
EXPOSE后面的8080表示容器监听的端口为8080
7、CMD
用于运行程序
如下
CMD npm run serve
CMD后面的npm run serve表示容器启动时执行npm run serve命令
与RUN不同的是,RUN是在容器构建时执行,CMD是在容器启动时执行
如果有多条CMD,那么默认运行最后一条
同时CMD可被docker run 命令行参数中指定的命令覆盖