Dcokerfile 语法
Dcokerfile 语法
-
FROM
基础
image
的来源语法格式:
- FROM
:[tag]
FROM busybox:latest # 默认使用hub.docker.com 仓库image FROM registry.cn-shenzhen.aliyuncs.com/abo/devops:[tag]
- FROM
@
# docker pull 通过digest方式 docker pull alpine@sha256:d7342993700f8cd7aba8496c2d0e57be0666e80b4c441925fc6f9361fa81d10e # FROM alpine@sha256:d7342993700f8cd7aba8496c2d0e57be0666e80b4c441925fc6f9361fa81d10e
- FROM
-
MAINTANTIER
维护者信息
语法格式:MAINTANTIER
# 维护着信息或者作者信息,可有可无 MAINTANTIER "Peter<westlife@aliyun.com>"
注意:
MAINTANTIER
已经被新的LABEL
替代
-
LABEL
维护者信息以及其他信息
语法格式:LABEL
= = ... LABEL author="Peter<westlife@aliyun.com>"
-
COPY
复制文件或者目录
语法格式:
COPY <src> <dest>
# 所有的copy都指的是Dockerfile当前目录下的文件来讲的 COPY test.tar.gz /data/web/
- COPY
["<src>", ..."<dest>"]
COPY `["test.tar.gz","/data/web/"]`
注意事项
-
src
支持通配符 -
dest
建议使用绝对路径 -
路径中不能存在空白字符,常用第二种格式
-
src
是目录,只会复制其下层目录以及文件,不会复制src
目录本身到dest
-
指定了多个
src
或者使用了通配符,dest
必须是同一个,且dest必须以/
结尾V
-
ADD
复制添加文件或者目录
语法格式:
ADD
<src> <dest>
# 复制压缩包以及index.html文件到/data/web/目录下,并且压缩包会被自动解压,仅仅本地src才会被解压 `ADD test.tar.gz index.html /data/web/` # 支持SRC为URL,请注意dest后面带`/`和不带区别 `ADD http://aliyun.com/test.tar.gz /data/web` # 添加文件并且被命名为web ` ADD http://aliyun.com/test.tar.gz /data/web/` # 添加文件到/data/web/
- ADD ["
", ..." "]
ADD ["http://5.5.5.100:8000/software/linux/nginx-1.18.0.tar.gz","index.html","/data/web/"] ADD ["test.tar.gz","index.html","/data/web/"]
-
VOLUME
用于在
image
中创建一个挂载点,以挂载docker host
上的卷或者其他容器上的卷语法格式:
- VOLUME
VOLUME /data/mydata/
- VOLUME ["
"]
VOLUME ["/data/mydata/"]
注意:如果挂载点路径此前存在文件,``docker run`后会在挂载完成后将此前文件复制到新的挂载卷中
- VOLUME
-
EXPOSE
容器需要暴露的端口
语法格式:EXPOSE
/<[tcp|udp]> # 可以定义多个端口暴露 EXPOSE 80/tcp 2222/udp
-
ENV
容器定义环境变量,可以被
ENV``ADD``COPY
所调用语法格式:
- ENV
# 这种方式中,key后面的所有内容都会被认为是value的值,因此这种只能定义一个变量 ENV HTTP_ROOT /usr/local/nginx/html/
- ENV
=
# 此种方式可以定义多个变量 ENV HTTP_ROOT="/usr/local/nginx/html/" \ WORKDIR="/data/web/"
- 调用方式:
$HTTP_ROOT
or${HTTP_ROOT}
- ENV
-
RUN
docker build
过程中需要运行的命令语法格式:
- RUN
# 这种方式是以 /bin/sh -c 来运行mkdir,容器PID不为1,不能接受unix信号 RUN mkdir -p /data/web
- RUN ["
","<参数1>","<参数n>"]
# 这种方式不是以 /bin/sh -c 来运行mkdir ENV HTTP_ROOT="/data/test/" RUN ["mkdir","-p","$HTTP_ROOT"] RUN ["mkdir","-p $HTTP_ROOT"] RUN ["mkdir","p ${HTTP_ROOT}"] # 如果要依赖shell特性以这种方式运行运行,请参照下面的格式 RUN ["/bin/bash",-c","mkdir", "-p","$HTTP_ROOT"]
- RUN
-
CMD
docker run
过程中,容器运行起来需要执行的命令语法格式:
-
CMD <完整的命令以及参数>
CMD
指定的命令可以被docker run
后面的命令覆盖
ENV HTTP_ROOT="/data/test/" CMD /bin/httpd -f -h $HTTP_ROOT
-
CMD ["
","<参数1>","<参数n>"] 这种方式方括号内
无法读取环境变量参数
ENV HTTP_ROOT="/data/test/" # 错误写法 CMD ["/bin/httpd","-f","-h","$HTTP_ROOT"] # 这种方式CMD无法获取变量参数, # 正确写法 CMD ["/bin/httpd","-f","-h /data/web/html/"] CMD ["/bin/httpd","-f","-h","/data/web/html/"]
-
CMD ["<参数1>","<参数2>","<参数n>"]
此种方式用于为
ENTRYPOINT
提供默认参数
-
-
ENTRYPOINT
功能和
CMD
一样,但是有差异,ENTRYPOINT
运行的命令不可以被docker run
后面的命令覆盖语法格式:
- ENTRYPOINT ["
"]
CMD ["-f","-h","/data/web/htnl"] ENTRYPOINT ["/bin/httpd"]
Nginx 示例:
- entrypoint.sh
vim entrypoint.sh #!/bin/sh cat >/etc/nginx/conf.d/www.conf << EOF server { server_name $HOSTNAME; listen ${IP:-0.0.0.0}:${PORT:-80}; # 如果未有变量输入将启动默认参数 root ${NGX_ROOT:-/usr/local/nginx/html}; } EOF exec "$@" # 此脚本运行完成后进程将被其所有参数替换
- Dockerfile
FROM nginx:1.18-alpine LABEL author="Brian" ENV NGX_ROOT="/data/nginx/html/" ADD entrypoint.sh /bin/ ADD index.html $NGX_ROOT RUN chmod +x /bin/entrypoint.sh ENTRYPOINT ["/bin/entrypoint.sh"] CMD ["/usr/sbin/nginx","-g","daemon off;"]
- ENTRYPOINT ["
-
HEALTHCHECK
用于容器的健康检查
语法格式:
-
HEALTHCHECK
[options]CMD
options
可以有以下几种:--interval
=<value>
# default 30s--timeout
=<value>
# default 30s--start-period
=<value>
# default 0s—retries
=<value>
# default 3
在容器内部运行命令检查健康状态,检查的结果状态值有以下三种:
0
—succeed
healthy
1
—unhealthy
2
—reserved
-
HEALTHCHECK
NONE
Example:
HEALTHCHECK --interval=5m --timeout=3s --start-period=5s \ CMD wegt -O - -q http://${IP:-0.0.0.0}:{PORT:-80}/ # CMD curl -f http://localhost/ || exit 1
-
-
SHELL
指定默认
shell
来运行命令,Linux
不指定默认是["/bin/sh","-c"]
, Windows 默认不指定是["CMD","/S","/C"]
,SHELL
可以在Dockerfil
中出现多次语法格式:
SHELL
["<command>","<参数>"]
-
STOPSIGNAL
容器接受的unix信号来退出容器
语法格式:
STOPSIGNAL
-
ARG
在
docker build
过程中定义的变量,可以使用--build-arg <key>=<value>
来引入语法格式:
ARG
= ARG author=socifle LABEL maintainer=${author} docker build --build-arg author=westlife -t test:v10 . # 新创建的出来的镜像 maintainer=westlife
-
ONBUILD
用于在
Dockerfile
中定义一个触发器,自己创建的image
被另外一个Dockerfile
用作基础镜像时会执行的指令语法格式:
ONBUILD
<Dockerfile指令>
ONBUILD ADD http://nginx.org/download/nginx-1.19.4.tar.gz /data/nginx/
本文来自博客园,作者:Jas0n0ss,转载请注明原文链接:https://www.cnblogs.com/Jas0n0ss/p/13981145.html