dockerfile详解

2024-11-05 15:58:42

1、dockerfile 对大小写不敏感,但最好还是区分。对于dockerfile的命令使用大写,其余使用小写,这样会增加dockerfile的可读性。dockerfile必须以FROM开头。每一行为一个完整的命令,会产生一个新的镜像层。有些命令会有两种书写格式JSON格式和SHELL格式。

2、FROM 基础镜像FROM命令后为一个已经存在的基础镜像(base image),可以为centos,ubuntu,apach,node。如果不加版本号,默认拉取dockerhub上最新版本。接下来的每个命令都是在该基础镜像上创建镜像层(layer)。实例:FROM node

3、RUN 命令RUN命令是在当前镜像即基础镜像运行指定的命令。感觉一般为Linux系统上的命令。在一个dockerfile中可以有多个RUN命令。RUN命令只是执行一个命令并提交结果,发生在构建过程中。实例: RUN apt-get update RUN ["apt-get","update"]

4、CMD 命令在每一个dockerfile文件中,只会最后有一个CMD生效。在构建的过程不会执行任何操作,只会指定镜像将要执行的命令。比如在docker run的时候会默认执行CMD命令。如果docker run 后有命令则会覆盖CMD命令。CMD命令可以作为ENTRYPOINT的参数表。实例: CMD ["npm","start"] CMD echo "start"

5、ENTRYPOINT 命令ENTRYPOINT 的命令(JSON格式的命令)将会被添加在 docker run <image> 后,并且会覆盖CMD命令。docker run 后的命令也会被传递到ENTRYPOINT后。使用--entrypoint会覆盖默认的命令。使用shell格式的命令时,会直接调用shell执行。实例: ENTRYPOINT ["sh","-c","echo $HOME"] 等价于 ENTRYPOINT echo &HOME ; ENTRYPOINT ["echo","&HOME"] 将不会显示用户目录

6、ADD从构建路径或者远程路径中添加新文件,路径到镜像文件系统的路径下。如果为压缩文件则ADD命令会为你自动解压。实例: ADD http://wordpress.org/latest.zip /root/wordpress.zip

7、COPY该命令只是简单的把源路径文件复制到目标文件夹。不会执行任何其余的操作。无法操作远程文件。实例: COPY test.txt /home/test

8、EXPOSE 端口EXPOSE命令会告诉docker该容器内的应用程序将会使用容器的指定端口。但是该命令实际上并没有打开该端口,只有在运行docker run 命令时使用-p参数才会真正打开或映射该端口。默认为TCP协议。实例:EXPOSE 80 EXPOSE 80/udp

9、WORKDIR 路径为容器设置工作路径,当容器从镜像启动时,ENTRYPOINT 或者 CMD命令会在该路径下执行。在docker run命令中使用-w参数可以更改路径。实例: WORKDIR /home/test

10、其余命令标识:LABEL、USER、MAINTAINER数据卷:VOLUME子镜像:ONBUILD环境变量:ENV

11、我们来创建一个吧~~~dockerfile文件创建:在dockerfile所在目录使用docker build来创建,可以使用-f指定dockerfile所在目录。启动容器后,npm就通过CMD命令启动了。

dockerfile详解dockerfile详解dockerfile详解

12、CMD和ENTRYPOINT的使用区别

dockerfile详解
猜你喜欢