ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## **Dockerfile介绍(摘自网络)** Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像。 ### **简单的教程** ``` #指定镜像,如果本地不存在那么会去hub pull下来 From node:10.11.0 #指定工作目录 WORKDIR /usr/local/myapp #将软件包添加到指定目录 #需要注意的是使用ADD如果 src 是一个tar包,那么会自动解压,并且src支持网络路径。 #还有一个注意的点,app.tar.gz一定要和Dockerfile文件同目录 ADD app.tar.gz /usr/local/myapp #开放的端口 EXPOSE 10086 #运行的命令,注意容器会自己记录日志,所以如果是java等去运行的时候别去守护进程和忽略日志 CMD node server ``` # 参数说明(摘自网络): **FROM** 指定基础镜像,生成新镜像必须指定一个基础镜像,然后在此基础镜像上逐一运行随后的指令,最后生成新镜像,例如: ``` FROM ubuntu:16.04 ``` **RUN** 在镜像内运行命令,注意,这是在镜像打包过程中运行的命令,不是启动容器后的命令。RUN指令常常用来在镜像打包过程中安装软件,例如: ``` RUN apt-get update \ && apt-get install nginx ``` > 可以使用转移符 \ 书写多行指令 RUN其实调用的是标准的shell,所以可以通过 && 连接执行多个命令 **CMD** 指定容器启动时执行的命令,注意,和RUN的区别是:RUN是在打包过程中执行的命令。镜像中只能有一条CMD指令,如果有多个CMD指令,则以最后一条为准,所以我们可以覆盖基础镜像中定义的CMD指令。CMD指令支持三种格式: ``` CMD ["executable", "param1", "param2"] //使用exec执行 //CMD command param1 param2 使用/bin/sh -c执行 CMD ["param1", "param2"] //提供给ENTRYPOINT的默认参数 ``` **ENTRYPOINT** 容器启动入口,即容器启动后执行的命令,不会被CMD指令覆盖,如果存在ENTRYPOINT,那么CMD指令会充当ENTRYPOINT的参数。 ``` ENTRYPOINT /app/entrypoint.sh ``` **WORKDIR** 指定后续RUN、CMD、ENTRYPOINT程序的工作目录,可以多次执行,就像Linux的 cd 命令。 ``` WORKDIR /app WORKDIR data RUN pwd # /app/data ``` **USER** 指定后续RUN、CMD、ENTRYPOINT程序的用户名或UID。 ``` USER nginx ``` **ENV** 声明一个环境变量,可为后续的RUN、CMD、ENTRYPOINT程序所使用。 ``` ENV JAVA_HOME /opt/java ``` **EXPOSE** 声明容器需要暴露的端口号。 ``` EXPOSE 80 443 ``` **VOLUME** 声明容器运行时的数据卷挂载点,将主机目录挂载到容器中,用来持久化保存容器生成的数据。 ``` VOLUME /app/data ``` **ADD** 将Dockerfile所在目录中的文件拷贝到镜像中,ADD <src> <dest>,如果 src 是一个tar包,那么会自动解压,并且src支持网络路径。 ``` ADD app.tar.gz /usr/local/myapp ``` **COPY** 和ADD类似,格式为 COPY <scr> <dest> ,复制本地文件到容器中,和ADD区别是,不会自动解压,推荐使用COPY。 ``` COPY server.jar /app/server.jar COPY . /app COPY dist/* /app/ ```