Dockerfile只是一个文本文件,它记录了构建容器映像的所有步骤。其格式如下:

#评论
指令参数

要构建上一篇文章中的“ubuntu with vim”映像,我们可以使用以下“Dockerfile”`

来自ubuntu
运行apt-get-update&&apt-get-install-y vim

要构建它,请运行以下命令

$docker build-t ubuntu和vim。
[+]建筑物16.9s(6/6)完工
->[内部]从Dockerfile 0.1s加载生成定义
->->正在传输dockerfile:99B 0.0s
->[内部]负载。dockerignore 0.1s
->->传输上下文:2B 0.0s
->[内部]加载docker的元数据。io/library/ubuntu:最新版本0.0s
->从docker缓存[1/2]。io/library/ubuntu 0.0s
->[2/2]运行apt get更新和apt get安装-y vim 15.2s
->导出到图像1.5s
->->导出图层1.5s
->->写入图像sha256:0CFEA7969D1508CB0988FCB620E78E7D2A60BF86AF2370ECCAA668CCD4C5F42 0.0s
->->向docker命名。带vim 0.0s的io/library/ubutu

运行它

$docker run-it ubuntu与vim
[email protected]:/#which vim
/usr/bin/vim

docker建造

让我们回顾一下build命令:

$docker build-t ubuntu和vim。

*-t:命名新图像

  • . : 将生成上下文指定为当前目录。默认情况下,Docker将从构建上下文中找到’Dockerfile',我们还可以通过参数'-f’指定’Dockerfile’的位置。 按下“Enter”键后,Docker将构建上下文中的所有文件发送到Docker守护进程。构建上下文提供构建映像所需的文件或目录。 构建过程

*构建由Docker守护进程运行,而不是由CLI运行。构建过程要做的第一件事是(递归地)将整个上下文发送到守护进程。在大多数情况下,最好从一个空目录作为上下文开始,并将“Dockerfile”保存在该目录中。仅添加生成“Dockerfile”所需的文件。 *要在生成上下文中使用文件,Dockerfile引用指令中指定的文件,例如COPY指令。若要提高生成的性能,请通过添加来排除文件和目录。dockerginore文件到上下文目录。 *在’Dockerfile’中执行’FROM’命令,并使用’ubuntu’作为基本镜像。 ubuntu映像ID为“ba6accedd29”。

$docker图像ubuntu
创建的存储库标记图像ID大小
ubuntu最新版本ba6acccedd29 2个月前为72.8MB

*您还可以标记多个存储库:

$docker build-t ubuntu-with-vim-1-t ubuntu-with-vim-2。

*Docker守护进程逐个运行“Dockerfile”中的指令,如有必要,在最终输出新映像的ID之前,将每条指令的结果提交给新映像。Docker守护进程将自动清理您发送的上下文。 *只要有可能,Docker都会使用构建缓存来显著加快“Docker构建”过程。这由控制台输出中的“CACHED”消息表示。例如:

从docker缓存[1/2]。io/library/ubuntu

通用Dockerfile指令

*FROM:初始化新的生成阶段并设置基本映像。有效的’Dockerfile’必须以’FROM’开头 *LABEL`:将元数据添加到图像中

$docker图像-f“标签-label1-value1”
创建的存储库标记图像ID大小
ubuntu-with-vim-1最新版本8609a08723ab 16小时前173MB

ENV:将环境变量<key>设置为值<value> ADD:它从<src>复制新文件、目录或远程文件URL,并将它们添加到路径<dest>处的映像文件系统中。注意:如果“”是一个可识别压缩格式(identity、gzip、bzip2或xz)的本地tar存档,那么它将被解压为一个目录,但是,来自远程URL的资源将不会被解压 *COPY:它从<src>复制新文件或目录,并将它们添加到路径<dest> *ENTRYPOINT:它允许您配置将作为可执行文件运行的容器,您可以看到top是下面唯一正在运行的进程:

多克来福枪:
来自ubuntu
要测试的入口点[“顶部”,“-b”]:
$docker run-it ubuntu-with-vim-1
top-14:43:04最多36分钟,0个用户,平均负载:0.16、0.03、0.01
任务:总共1个,1个正在运行,0个正在睡眠,0个停止,0个僵尸
%Cpu:0.0US、0.0SY、0.0NI、96.8ID、3.2WA、0.0HI、0.0SI、0.0ST
MiB Mem:1986.2总计,760.6空闲,222.1使用,1003.4缓冲/缓存
MiB交换:总计1024.0,可用1024.0,使用0.0。1259.8 avail MemPID USER PR NI VIRT RES SHR S%CPU%MEM TIME+命令
1根20 0 5976 3120 2700 R 0.0 0.2 0:00.04顶部

*CMD:它为正在执行的容器提供默认值。这些默认值可以包括可执行文件,也可以省略可执行文件,在这种情况下,您还必须指定“ENTRYPOINT”指令。建议使用“ENTRYPOINT”定义容器应用,使用“CMD”定义参数 *WORKDIR:它为Dockerfile中的任何RUNCMDENTRYPOINTCOPYADD指令设置工作目录 *USER:它设置用户名(或UID)和可选的用户组(或GID),以便在运行映像时以及在Dockerfile中为其后的任何RUNCMDENTRYPOINT指令使用 *VOLUME:它使用指定的名称创建一个装入点,并将其标记为保存从本机主机或其他容器外部装入的卷。