dokerfile的作用就是自定义docker镜像每一层的作用
基础指令
FROM
FROM
指令用于指定其后构建新镜像所使用的基础镜像。FROM
指令必是Dockerfile文件中的首条命令,启动构建流程后,Docker将会基于该镜像构建新镜像,FROM
后的命令也会基于这个基础镜像
RUN
RUN
用于在镜像容器中执行命令,RUN
指令创建的中间镜像会被缓存,并会在下次构建中使用,一般后面跟着shell指令
ADD
ADD
用于复制构建环境中的文件或目录到镜像中。<src>是源文件位置可以是一个构建上下文中的文件或目录,也可以是一个URL
,但不能访问构建上下文之外的文件或目录,<dest>
来指定目标位置
COPY
COPY
同样用于复制构建环境中的文件或目录到镜像中。COPY
指令非常类似于ADD
,不同点在于COPY
只会复制构建目录下的文件,不能使用URL
也不会进行解压操作
WORKDIR
WORKDIR
用于在容器内设置一个工作目录,通过WORKDIR
设置工作目录后,Dockerfile中其后的命令RUN
、CMD
、ENTRYPOINT
、ADD
、COPY
等命令都会在该目录下执行。在使用docker run
运行容器时,可以通过-w
参数覆盖构建时所设置的工作目录
EXPOSE
EXPOSE
用于指定容器在运行时监听的端口:EXPOSE <port> [<port>...] 。EXPOSE
并不会让容器的端口访问到主机。要使其可访问,需要在docker run
运行容器时通过-p
来发布这些端口,或通过-P
参数来发布EXPOSE
导出的所有端口
CMD
CMD
用于指定在容器启动时所要执行的命令。CMD
在Dockerfile文件中仅可指定一次,指定多次时,会覆盖前的指令
实践
一.创建Dockerfile(名字必须是dockerfile)
#写镜像来源
FROM nginx
#更改配置文件
RUN echo '<meta charset=utf8>koniaoer_docker.' > /usr/share/nginx/html/index.html:;
docker build .
#运行dockerfile
运行nginx
进阶指令
LABEL
LABEL
用于为镜像添加元数据,元数以键值对的形式指定,一条LABEL
指定可以指定一或多条元数据,指定多条元数据时不同元数据之间通过空格分隔
ENV
ENV
用于设置环境变量,其有以下两种设置形式:
ENV <key> <value>
ENV <key>=<value> ...
这些环境变量不仅可以构建镜像过程(在ENV
命令之后)使用,使用该镜像创建的容器中也可以使用。
VOLUME
VOLUME
用于创建挂载点,即向基于所构建镜像创始的容器添加卷:VOLUME ["/data"]。一个卷可以存在于一个或多个容器的指定目录,该目录可以绕过联合文件系统
USER
USER用于指定运行镜像所使用的用户,用户可以使用用户名、UID或GID,或是两者的组合。
使用USER指定用户后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT都将使用该用户。镜像构建完成后,通过docker run运行容器时,可以通过-u参数来覆盖所指定的用户
ARG
ARG
用于指定传递给构建运行时的变量
ONBUILD
ONBUILD
用于设置镜像触发器,当所构建的镜像被用做其它镜像的基础镜像,该镜像中的触发器将会被钥触发
STOPSIGNAL
STOPSIGNAL
用于设置停止容器所要发送的系统调用信号:STOPSIGNAL signal。所使用的信号必须是内核系统调用表中的合法的值,如:9
、SIGKILL
SHELL
SHELL
用于设置执行命令(shell
式)所使用的的默认shell
类型:SHELL ["executable", "parameters"]。SHELL
在Windows环境下比较有用,Windows下通常会有cmd
和powershell
两种shell
,可能还会有sh
评论区