Dcoker之Dockerfile

Dockerfile

1、Dockerfile简介

Dockerfile是由一行行指令语句构成的

Dockerfile是一个创建docker镜像的配置文件

Dockerfile是由三个部分组成:基础镜像(必须的)、运行指令、容器默认执行命令

Docker 以从上到下的顺序运行 Dockerfile 的指令。为了指定基本映像,第一条指令必须是 FROM

一个声明以#字符开头则被视为注释

2、dockerfile常用指令释义

2.1、FROM

#指定基础镜像,必须为第一个命令
#格式:
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>

#实例
FROM centos:7

2.2、MAINTAINER

#维护者信息
#格式
MAINTAINER <name>

#实例
MAINTAINER ddff xxx 你说啥???

2.3、RUN

#构建镜像时执行的命令
#基于FROM指定的docker镜像运行一个指令,将结果反映到新生成的镜像。RUN指令后面执行的命令必须是镜像中已经存在了的命令。
#RUN 用于在镜像容器中执行命令,其有以下两种命令执行方式:

#shell 执行 
#格式:
	RUN <command> 
	
#exec 执行 
#格式:
	RUN ["executable", "param1", "param2"]

#实例
RUN echo "你可真是个小可爱"
RUN apk update

#PS:RUN 指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,可以在构建时指定--no-cache 参数,如:docker build --no-cache

2.4、CMD

#指定容器运行的默认命令
#构建容器后调用,也就是在容器启动时才进行调用
#格式:
CMD ["executable","param1","param2"] (执行可执行文件,优先) 
CMD ["param1","param2"] (设置了 ENTRYPOINT,则直接调用 ENTRYPOINT 添加参数) 
CMD command param1 param2 (执行 shell 内部命令)

#实例
CMD ["nginx" "-g" "daemon"]

2.5、COPY

#将本地文件添加到容器中
#格式:
COPY < src>… < dest>|[“< src>”,… “< dest>”]

#实例
COPY nginx.conf /etc/nginx/

2.6、ADD

#功能类似于COPY,且更加强大
#ADD 的源路径可以是一个URL,Docker引擎会试图去下载这个链接的文件放到<目标路径>去
#ADD 会自动解压tar类型的文件,但来自于网络的压缩资源则不会被解压
#格式
ADD <src>... <dest> 
ADD ["<src>",... "<dest>"] 用于支持包含空格的路径

#实例
ADD nginx.conf /etc/nginx/

2.7、ENV

#设置一个容器的环境变量
#格式
ENV <key> <value>
#<key>之后的所有内容均会被视为其<value>的组成部分,因此,一次只能设置 一个变量

ENV <key>=<value> ...
#可以设置多个变量,每个变量为一个"<key>=<value>"的键值对,如果 <key>中包含空格,可以使用\来进行转义,也可以通过""来进行标示;另外,反斜线也可以用于续行

#实例
ENV name=ddff

2.8、EXPOSE

#指定于外界交互的端口
#指定容器需要向外界暴露的端口,实际上没有暴露,只有指定了EXPOSE才能够使用-P, 可以指定多个端口
#格式
EXPOSE <port> [<port>...]

#实例
EXPOSE 80 443

2.9、ARG

#用于指定传递给构建运行时的变量
#格式:
ARG <name>[=<default value>]

#在构建时使用--build-arg=<name>=<default value>以自定义变量值

#实例
ARG ssdd=xxxx

2.10、VOLUME

#用于指定持久化目录
#提示需要挂载的目录,本身并不会实现自动挂载
#格式
VOLUME ["/path/to/dir"]

#实例
VOLUME ["/data"]

2.11、WORKDIR

#工作目录
#是程序运行的开始目录
#是进入容器的最初目录

#格式
WORKDIR /path/to/workdir

#实例
WORKDIR /etc/nginx

2.12、ONBUILD

#用于设置镜像触发器
#ONBUILD 后面跟的是Dockerfile指令不是linux命令。当有新的Dockerfile以此镜像为基础镜像时,在新的Dockerfile构建时首先执行本指令

#格式
ONBUILD [INSTRUCTION]

#实例
ONBUILD RUN echo "就是你小子想要用我的镜像???"

2.13、LABEL

#用于为镜像添加元数据
#格式:
LABEL <key>=<value> <key>=<value> <key>=<value> ...

#实例
LABEL version="1.0" description="这是一个 Web 服务器" by="IT 笔录"

#PS:
使用 LABEL 指定元数据时,一条 LABEL 指定可以指定一或多条元数据,指定多条元数据时不同元数据之间 通过空格分隔。推荐将所有的元数据通过一条 LABEL 指令指定,以免生成过多的中间镜像。
posted @ 2022-10-16 21:29  大胡萝卜没有须  阅读(56)  评论(0)    收藏  举报