为了账号安全,请及时绑定邮箱和手机立即绑定

Dockerfile介绍及常用保留指令

标签:
Java

从本文开始,咱们将介绍docker的另外一个技术点:dockerfile.我们来看看DockerFile相关的知识点,我们将怎么学习?

1:DockerFile是什么?

2:DockerFile构建过程解析

3:常用的保留字指令

4:案例及小总结。如下图:

https://img2.sycdn.imooc.com/63a51af600016fb305530247.jpg

dockerFile是什么?

DockerFile是用来构建Docker镜像的文本文件。是由一条条构建镜像所需要的指令和参数构成的脚本。

dockerFile工作图:

https://img4.sycdn.imooc.com/63a51b830001ce7805530395.jpg

构建步骤:

编写DockerFile文件>>docker build命令构建镜像>>docker run 镜像运行

DcokerFile构建过程

1:DockerFile内容基础知识

a、每条保留字指令都必须为大写字母且后面要跟随至少一个参数

b、指令按照从上到下的顺序执行

c、#表示注释

d、每条指令都会创建一个新的镜像层并对镜像进行提交

 

Dcoker执行DockerFile的大致流程

1:docker从基础镜像运行一个容器

2:执行一条指令并对容器做出修改

3:执行类似docker commit的操作提交一个新的镜像层

4:docker再基于刚提交的镜像运行一个新容器

5:执行dockerFile中的下一条执行直到所有指令都执行完成。

DockerFile、Docker镜像与Docker容器之间的关系:

从应用软件的角度来看,这三者分别代表了软件的三个不同阶段:

Dockerfile:是软件的原材料;

Docker镜像:是软件的交付产品;

Docker容器则可以认为是软件镜像的运行状态,也就是依照镜像运行的容器实例。

DockerFile是面向开发,Docker镜像成为交付的标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当了docker体系的基石。

DockerFile:需要定义饿Dockerfile,Dockerfile定义二了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时候环境、动态链接库、操作系统的发行版、服务进程和内核进程等等;

Docker镜像,在用Dockerfile定义一个文件之后,docker build时候会产生一个Docker镜像,当运行Docker镜像时会真正开始提供服务;

Docker容器,容器是直接提供服务的。

https://img3.sycdn.imooc.com/63a51bf900012d2a05530222.jpg

https://img2.sycdn.imooc.com/63a51bfe000100f405530217.jpg

接着,咱们来讲解DockerFile常用的保留指令。常用的指令如下图:

https://img4.sycdn.imooc.com/63a51c080001f34005530300.jpg

参数说明:

https://img1.sycdn.imooc.com/63a51c530001fe2205530276.jpg

https://img1.sycdn.imooc.com/63a51c5b0001b77c05530175.jpg

参数

说明

备注

FROM

基础镜像。当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板。第一条必须是from

出现位置:一般都是在dockerfile的第一行。 当前镜像哪个基础镜像

MAINTAINER

镜像维护者的姓名和邮箱地址


RUN

https://img2.sycdn.imooc.com/63a51c5c0001dc1f01950063.jpg

shell格式: RUN<命令行命令> #<命令行命令>等同于,在终端操作的shell命令。 例如:RUN yum -y install vim  exec格式: RUN["可执行文件","参数1","参数2"] #例如: #RUN   ["./test.php","dev","offline"] 等价于 RUN ./test.php dev offline

EXPOSE

当前容器队尾暴露出的端口


WORKDIR

指定在创建容器后,终端默认登录的进入工作目录。一个落脚点

例如: docker -it ubuntu bash 进入后,pwd.可以发现是 / 的

USER

指定该镜像以什么样的用户去执行。如果不指定,默认是root


ENV

用来在构建镜像过程中设置的环境变量

https://img1.sycdn.imooc.com/63a51c680001bc5901950045.jpg

ADD

将宿主机目录下的文件拷贝进镜像且会自动处理url和解压tar压缩包


COPY

类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<源路径>的文件/目录   复制到新的一层镜像内的<目标路径>

https://img3.sycdn.imooc.com/63a51c6e00010be001950032.jpg

VOLUME

容器数据卷,用于数据保存和持久化工作


CMD

见下文CMD命令

CMD和RUN命令的区别: CMD是在docker run时候运行的 RUN是在docker build是运行的

ENTRYPOINT

见下文的ENTRYPOIN命令


CMD命令:

指定容器启动后要干的事情。

CMD启动容器命令

CMD指令和RUN指令像是。也是两种格式:shell 和exec.

https://img1.sycdn.imooc.com/63a51cce0001e87e05530151.jpg

注意:

Dockerfile中可以有多个cmd指令,但只有最后一个生效,CMD会被docker run之后的参数替换。可以参考官网Tomcat的dockerfile演示讲解:

https://img1.sycdn.imooc.com/63a51cd30001e4cf05530079.jpg

CMD会被docker run之后的参数替换演示:

我们启动tomcat:

docker run -it  -p 8080:8080 镜像id

这种启动后,访问可以正常的。因为这种启动后,直接就是使用了tomcat的dockerfile中的

CMD["catalina.sh","run"]的

如果我们使用以下命令:

docker run -it -p 8080:8080 镜像id /bin/bash

这个时候,通过浏览器访问,就不行了。为什么呢?

因为CMD会被docker run之后的参数替换

也就是dockerfile中的CMD["catalina.sh","run"]被替换成了CMD["/bin/bash","run"]了。/bin/bash替换了catalina.sh。这样相当于tomcat没启动

https://img1.sycdn.imooc.com/63a51cf20001c76003610112.jpg

CMD和RUN命令的区别:

CMD是在docker run时候运行的

RUN是在docker build是运行的

ENTRYPOINT命令

https://img1.sycdn.imooc.com/63a51cf80001b15905530129.jpg

ENTRYPOINT命令格式:

https://img1.sycdn.imooc.com/63a51d08000108a505530223.jpg

https://img1.sycdn.imooc.com/63a51d0f0001287a05530136.jpg

总结:

https://img3.sycdn.imooc.com/63a51d130001723505530372.jpg

大家好,我是凯哥Java(kaigejava),乐于分享,每日更新技术文章,欢迎大家关注“凯哥Java”,及时了解更多。让我们一起学Java。也欢迎大家有事没事就来和凯哥聊聊~~~



点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消