Docker基本命令与使用 —— Dockerfile指令与构建(三)

一.Dockerfile指令上

1.指令格式

# Comment 注释, 以#开头

INSTRUCTION argument 以大写的指令+参数

#First Dockerfile 注释

FROM ubuntu:14.04

MAINTAINER dormancypress "[email protected]"

RUN apt-get update

RUN apt-get install -y nginx

EXPOSE 80

  • From
  • MAINTAINER
  • RUN
  • EXPOSE

FROM指令

FROM <image> / FROM <image>:<tag>

  • 已经存在的镜像
  • 基础镜像
  • 必须是第一条非注释指令

MAINTAINER指令

MAINTAINER <name>

指定镜像的作者信息,包含镜像的所有者和联系信息

RUN指令

指定当前镜像中运行的命令,包含了两种命令模式

  • RUN<command> (shell模式)

是以 /bin/sh -c command 形式执行命令

eg. RUN echo hello

  • RUN ["executable", "param1", "param2" ] (exec模式)

RUN ["/bin/bash", "-c", "echo hello"]

镜像分层的概念,每一个run指令都会在当前镜像的上层创建一个新的镜像,来运行指定的命令

RUN apt-get update && apt-get install -y nginx 将两条run指令合并成一条,会比原来的构建过程少了一步

EXPOSE指令

EXPOSE <port>[<port>...]

指定运行该镜像的容器使用的端口,一个或多个,也可以在一个dockerfile中使用多个expose命令。但是在run一个容器时,还是必须指定容器的端口映射,如 docker run -p 80 -d test1 nginx。EXPOSE指令只是docker该容器内的应用程序会使用特定的端口,但出于安全的考虑,docker并不会自动的打开端口,而需要在使用时在run命令中添加对端口的映射。

二.Dockerfile指令下

  • CMD 在容器运行时运行的命令
  • ENTERYPOINT
  • ADD 设置镜像的目录和文件
  • COPY
  • VOLUME
  • WORKDIR 镜像在构建及容器运行时的环境设置
  • ENV
  • USER
  • ONBUILD 类似触发器的指令

CMD指令

CMD指令用来提供容器默认运行的命令,与RUN类似,但是RUN是在镜像构建时运行的,而CMD指定的命令是在容器运行时运行的。并且当我们用docker run 命令启动一个容器时,如果指定了容器运行时的命令,那么CMD命令中的指令会被覆盖,不会执行。CMD指令是用来指定容器运行时的默认行为。

  • CMD [ "executable", "param1", "param2"] (exec模式)
  • CMD command param1 param2 (shell模式)
  • CMD [ "param1", "param2"] (作为ENTRYPOINT指令的默认参数)

ENTRYPOINT指令

ENTRYPOINT指令和CMD指令很相似,唯一的区别就是不会被docker run 命令中的指令所覆盖(run中的指令无效)。如需覆盖,可以使用docker run --entrypoint。

  • ENTRYPOINT [ "executable", "param1", "param2"] (exec模式)
  • ENTRYPOINT command param1 param2 (shell模式)

ADD指令

将文件和目录复制到使用docker构建的镜像中。文件或者目录的来源可以是本地路径,也可以是远程的URL。如果是本地地址必须是构建目录中的相对地址,对于远程URL,Docker不推荐使用,更建议使用curl和wget命令来获取文件。目标路径需要指定镜像中的绝对路径。

  • ADD <src>...<dest>
  • ADD ["<src>"..."<dest>"] (适用于文件路径中有空格的情况)

COPY指令

类似ADD指令。区别在于ADD包含类似tar的解压功能,如果单纯复制文件,docker推荐使用COPY。

  • COPY <src>...<dest>
  • COPY ["<src>"..."<dest>"] (适用于文件路径中有空格的情况)

eg. COPY index.html /usr/share/nginx/html/

VOLUME指令

VOLUME指令用来向基于镜像创建的容器添加卷。这个目录可以绕过联合文件系统,并提供如共享数据或者对数据持久化的功能。

  • VOLUME ["/data"]

WORKDIR指令

用来在从镜像创建一个新容器时,在容器内部设置工作目录。ENTERYPOINT或者CMD指定的命令都会在这个目录下执行,我们也可以使用这个指令在构建中为后续的指令指定工作目录。

  • WORKDIR /path/to/workdir

需要注意的是WORKDIR通常需要指定绝对路径,如果使用了相对路径,那么工作路径会一直传递下去。如

WORKDIR /a

WORKDIR b

WORKDIR c

RUN pwd

OUT: /a/b/c

ENV指令

用来设置环境变量,与WORKDIR指令类似。环境变量的指令可以作用在构建过程中,以及在运行过程中同样有效。

  • ENV <key> <value>
  • ENV <key> <Value> ...

USER指令

用来指定镜像会以什么样的用户运行。

  • USER daemon

eg. USER nginx 基于该镜像启用的容器,就会以nginx用户身份来运行。

USER user USER uid

USER user:group USER uid:gid

USER user:gid USER uid:group

如果不使用USER指令来指定用户,那么默认会使用root用户。

ONBUILD指令

ONBUILD指令能够为镜像添加触发器,当一个镜像被用作其他镜像的基础镜像时,这个触发器会被执行。当子镜像在构建时,会触发触发器中的指令。

  • ONBUILD [INSTRUCTION]

三.Dockerfile构建过程

  • 从基础镜像运行一个容器
  • 执行一条指令,对容器做出修改
  • 执行类似docker commit的操作,提交一个新的镜像层
  • 再基于刚提交的镜像运行一个新容器
  • 执行Dockerfile中的下一条指令,直至所有指令执行完毕

使用中间层镜像进行调试 —— 查找错误

构建缓存

不使用缓存

  • docker build --no-cache
  • Dockerfile 中的 ENV REFRESH_DATE 2015-04-01 之后变不再使用缓存

查看镜像构建的过程

  • docker history [image]
时间: 2024-10-11 02:55:37

Docker基本命令与使用 —— Dockerfile指令与构建(三)的相关文章

Docker容器学习梳理-Dockerfile构建镜像

在Docker的运用中,从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一 种文件或脚本,我们把想执行的操作以命令的方式写入其中,然后让docker读取并分析.执行,那么重复构建.更新将变得很方便,所以Dockerfile就此诞生了.Docker提供了Dockerfile作为构建Docker镜像脚本,避免人们一行一行的输入,真是善莫大焉.Dockerfile脚本可以做到随时维护修改,即可以分享,更有利于在模板化,更不用说传

docker学习笔记17:Dockerfile 指令 ONBUILD介绍

ONBUILD指令可以为镜像添加触发器.其参数是任意一个Dockerfile 指令. 当我们在一个Dockerfile文件中加上ONBUILD指令,该指令对利用该Dockerfile构建镜像(比如为A镜像)不会产生实质性影响. 但是当我们编写一个新的Dockerfile文件来基于A镜像构建一个镜像(比如为B镜像)时,这时构造A镜像的Dockerfile文件中的ONBUILD指令就生效了,在构建B镜像的过程中,首先会执行ONBUILD指令指定的指令,然后才会执行其它指令. 需要注意的是,如果是再利

Docker Dockerfile 指令

Dockerfile 指令 CMD CMD指令用于指定一个容器启动时要运行的命令.这有点儿类似于RUN指令,只是RUN指令是指定镜像被构建时要运行的命令,而CMD是指定容器被启动时要运行的命令.这和使用docker run命令启动容器时指定要运行的命令非常类似 $ sudo docker run -i -t jamtur01/static_web /bin/true 可以认为上述命令和在Dockerfile中使用如下的CMD 指令是等效的. CMD ["/bin/true"] 选项和命

6.9 docker(一) Dockerfile 指令详解

Dockerfile 指令详解 COPY 复制文件 格式: COPY [--chown=<user>:<group>] <源路径>... <目标路径> COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"] 一种类似于命令行,一种类似于函数调用 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路

docker 应用-2(Dockerfile 编写以及镜像保存提交)

我们可以从docker hub上pull别人的镜像,也可以将容器进行修改,然后commit镜像,并把镜像push到docker hub上被被人使用.但是,直接pull或者push镜像的方式太过笨重,尤其在镜像体积很大的时候. Dockerfile就可以让我们用写脚本的方式自动化构建镜像,避免对容器修改+提交的方式构建镜像,也可以让我们不用每次都耗时耗力的pull一个远程镜像. Dockerfile的编写 直接看官方文档吧:https://docs.docker.com/engine/refere

dockerfile指令介绍

DOCKERFILE指令:CMD,ENTRYPOINT,ADD,COPY,VOLUME,WORKDIR,USER,ONBUILD,ENV等 1.CMD:用于指定一个容器启动时要运行的命令.类似于RUN指令,只是RUN指令是指定镜像被构建时的命令,而CMD是指容器被启动时要运行的命令 docker run -i -t zhoufujin/apache  /bin/true 和  CMD ["/bin/true"] 等效 这里需要注意:使用docker run命令可以覆盖CMD指令.如果我

dockerfile指令汇总

dockerfile指令汇总 1.cmd 指定一个容器启动时可用的指令或指令和参数. cmd ["/bin/true"] cmd["/bin/bash","-l"] 注意:docker run会覆盖cmd命令:深刻理解cmd和entrypoint之间的相互作用也是十分重要的:容器里只能指定一条cmd指令,如果需要启动容器的时候运行多个进程或者命令,考虑使用supervisor服务管理工具. 2.entrypoint docker run执行的指令

Dockerfile 指令汇总及解析

原文地址:http://www.maoyupeng.com/dockerfile-command-introduction.html 什么是Dockerfile Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像.它们简化了从头到尾的流程并极大的简化了部署工作.Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数.其产出为一个新的可以用于创建容器的镜像. 当你在使用 Docker构建镜像的时候,每一个命令都会在前一个命令的基础上形

docker 实践六:dockerfile 详解

本篇开始来学习关于 dockerfile 的知识. 注:环境为 CentOS7,docker 19.03. dockerfile 是?个?本格式的配置?件, ?户可以使? dockerfile 来快速创建?定义的镜像. 指令系统 dockerfile 主要是通过一个指令来实现想要的功能的.dockerfile 支持的指令如下 ARG 定义创建镜像过程中使?的变量.格式为: ARG<name>[=<default value>] 在执?docker build时, 可以通过 -bui