文章

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 命令行参数中指定的命令覆盖

License:  CC BY 4.0