美文网首页
Docker指令

Docker指令

作者: G_YDG | 来源:发表于2019-10-14 10:35 被阅读0次

FROM 指定基础镜像 

    所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制。就像我们之前运行了一个redis镜像的容器,再进行修改一样,基础镜像是必须指定的。而 FROM 就是指定基础镜像,因此一个 Dockerfile 中 FROM 是必备的指令,并且必须是第一条指令。 在 Docker Store 上有非常多的高质量的官方镜像,有可以直接拿来使用的服务类的镜像,如nginx 、 redis 、 mongo 、 mysql 、 httpd 、 php 、 tomcat 等;如果没有找到对应服务的镜像,官方镜像中还提供了一些更为基础的操作系统镜像, 如ubuntu 、 debian 、 centos、 alpine 等这些操作系统的软件库 。

    除了选择现有镜像为基础镜像外,Docker 还存在一个特殊的镜像,名为 scratch。这个镜像是虚拟的概念,并不实际存在,它表示一个空白的镜像。如果你以 scratch 为基础镜像的话,意味着你不以任何镜像为基础,接下来所写的指令将作为镜像第一层开始存在。

RUN 执行命令

    RUN 指令是用来执行命令行命令的,在定制镜像时是最常用的指令之一

格式:

shell 格式:RUN <命令>,就像直接在命令行中输入的命令一样。

示例:RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html

exec 格式:RUN ["可执行文件", "参数1", "参数2"],这更像是函数调用中的格式

注意:

(1)Dockerfile 中每一个指令都会建立一层,应尽量合并相同或相关命令

COPY 复制文件

    COPY 指令将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置

格式:

COPY <源路径>... <目标路径>

COPY ["<源路径1>",... "<目标路径>"]

注意:

(1)<目标路径> 可以是容器内的绝对路径,也可以是相对于工作目录的相对路径(工作目录可以用 WORKDIR 指令来指定)。目标路径不需要事先创建,如果目录不存在会在复制文件前先行创建缺失目录;

(2)若需改变文件的所属用户及所属组,可以加上 --chown=<user>:<group>选项,COPY [--chown=<user>:<group>] <源路径>... <目标路径>;

ADD 更高级的复制文件

格式:与上列COPY格式相同

注意:

(1)如果 <源路径> 为一个 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,ADD 指令将会自动解压缩这个压缩文件到 <目标路径> 去;

(2)ADD 包含了更复杂的功能,其行为不是很清晰。最适合使用 ADD 的场合,就是需要自动解压缩的场合。其余场合应尽量使用COPY命令;

(3)ADD 指令会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢;

CMD 容器启动命令

    用于指定容器启动时执行的命令

格式:

exec 格式(推荐方式):CMD ["可执行文件", "参数1", "参数2"...]

示例:CMD ["executable","param1","param2"]

shell 格式:CMD <命令>

示例:CMD command param1 param2

参数列表格式:CMD ["参数1", "参数2"...]。在指定了 ENTRYPOINT 指令后,用 CMD 指定具体的参数

示例: CMD ["param1","param2"] 提供给ENTERYPOINT的默认参数

注意:

(1)每个Dockerfile只能有一个CMD命令,多个CMD命令只执行最后一个。若容器启动时指定了运行的命令,则会覆盖掉CMD中指定的命令;

ENV 设置环境变量

    设置环境变量

格式:

ENV <key> <value>

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

注意:

(1)设置环境变量后,支持环境变量的指令可直接使用所定义的环境变量。支持环境变量的指令:ADD、COPY、ENV、EXPOSE、LABEL、USER、WORKDIR、VOLUME、STOPSIGNAL、ONBUILD;

ARG 构建参数

    构建参数

格式:

ARG <参数名>[=<默认值>]

注意:

(1)构建参数和 ENV 的效果一样,都是设置环境变量。所不同的是,ARG 所设置的构建环境的环境变量,在将来容器运行时是不会存在这些环境变量的。但是不要因此就使用 ARG 保存密码之类的信息,因为 docker history 还是可以看到所有值的;

(2)Dockerfile 中的 ARG 指令是定义参数名称,以及定义其默认值。该默认值可以在构建命令 docker build 中用 --build-arg <参数名>=<值> 来覆盖;

VOLUME 定义匿名卷

    定义匿名卷。在容器运行时,我们应该尽量保持容器存储层不发生写操作,对于数据库类需要保存动态数据的应用,其数据库文件应该保存于卷(volume)中,为了防止运行时用户忘记将动态文件所保存目录挂载为卷,在 Dockerfile 中,我们可以事先指定某些目录挂载为匿名卷,这样在运行时如果用户不指定挂载,其应用也可以正常运行,不会向容器存储层写入大量数据。
格式:

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

VOLUME <路径>

EXPOSE 声明端口

    声明运行时容器提供服务端口

格式:

EXPOSE <端口1> [<端口2>...]

注意:

(1)在运行时使用随机端口映射时,也就是 docker run -P时,会自动随机映射 EXPOSE 的端口;

(2)要将 EXPOSE 和在运行时使用 -p <宿主端口>:<容器端口> 区分开来。-p,是映射宿主端口和容器端口,换句话说,就是将容器的对应端口服务公开给外界访问,而 EXPOSE 仅仅是声明容器打算使用什么端口而已,并不会自动在宿主进行端口映射

WORKDIR 指定工作目录

    指定工作目录(或者称为当前目录),以后各层的当前目录就被改为指定的目录,如该目录不存在,WORKDIR 会帮你建立目录

格式: 

WORKDIR <工作目录路径>

注意:

(1)为后续的RUN CMD ENTRYPOINT指定配置工作目录,可以使用多个WORKDIR指令,若后续指令用的是相对路径,则会基于之前的命令指定路径;


更多Dockerfile 指令与详解参考文章

Docker-从入门到实践 https://yeasy.gitbooks.io/docker_practice/image/dockerfile/ 

相关文章

  • Docker基础(2) 实践篇

    Docker基础(2) 实践篇 Docker的指令系统 全局指令 Docker仓库管理 Docker镜像管理Doc...

  • Docker社区版使用笔记

    支持作者 Docker指令说明 本文指令不全,如果你想看全部指令 docker --help 某条指令具体使用方法...

  • Docker

    常用指令1.docker ps & docker images 这个没什么好说的,常用指令 2.docker st...

  • docker 学习笔记

    基本指令docker version 和 docker info:查看docker信息docker search ...

  • Docker端口映射与进入容器内部

    端口映射的指令是什么? docker指令:docker run -p ip:hostPort:containe...

  • 小白学Docker<二>

    小白学Docker<一> 4.Docker file常用指令 指令的一般格式为 指令名称 参数 。 FROM 支...

  • docker(1)

    基础 基本指令 基本指令docker search 搜索源同gitdocker pull 下载源docker i...

  • Docker

    构建docker指令

  • docker常用指令

    Docker常用指令

  • Docker学习

    1 Docker指令 docker info 查看docker信息 docker run 创建一个docker容器...

网友评论

      本文标题:Docker指令

      本文链接:https://www.haomeiwen.com/subject/wimquctx.html