网站首页 > 技术文章 正文
dockerfile从字面上来说,简单解释为docker文件,其作用就是用来创建镜像。
众所周知,docker共有仓库里面有非常多的镜像提供用户选择,有很多的镜像都是用户自己上传的,那么怎么来创建一个镜像呢?,docker创建镜像的方式常用的有两种,分别是基于容器构建镜像和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的时候一定要注意这点
猜你喜欢
- 2024-09-27 【容器篇】认识Dockerfile dockerfile示例
- 2024-09-27 Dockerfile常用指令大全及详解 dockerfile中最常见的指令是什么
- 2024-09-27 阿里云Docker/Kubernetes(K8S) 日志解决方案与选型对比
- 2024-09-27 Docker 镜像构建之 Dockerfile docker镜像在哪个文件夹
- 2024-09-27 docker进击之Dockerfile最佳实践 dockersfile
- 2024-09-27 Dockerfile简单使用 dockerfile示例
- 2024-09-27 Dockerfile你值得拥有 dockerfile sh
- 2024-09-27 DockerFile文件详解 dockerfile文件详解java
- 2024-09-27 Docker实战九之Docker Dockerfile
- 2024-09-27 Docker篇(三):Dockerfile实战开启
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)