dockerfile构建镜像的命令_每天5分钟|轻松掌握开发必会的docker套路-制作自己的镜像...

b2a0b50359407d29d61e19bf1ac2a78a.png

写在本章前

在开始本章前,想做一个《每天5分钟docker系列》的内容说明。

很多人学习新技术的时候,往往抓不住技术的主线,上来就从手册第一页读到手册的最后一页,结果因为手册上的命令太多,又不知道用在哪儿,导致学的很迷茫,学着学着就放弃了。

35bf4adee607f4b2ac4888dd27a3a11b.png

在下不才,略懂一点docker容器相关知识,希望通过应用的角度给小伙伴们提供一个简单易懂的入门教程。

因此,本系列主要从开发常用的一些lnmp的环境配置说起,然后一点一点的介绍里面用到的命令。

有时候文章中说到的一些操作docker提供了很多种命令实现,但我们只会先说一种常用的,为的是保证大家能够了解这个东西从前到后是怎么玩的。

后面咱们会再慢慢地去覆盖其他的命令,这样可以大大降低大家学习的难度,也希望大家能跟着我这个系列坚持下来。

认识dockerfile

我们之前安装软件,是到docker hub仓库上面去搜索对应的镜像,

比如安装nginx,我们在对应的nginx下的标签列表中找到自己需要的版本的镜像,如果细心一点我们可以看到,如下的内容:

acc782e64a82b1a2e9b73d53356d8cc2.png

上图中,箭头所指向的内容是一串英文,中文意思是:支持的标签和相应的Dockerfile链接。

”标签“ 其实就是对应的我们的nginx镜像的版本,但是这里面说到的Dockerfile链接是什么呢?点击一个链接接试试?

46603b424c8cbc4b4cbe3cfc183e9707.png

点击其中一个标签的链接,便跳转到了github上名称为Dockerfile的文件里面去。

这写着一条条命令的dockerfile和镜像之间有什么关系吗?

Dockfile是专门被Docker程序解析的脚本文件,文件名一般就叫Dockerfile,没有后缀,里面写的一条一条指令,对应着Linux下面的一条条shell命令,Docker程序会将这些Dockerfile指令翻译成真正的Linux命令。

Dockerfile和镜像的关系有点像我们平时写的js,为了压缩js文件的体积,在写完源js文件之后,会执行压缩命令,把js文件压缩,压缩后的js文件体积虽然小,但是打开之后不易读,不好维护,所以我们在代码要修改的时候,还是会修改js源文件,然后再重新生成压缩的js文件。

这里面压缩前的源js文件就好比dockerfile,压缩后的js文件就好比镜像,压缩的命令就好比docker的构建命令。

2366bf005d0e389289242e580b58c371.png

当我们执行docker build命令进行构建的时候,Docker程序将读取Dockerfile里面的内容,根据指令生成相应的镜像。

因此,当我们需要定制自己的镜像时,只需在Dockerfile上添加或者修改部分指令,然后重新生成镜像即可,省去了敲命令的麻烦。

到这里,我们也就明白了,docker hub上面存放着镜像和Dockerfile的github地址这两种,是为了让人们根据自己的需要去下载,想要自定义镜像的可以下载Dockerfile,想要直接快速构建容器可以docker pull 找个镜像。

如何写dockerfile

认识了Dockerfile,那接下来就来看看Dockerfile里面该怎么写吧?

Dockerfile每一行只支持一条指令,且指令需要大写,docker会按照指令从上而下顺序执行。

我们来写一个简单的nginx的Dockerfile文件。

先在一个目录下创建一个名为Dockfile的文件,然后在里面写上下面的内容:

#继承自nginx镜像
FROM nginx
#镜像维护者的姓名和邮箱MAINTAINER 
MAINTAINER laohemanhua<xxxx@qq.com>
#设置容器启动后进入的工作目录WORKDIR 
WORKDIR /usr/share/nginx/html/
#执行创建目录的命令
RUN mkdir ceshi
#执行进入到ceshi文件夹下
RUN cd ceshi
#将宿主机上./ceshi.html文件拷贝到容器中去
COPY ./ceshi.html /usr/share/nginx/html/ceshi

这段Dockfile的指令,咱们依次来解释下:

第一个命令FROM nginx,这里面大写的FROM是docker的一个指令,FROM关键词后面跟的什么就代表当前的基础镜像是什么,FROM nginx就代表当前基础镜像是nginx,继承自nginx镜像,我们就不需要再安装nginx了,当然你也可以写其他的镜像,比如centos系统镜像都行。

这有点像面向对象里面的继承父类的意思。当FROM nginx指令执行的时候,docker会先从本地获取nginx镜像,如果没有,会从远程的docker仓库把这个nginx镜像下载下来。

第二个命令MAINTIANER 这个指令后面跟的是作者的名字和邮箱,当然这个命令你也可以不写

第三个命令WORKDIR 这个指令代表容器启动后进入的工作目录

第四个指令RUN 这个指令代表构建镜像的时候执行哪些shell命令,后面跟的就是shell命令。

第五个指令COPY 这个指令代表我们将宿主机的./ceshi.html文件拷贝到容器中的/usr/share/nginx/html/ceshi目录中去

其实,docker还提供了一些其他的指令,大概十多个,不过这里咱们既然只用到这些,就先说这么多,先入门,了解下怎么玩的,后面咱们再去覆盖其他的命令。

通过Dockerfile构建镜像

既然我们自己创建了Dockfile,如何把它变成镜像呢?不是说执行下docker build就好了吗?

是的,只要执行如下的指令就能用我们的Dockerfile文件构建出镜像:

docker build -t local-nginx-1 .

上述命令说明:

docker build命令用来从Dockerfile文件构建出一个镜像出来,-t代表我们要构建出来的镜像叫啥,上面我们的镜像叫做local-nginx,命令的最后还有一个点号,这个点号代表Dockfile文件所在的目录为当前目录,如果在别的目录需要指定清楚。

效果如下,我们可以看到输出了我们刚刚的每一条命令,在最后显示成功构建:

adfed60e7efd1992f3d374bf6351ba45.png

上图也说明,docker在构建容镜像的时候,确实是一条一条的去解析命令。

然后,我们去查看下镜像是不是真的存在,执行docker images,可以看到,镜像确实已经有了。

0f61cd57c846ae9cfd76410c57509cca.png

至此,我们在nginx这个基础镜像上自定义了一个Dockerfile文件,并基于这个Dockerfile文件构建了我们的镜像也就完成了。

好啦,这就是今天的全部内容,如果您有疑问,可以在下方留言哦~

公众号:老何漫话

id:laohemanhua

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值