首页 > 其他分享 >Dockerfile

Dockerfile

时间:2022-12-07 12:14:15浏览次数:41  
标签:容器 run CMD nginx ENTRYPOINT docker Dockerfile

 

指令清单:

FROM,定义使用哪个基础镜像来启动构建流程。

MAINTAINER,声明镜像的创建者。

RUN,构建镜像的核心部分,定义需要做哪些事情来构建镜像。

ADD,将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压。

COPY,类似ADD的作用。

WORKDIR,设置当前工作目录,可定义多个,类似cd命令。

VOLUME,设置卷,挂载主机目录。

EXPOSE,指定对外暴露的端口

ENV,设置环境变量。

CMD,指定这个容器启动时候要运行的命令,只有最后一个生效,可被替代。

ENTRYPOINT,指定这个容器启动时候要运行的命令,可追加命令。

详解:

COPY

[--chown=:]:可选参数,用户改变复制到容器内文件的拥有者和属组。

<> COPY [--chown=<user>:<group>] <源路径1>... <目标路径>
<> COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]

ADD

ADD 指令和 COPY 的使用格类似。功能也类似,不同之处如下:

<> ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。

<> COPY的缺点:在不解压的前提下,无法复制 tar 压缩文件。

CMD

类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:

<> CMD 在docker run 时运行。

<> RUN 是在 docker build。

CMD为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。但是,如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。

示例:

<1>,CMD <shell 命令>
<2>,CMD ["<可执行文件或命令>","<param1>","<param2>",...]    //一般使用这种格式
<3>,CMD ["<param1>","<param2>",...]   //该写法是为 “ENTRYPOINT” 指定的程序提供默认参数

ENTRYPOINT

类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指定的程序。但是, 如果运行 docker run 时使用了 --entrypoint 选项,将覆盖 ENTRYPOINT 指定的程序。优点是在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。但需注意,如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。

格式:ENTRYPOINT ["<executeable>","<param1>","<param2>",...]

另外,ENTRYPINT可搭配CMD命令使用,一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参。

示例:

FROM nginx

ENTRYPOINT ["nginx", "-c"]     //定参。不传参运行docker run,容器引用镜像默认的/etc/nginx/nginx.conf启动进程。
CMD ["/etc/nginx/change.conf"]     //变参。传参运行,引用新的conf文件。

<1>,不传参运行:docker run nginx:1.23.2,容器内会默认运行 nginx -c /etc/nginx/nginx.conf 来启动主进程。

<2>,传参运行:docker run nginx:1.32.2 -c /etc/nginx/change.conf ,容器内会默认运行 nginx -c /etc/nginx/change.conf 来启动主进程。

ENV 

设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。

<> ENV <key> <value>
<> ENV <key1>=<value1> <key2>=<value2>...

示例:

ENV MYPATH /usr/local

WORKDIR $MYPATH  

CMD ehco $MYPATH

ARG

构建参数,与 ENV 作用一致。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。

使用构建命令 docker build 时,可以用 --build-arg <参数名>=<值> 来覆盖。

VOLUME

定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷;避免重要的数据,因容器重启而丢失,这是非常致命的; 避免容器不断变大。

格式:

<> VOLUME ["<路径1>", "<路径2>"...]
<> VOLUME <路径>

另外,使用docker run的时候,可以通过 -v 参数修改挂载点。

EXPOSE

申明暴露哪些端口。帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。

格式:EXPOSE <端口1> <端口2>...

WORKDIR

指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在,所以WORKDIR 指定的工作目录,必须是提前创建好的。docker build 构建镜像过程中的每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。

格式:WORKDIR <工作目录路径>

USER

用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)。

格式:USER <用户名>:<用户组>

HEALTHCHECK

用于指定某个程序或者指令来监控 docker 容器服务的运行状态。

<> HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令
<> HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令

<> HEALTHCHECK [选项] CMD <命令> : 这边 CMD 后面跟随的命令使用,可以参考 CMD 的用法。

结束。

标签:容器,run,CMD,nginx,ENTRYPOINT,docker,Dockerfile
From: https://www.cnblogs.com/liusingbon/p/16962692.html

相关文章

  • k8s DockerFile中使用执行linux命令,安装字体
     #字体安装RUNapt-getupdate&&\apt-get-yinstallfontconfigxfonts-utils&&\mkdir-p/usr/share/fonts#复制字体ADDFonts.zip/usr/share/fonts/#wgethttps......
  • Dockerfile与Docker-Compose
    Dockerfile常用命令解析FROM镜像名:镜像版本号//基于基准镜像,不依赖设置为scratchLABEL//说明信息(注释)WORKDIR......
  • Dockerfile自定义镜像
    常见的镜像在DockerHub就能找到,但是我们自己写的项目就必须自己构建镜像了。而要自定义镜像,就必须先了解镜像的结构才行。1.镜像结构镜像是将应用程序及其需要的系统函......
  • Dockerfile自定义镜像、CentOS安装DockerCompose及Docker镜像仓库
    目录​​一、Dockerfile自定义镜像​​​​案例:基于java:8-alpine镜像,将一个Java项目构建为镜像​​​​二、CentOS安装DockerCompose​​​​案例:将cloud-demo微服务集群利......
  • 《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、Dock
    文章目录​​二、高级篇(大厂进阶)​​​​2.DockerFile解析​​​​2.1是什么​​​​2.2DockerFile构建过程解析​​​​2.3DockerFile常用保留字指令​​​​2.4案例......
  • Dockerfile最佳实践
    目录1.一份简单的Dockerfile参考模板2.构建高效镜像生命周期2.1镜像build2.2镜像pull3.常见问题3.1注意Dockerfile中的指令是逐条执行,且相互独立3.2提防“过度”缓存3.3ARG......
  • 001 Dockerfile的基础
    由于linux操作系统的版本不支持安装docker重新安装系统后可能之前的服务就不能用了,所以直接找了台已经安装好的服务器172.16.70.49-docker用户名:root密码:xxxx  ......
  • Dockerfile
    DockerfileFROM:指定基础镜像WORKDIR:指定工作目录,不存在则自动创建COPY:将源路径的文件复制到镜像目标路径,类似的有ADD命令ENV:用来设置编译阶段需要的环境变量RUN:执行命......
  • 高效率编写Dockerfile
    前言在日常的开发和运维中,我们时长会使用Dockerfile脚本制作镜像。其实编写一个Dockerfile文件用到的标签并不会太多,但是不同的Dockerfile在制作后产生的镜像大小是不尽相......
  • 二. Dockerfile构建镜像参数详解、Docker镜像分层构建案例 -1
    镜像简介: docker镜像基于unionfilesystem将多个目录合并挂载至一个目录给容器使用。docker镜像只有rootfs而没有内核、运行使用的是宿主机的bootfs。  rootfs(root......