专业编程基础技术教程

网站首页 > 基础教程 正文

Dockerfile 应用及详解(dockerfile文件详解)

ccvgpt 2024-07-17 17:50:41 基础教程 12 ℃

dockerfile从字面上来说,简单解释为docker文件,其作用就是用来创建镜像。

众所周知,docker共有仓库里面有非常多的镜像提供用户选择,有很多的镜像都是用户自己上传的,那么怎么来创建一个镜像呢?,docker创建镜像的方式常用的有两种,分别是基于容器构建镜像dockerfile。

Dockerfile 应用及详解(dockerfile文件详解)

创建一个镜像,听着很高级,很有难度,其实说白了就是把官方发布的或者别人弄好的镜像拿来自己改改、升级升级。有点像把巧克力融化了再晾干的过程。

方法一 :基于容器构建镜像 ,可以理解为把一个容器压缩成一个镜像。比如你拉取了一个centos镜像,你创建了容器,进入容器下载数据库,然后把这个容器commit(构建镜像的命令)成镜像,你就得到了一个自带数据库的centos镜像。

提交镜像的命令详解:

docker commit [选项] containerID/containerNAME  [仓库:标签]

选项:-a : 提交镜像的作者

-m :提交时的文字说明

-p : 在commit时,将容器暂停


方法二 :dockerfile 定制镜像,首先说说为什么要使用dockerfile而不是commit,使用 docker commit 意味着所有对镜像的操作都是黑箱操作,生成的镜像也被称为黑箱镜像,换句话说,就是除了制作镜像的人知道执行过什么命令、怎么生成的镜像,别人根本无从得知。而且,即使是这个制作镜像的人,过一段时间后也无法记清具体的操作。虽然 docker diff 或许可以告诉得到一些线索,但是远远不到可以确保生成一致镜像的地步。这种黑箱镜像的维护工作是非常痛苦的。

镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。

这个脚本就是Dockerfile。
Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

下面来举例一个dockerfile

FROM centos  //FROM是必须参数,指定一个基础镜像,scratch是一个特殊镜像,相当于一个白板,是个虚拟的空白的镜像
RUN touch test      //RUN是用来执行命令的命令,例子中执行了touch test 创建了一个test文件

注意: 命令能写成一条尽量写成一条,使用&&将多条命令连接起来,因为镜像是多层储存每一个RUN就是一层,为了避免镜像可用率,维护等,要尽量的简写命令

比如我想以centos为基础镜像,创建一个test文件、并在test文件里面编写“hello world!”

可以这样

FROM centos
RUN touch test 
RUN echo hello world! >> test

也可以这样

FROM centos
RUN touch test && echo hello world!

显然方法二更好,把三层变成了两层。所以大家在编写dockerfile的时候一定要注意这点

Tags:

最近发表
标签列表