dockerfile文件语法命令

(1) FROM命令,支持两种形式,构建新镜像使用的基础镜像,所以源镜像必须存在,并且是非注释的第一条命令。

DOCKERFILEFORM <image>
FORM <image>:<tag> # 示例:
FROM nginx

(2) LABEL和MAINTAINER命令,MAINTAINER用来指定构建镜像的作者信息,新版本docker已经摒弃,使用LABEL可以实现,LABEL保存key=value键值对元数据。

DOCKERFILE# 示例:
# MAINTAINER "vison vison@126.com"
LABEL maintainer="vison vison@126.com"

(3) RUN命令,指定镜像中运行的命令,包含两种模式。

DOCKERFILE# shell模式,相当于命令行的/bin/bash -c command
RUN <COMMAND> # 示例:
RUN echo "hello world" # exec模式,可以指定其他的shell执行指令
RUN ["executable" "param"...] # 示例:
RUN ["/bin" "-c" "echo 'hello world'"]

(4) EXPOSE命令,用来指定运行该镜像使用的端口,可以指定多个端口,但不一定暴露,在docker run中指定参数-P,不需要指定端口,端口就暴露公开了。

EXPOSE <PORT> [<PORT>...]
# 注:虽然在dockerfile里指定了端口,只是告诉docker里的程序会使用该端口,但在运行时docker并不会自动打开该端口,还是需要指定端口映射,例如docker run -d -P ...

(5) CMD和ENTRYPOINT命令,指定容器运行时的默认行为,和RUN命令类似,RUN命令是在镜像构建时执行,而CMD和ENTRYPOINT命令是在容器启动执行。

CMD和ENTRYPOINT相同点:只能写一条,如果写了多条,那么只有最后一条生效,都是在容器启动时执行。

不同点:使用docker run启动容器指定执行命令,CMD命令会被覆盖(不执行),ENTRYPOINT命令不会被覆盖,如果想要覆盖,在docker run加上参数–entrypoint。

CMD和ENTRYPOINT命令格式:

BASHCMD ["executable","param1","param2"] (exec form, this is the preferred form)
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (shell form) ENTRYPOINT ["executable", "param1", "param2"] (exec form, preferred)
ENTRYPOINT command param1 param2 (shell form)

示例:

DOCKERFILE# 只有CMD命令情况
CMD echo "hello world" # 只有ENTRYPOINT命令情况
ENTRYPOINT ["echo", "hello world"] # CMD和ENTRYPOINT都存在情况,CMD作为ENTRYPOINT的参数使用
CMD ["hello world"]
ENTRYPOINT ["echo"]

一般使用entrypoint的中括号形式作为docker 容器启动以后的默认执行命令,里面放的是不变的部分,可变部分比如命令参数可以使用cmd的形式提供默认参数,也就是run里面没有任何参数时使用的默认参数。

(6) COPY和ADD命令,将目录或文件复制镜像中,两者区别是ADD包含了类似tar的解压缩功能,如果只是目录或文件复制,推荐使用COPY。复制目录时需要’/‘结尾,目录不存在会自动创建。

DOCKERFILECOPY <src> <dest>
ADD <src> <dest> # src表示来源地址,可以是本地或网络地址,如果是本地地址,必须是镜像的相对地址(dockerfile为参考路劲)。
# dest表示将文件复制到镜像目标地址,必须是绝对路径。 # 示例:
COPY nginx-1.15.2.tag.gz /data/ # 单纯复制文件
ADD nginx-1.15.2.tag.gz /data/ # 解压复制文件夹

(7) VOLUME命令,在镜像中创建挂载点,只要通过该镜像创建的容器都有了挂载点。

DOCKERFILEVOLUME ["/data1","/data2"]

# 这种方式没有指定宿主机映射,如果使用VOLUME命令构建的新镜像,以该镜像运行2个容器,这两个容器是不能共享数据的,通过执行docker inspect命令得到结果就可以看出映射到宿主机目录完全不一样的,所以两个容器的数据卷不能共享。

Volumes and Dockerfiles Don’t Mix

(8) WORKDIR命令,指定工作目录,CMD或ENTRYPOINT执行的命令都会在WORKDIR目录下执行。

DOCKERFILEWORKDIR <PATH>

# 示例:
WORKDIR /a
WORKDIR b
WORKDIR c
# 最后的工作目录是/a/b/c

WORKDIR通常不使用绝对路劲,使用相对路劲可以一直传递下去。

(9) ENV命令,构建镜像过程和容器运行过程都有效。

DOCKERFILEENV <KEY> <VALUE>
ENV <KEY>=<VALUE> ... # 示例:
ENV hw='hello world'

(10) USER命令,容器启动时以什么用户运行,默认使用root用户。

DOCKERFILEUSER user
USER user:gid
USER user:group USER uid
USER uid:gid
USER uid:group

(11) ONBUILD命令,镜像触发器,当一个镜像被其它镜像作为基础镜像时执行,会在构建过程中插入指令。

DOCKERFILEONBUILD <INSTRUCTION>

# 示例:
ONBUILD COPY copyFile/config /data #在构建基础镜像的dockerfile添加下面命令,实际构建的时候不会执行COPY命令,当构建另一个新镜像并且以该镜像为基础镜像时,会执行COPY命令。

扩展:

docker学习笔记

dockerfile文件语法命令的更多相关文章

  1. Docker镜像构建文件Dockerfile及相关命令介绍

    使用docker build命令或使用Docker Hub的自动构建功能构建Docker镜像时,都需要一个Dockerfile文件.Dockerfile文件是一个由一系列构建指令组成的文本文件,doc ...

  2. docker Dockerfile文件的编写部分命令

    镜像的构建过程:编写dockerfile文件,执行docker build 进行构建镜像,最后docker run 运行容器镜像实例. docker build -t mycentos:1.01 . ...

  3. YAML 模板文件语法

    YAML 模板文件语法 默认的模板文件是 docker-compose.yml,其中定义的每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)来自动构建. 其 ...

  4. Dockerfile文件参数详解

    参考: https://www.jianshu.com/p/e4b31ca37043 https://blog.csdn.net/u010246789/article/details/54139168 ...

  5. docker-compose文件语法解析(v3.x)

    文件配置 compose文件是一个定义服务(service).网络(network)和卷(volume)的YAML文件 .Compose 文件的默认路径是 ./docker-compose.yml 提 ...

  6. DockerFile 编译语法详解

    Dockerfile是一个文本格式的配置文件,用户可以使用Dockerfile来快速创建自定义的镜像,本小结首先介绍Dockerfile典型的基本结构和它支持的众多指令,并具体讲解通过这些指令来编写定 ...

  7. Dockerfile文件万字全面解析

    阅读目录 目录 阅读目录 用法 格式 Parser directives escape 环境替换 .dockerignore file FROM RUN CMD LABEL MAINTAINER EX ...

  8. Docker 之 Dockerfile 常用语法与实战

    1. 概述 老话说的好:超越别人,不如超越自我,每天比昨天的自己更强就好. 言归正传,之前聊了 Docker 的相关知识,今天来聊聊如何编辑 Dockerfile 脚本,来创建我们自己的镜像. 2. ...

  9. Docker学习(六)——Dockerfile文件详解

    Docker学习(六)--Dockerfile文件详解 一.环境介绍 1.Dockerfile中所用的所有文件一定要和Dockerfile文件在同一级父目录下,可以为Dockerfile父目录的子目录 ...

随机推荐

  1. PL/SQL的结构

    PL/SQL Developer是一个集成开发环境,专门开发面向Oracle数据库的应用.PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL).PL/S ...

  2. Oracle与SQL Server等数据库的区别

    Oracle与SQL Server等数据库的区别 在Oracle中提倡使用一个连接 Oracle处理多个并发语句使用一个连接,大大提升系统能支持的并发量 Oracle运行在32为单进程平台上SGA和P ...

  3. Nuxt.js vue init nuxt-community/koa-template 初始化项目报错

    报错提示: Module build failed: Error: Plugin/Preset files are not allowed to export objects, only functi ...

  4. HTTP协议学习总结

    一个web应用程序,往往是通过http协议进行前后端通信的.而作为一个web工程师,掌握HTTP协议因此也是Web开发必备的一项技能了,尤其是在工作了一定年限之后,更是深感该知识点的重要性.因此,将以 ...

  5. 【转】Vsftpd-3.0.2服务器arm-linux移植—mini2440开发板

    Vsftpd-3.0.2服务器arm-linux移植—mini2440开发板 开发板:mini2440(2011.04.21)环境:ubuntu9.10 为方便的将文件上传到开发板,采用vsftpd, ...

  6. docker容器监控:cadvisor+influxdb+grafana

    cadvisor+influxdb+grafana可以实现容器信息获取.存储.显示等容器监控功能,是目前流行的docker监控开源方案. 方案介绍 cadvisor Google开源的用于监控基础设施 ...

  7. SWD烧录/仿真方式

    单片机在烧写/仿真的时候具有一种方式叫做SWD,这种方式只用到两根线SWDIO,SWCLK.一般SWD和JTAG中的JTMS和JTCK共用的.由于线少,所以使用非常方便,但是速率相对较低. 在接线时, ...

  8. OpenStack云计算简介

    1. 云计算的发展 云计算是IT技术不断发展的产物. 要理解云计算,需要对IT系统架构的发展过程有所认识. IT系统架构的发展到目前为止大致可以分为3个阶段: 1> 物理机架构 这一阶段,应用部 ...

  9. nginx证书配一波

    nginx下,拿到crt和key就可以开始干~ 同一个nginx,多个域名,没问题. server { listen 80; listen 443 ssl; server_name www.xxx.c ...

  10. Integer面试连环炮以及源码分析

    场景:   昨天有位朋友去面试,我问他面试问了哪些问题,其中问了Integer相关的问题,以下就是面试官问的问题,还有一些是我对此做了扩展. 问:两个new Integer 128相等吗? 答:不.因 ...