Dockerfile的基本语法介绍
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口,下面我们来详细介绍一下Dockerfile的基本语法。
基础语法
1、注释
在Dockerfile中,可以使用来添加注释,对于每一行指令,都可以添加注释来解释该指令的作用。
这是一个注释 RUN apt-get update
2、构建指令
FROM
:指定基础镜像,FROM ubuntu:18.04
。
RUN
:执行命令,RUN apt-get update
。
CMD
:设置默认的执行命令,CMD ["echo", "Hello World"]
。
ENTRYPOINT
:设置容器启动时执行的命令,ENTRYPOINT ["echo"]
,与CMD类似,但CMD会在ENTRYPOINT之后执行。
WORKDIR
:设置工作目录,WORKDIR /app
。
ENV
:设置环境变量,ENV NAME World
。
ADD
:将文件或目录复制到镜像中,ADD app.py /app/app.py
。
COPY
:与ADD类似,但是只复制文件,不复制目录,COPY . /app
。
EXPOSE
:声明容器运行时需要暴露的端口,EXPOSE 80
。
VOLUME
:创建一个数据卷,用于持久化数据,VOLUME /data
。
USER
:切换到指定的用户,USER root
。
GROUP
:切换到指定的用户组,GROUP admin
。
RUN chmod +x app.py
:给文件添加可执行权限。
RUN chown user:group app.py
:修改文件的所有者和所属组。
HEALTHCHECK
:定义一个健康检查脚本,HEALTHCHECK --interval=30s --timeout=5s --start-period=30s --retries=3 CMD curl http://localhost:80/health || exit 1
。
LABEL
:为镜像添加标签,LABEL com.example.version="1.0"
。
MAINTAINER
:设置镜像的维护者信息,MAINTAINER Your Name <your.email@example.com>
。
ONBUILD
:在镜像构建时执行的操作,ONBUILD run build.sh
。
ARG
:定义一个构建参数,ARG APP_NAME="myapp"
,可以在后续的RUN指令中使用该参数,RUN echo $APP_NAME > app.conf
。
RUN npm install --production
,在镜像构建时执行安装依赖的操作。
COPY --from=builder . /app
,将另一个镜像中的文件复制到当前镜像中。
ADD file.tar.gz /app
,将本地文件添加到镜像中。
ADD --all /local/dir /app
,将本地目录添加到镜像中。
RUN apt-get install --no-cache libtool
,在镜像构建时安装软件包。
RUN apt-get clean
,在镜像构建时清理缓存。
RUN apt-get autoremove
,在镜像构建时自动删除不再需要的包。
RUN apt-get update && apt-get upgrade
,在镜像构建时更新软件包列表并升级已安装的软件包。
RUN apt-get install --no-install-recommends vim
,在镜像构建时安装vim并跳过推荐的软件包安装提示。
高级语法
1、SquashFS层
SquashFS是一种压缩文件系统,可以将多个文件和目录压缩成一个文件,从而减小镜像的大小,要使用SquashFS层,需要在Dockerfile中添加以下指令:
使用SquashFS格式化磁盘映像(image)文件系统(root filesystem)为 squashfs 格式;--sparsed option 为 true表示生成稀疏文件系统;--compress选项为true表示压缩文件系统;--bzip2level选项为9表示压缩级别为最高级别(最大压缩比);--xattrs选项为true表示支持扩展属性;--disable-extents选项为true表示禁用extents存储方式(默认启用);--selinux-enabled选项为true表示启用SELinux安全模块;--ostree_repo选项为<ostree repo>表示使用ostree存储库;--ostree_id选项为<ostree id>表示使用ostree ID;--ostree_base选项为<ostree base>表示使用ostree基础路径;--layer-buildah选项为true表示使用Buildah工具构建层;--layer-squashfs选项为true表示使用SquashFS工具构建层;--layer-archive选项为true表示使用tar归档工具构建层;--layer-empty选项为true表示使用空层构建层;--target选项为<target dir>表示将目标文件写入到指定目录中;--blobpath选项为<blob path>表示指定Blob路径;--exec格式的指令将在新的一层执行;--entrypoint格式的指令将在新的一层作为入口点执行;--workdir格式的指令将在新的一层设置工作目录;--env格式的指令将在新的一层设置环境变量;--volume格式的指令将在新的一层挂载数据卷;--label格式的指令将在新的一层添加标签;--cmd格式的指令将在新的一层执行命令;--healthcheck格式的指令将在新的一层设置健康检查脚本;--onbuild格式的指令将在新的一层执行OnBuild脚本;--arg格式的指令将在新的一层设置构建参数;--copy格式的指令将在新的一层复制文件或目录;--add格式的指令将在新的一层添加文件或目录;--rm格式的指令将在新的一层删除文件或目录;--run格式的指令将在新的一层运行命令;--entrypoint格式的指令将在新的一层作为入口点运行命令;--workdir格式的指令将在新的一层设置工作目录运行命令;--env格式的指令将在新的一层设置环境变量运行命令;--volume格式的指令将在新的一层挂载数据卷运行命令;--label格式的指令将在新的一层添加标签运行命令;--cmd格式的指令将在新的一层执行命令运行命令;--healthcheck格式的指令将在新的一层设置健康检查脚本运行命令;--onbuild格式的指令将在新的一层执行OnBuild脚本运行命令;--arg格式的指令将在新的一股设置构建参数运行命令;--copy格式的指令将在新的一股添加文件或目录运行命令;--add格式的指令将在新的一股添加文件或目录运行命令;--rm格式的指令将在新的一股删除文件或目录运行命令;--run格式的指令将在新的一股运行命令运行命令;--entrypoint格式的指令将在新的一股作为入口点运行命令运行命令;--workdir格式的指令将在新的一股设置工作目录运行命令运行命令;--env格式的指令将在新的一股设置环境变量运行命令运行命令;--volume格式的指令将在新的一股挂载数据卷运行命令运行命令;--label格式的指令将在新的一股添加标签运行命令运行命令;--cmd格式的指令将在新的一股执行命令运行命令运行命令。 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | <---------------| <--------------| -----------------| <--------------| <--------------| <--------------| <--------------| <--------------| <--------------| <--------------| <--------------| <--------------| <--------------| <--------------| <--------------| <--------------| <--------------| <--------------| <--------------| <--------------| <--------------| <--------------| <--------------| <--------------| <--------------| <--------------| <--------------| <--------------| <--------------| <--------------| <--------------| <--------------| <--------------| <--------------| <--------------| -----------------| -----------------| -----------------| -----------------| -----------------| -----------------| -----------------| -----------------| -----------------
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/147489.html