返回顶部
首页 > 资讯 > 精选 >分析Dockerfile中的保留字指令的过程
  • 568
分享到

分析Dockerfile中的保留字指令的过程

2023-06-25 12:06:20 568人浏览 泡泡鱼
摘要

这篇文章主要讲解了“分析Dockerfile中的保留字指令的过程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“分析Dockerfile中的保留字指令的过程”吧!一、Dockerfile是什么

这篇文章主要讲解了“分析Dockerfile中的保留字指令的过程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“分析Dockerfile中的保留字指令的过程”吧!

一、Dockerfile是什么?

概念:

Dockerfile是用来构建Docker镜像的构建文件,由一系列命令和参数构成的脚本

构建三步骤:

  • 编写Dockerfile文件

  • docker build

  • docker run

Centos案例:

centos案例:

FROM scratch  #真正的基础镜像,ADD centos-7-x86_64-docker.tar.xz /# label 说明的意思LABEL \      org.label-schema.schema-version="1.0" \    org.label-schema.name="CentOS Base Image" \    org.label-schema.vendor="CentOS" \    org.label-schema.license="GPLv2" \    org.label-schema.build-date="20201113" \    org.opencontainers.image.title="CentOS Base Image" \    org.opencontainers.image.vendor="CentOS" \    org.opencontainers.image.licenses="GPL-2.0-only" \    org.opencontainers.image.created="2020-11-13 00:00:00+00:00"CMD ["/bin/bash"] #最后一行执行的命令

在哪找到的勒,在hub.docker.com上找到滴:centos。

我们不会,但是可以先去看看人家怎么写的,抄作业这事,我想大家都熟悉吧。俗称CV大法?。

二、Dockerfile构建过程分析

入门知识:

每条保留字指令(今天的重点)都必须为大写字母并且后面要跟随至少一个参数

如:

FROM scratch  #真正的基础镜像,ADD centos-7-x86_64-docker.tar.xz /

指令按照从上到下,顺序执行

#表示注释。

#这就是注释

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

就如下面这样,可以套娃一样。

分析Dockerfile中的保留字指令的过程

Dockerfile执行流程分析:docker从基础镜像运行一个容器执行一条指令并对容器作出修改执行类似docker commit的操作提交一个新的镜像层。docker再基于刚提交的镜像运行一个新容器执行dockerfile中的下一条指令直到所有指令都执行完成

后文有案例,结合案例回过来看更容易理解。

小小番外:

在现阶段,我们将DockerfileDocker镜像和Docker容器看待为软件的三个不同阶段。

Dockerfile面向开发--->Docker镜像成为交付标准--->Docker容器则涉及部署与运维

Dockerfile中定义了进程所需要的一切东西,以前需要依赖的环境变量、依赖包、运行时环境等都被写入到Dockerfile文件中啦。比起之前你在Liunx服务器中,下载那么那么多软件,配置那么那么多,真的是简单蛮多,起码对于我这个菜鸡来说用Docker部署真的简单了蛮多的。

Docker镜像是在用Dockerfile定义了一个文件后,docker build 时产生的一个Docker镜像,当运行时Docker镜像时,才会真正开始提供服务。

Docker容器就是运行起来即可提供服务的。

三、Dockerfile保留字指令

Dockerfiel保留字指令大致有以下:

FROMMAINTANINERRUNEXPOSEWORKDIRENVADDCOPYVOLUMECMDENTRYPOINTONBUILD

3.1、FROM

基础镜像,即当前新镜像是基于哪个镜像创建的。

#基于openjdk:8 创建镜像FROM openjdk:8

3.2、MAINTAINER

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

MAINTAINER 宁在春crush@163.com

3.3、RUN

容器构建时需要运行的指令

RUN mkdir -p /conf/my.cn

3.4、EXPOSE

当前容器对外暴露的端口

#暴露出MyCat的所需端口EXPOSE 8066 9066

3.5、WORKDIR

指定在创建容器后,终端默认登录的进来工作目录

#容器数据卷,用于数据保存和持久化工作WORKDIR /usr/local/mycat

3.6、ENV

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

#用来在构建镜像过程中设置环境变量ENV MYCAT_HOME=/usr/local/mycat

这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样;也可以在其它指令中直接使用这些环境变量。

如:

RUN $MYCAT_HOME/mycat

3.7、ADD 和 COPY

ADD:

将宿主机目录下的文件拷贝进镜像,并且ADD命令会自动处理URL和解压tar压缩包

ADD centos-6-docker.tar.xz /

COPY:

类似ADD,拷贝文件和目录到镜像中。

将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置

COPY src destCOPY ["src" "dest"]

3.8、VOLUME

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

#将mycat的配置文件的地址暴露出映射地址,启动时直接映射宿主机的文件夹VOLUME /usr/local/mycat

3.9、CMD 和 ENTRYPOINT

CMD

CMD的指令和RUN相似,也是两种格式:

shell格式:CMD<命令>exec 格式:CMD ["可执行文件“,”参数1“,”参数2“.....]

Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run 之后的参数替换。

ENTRYPOINT

指定一个容器启动时要运行的命令。

ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数。

区别:

在这里先简单说明一下区别,你可以将CMD理解为覆盖

CMD cat /conf/my.cnfCMD /bin/bash

这两条指令都写在Dockerfile文件中,只会执行CMD /bin/bash ,而不会执行CMD cat /conf/my.cnf,因为CMD /bin/bash把上一条直接覆盖掉了。

ENTRYPOINT则不同,你可以将ENTRYPOINT简单理解为追加。

主要体现在docker run 上,如果使用dockerfile文件中最后是CMD结尾,则在运行时不能够额外追加命令,否则会覆盖掉Dockerfile中的CMD命令。

Dockerfile文件中最后一行为ENTRYPOINT结尾时,你可以在docker run 命令后追加一些命令.

3.10、ONBUILD

当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后,父镜像的onbuild被触发。

四、实战案例

4.1、制作一个自己的Centos镜像

4.1.1、引入:

我们先从阿里云上拉取一个centos看看,看看有哪些问题,然后我们再进行自定义。

docker pull centos # 拉取镜像docker run -it centos #运行镜像# ===== 测试====vim ceshi.txtifconfig pwd

分析Dockerfile中的保留字指令的过程

为什么会这样?因为docker仓库中的Centos是精简版,其只有内核,没有其它的东西。

要求自定义的Centos能够解决上述问题。

4.1.2、编写Dockerfile文件

为我们自定义的Centos 编写Dockerfile文件

FROM centosMAINTAINER 宁在春<crush@163.com>ENV MYPATH /usr/localWORKDIR $MYPATHRUN yum -y install vimRUN yum -y install net-toolsEXPOSE 80 CMD echo $MYPATHCMD echo "success"CMD /bin/bash  #只会运行最后一个

分析Dockerfile中的保留字指令的过程

然后把这个复制进去即可。

mkdir -p /usr/local/docker/mycentos # 自己创建存放的位置vim Dockerfile

分析Dockerfile中的保留字指令的过程

4.1.3、构建centos镜像
docker build -f /usr/local/docker/mycentos/Dockerfile  -t mycentos:1.1 .

解释:

-f:后面跟随的是Dockerfile 文件

-t :后面跟随的镜像名和版本号。

最后的小数点:就表明是当前目录。

docker build -f Dockerfile文件 -t 镜像名:tag .

当dockerfile文件命名为dockerfile时并且在当前目录下时可简写为:

docker build  -t 镜像名:tag .docker build   -t mycentos:1.1 .

执行:

分析Dockerfile中的保留字指令的过程

看到最后的这个就是代表成功了。

分析Dockerfile中的保留字指令的过程

docker images 查看全部镜像:

分析Dockerfile中的保留字指令的过程

4.1.4、运行Centos镜像
docker run -it mycentos:1.3pwdifconfig

分析Dockerfile中的保留字指令的过程

之所以我们进去容器的目录会从/切换到/usr/local是因为在dockerfile文件中已经写明。

ENV MYPATH /usr/localWORKDIR $MYPATH
4.1.5、查看镜像的变更历史
docker history mycentos:1.1

分析Dockerfile中的保留字指令的过程

在这里也可以看出来,镜像它是由Dockerfile文件中的指令,一层一层构建出来的。

4.2、ONBUILD示例

率先构建一个夫镜像

编写dockerfile文件,命名为dockerfile2

FROM centosRUN yum -y install  curlONBUILD RUN echo "我被子镜像继承了,输出此条语句"CMD ["crul", "-s","Http://ip.cn"]
docker build -f /usr/local/docker/mycentos/Dockerfile2 -t my_father_centos .

分析Dockerfile中的保留字指令的过程

构建一个镜像继承夫镜像

编写dockerfile文件,命名为dockerfile3

FROM my_father_centosRUN yum -y install  curlCMD ["crul", "-s","http://ip.cn"]docker build -f /usr/local/docker/mycentos/Dockerfile3 -t my_son_centos .

分析Dockerfile中的保留字指令的过程

可以看到父镜像中的语句被输出了。

感谢各位的阅读,以上就是“分析Dockerfile中的保留字指令的过程”的内容了,经过本文的学习后,相信大家对分析Dockerfile中的保留字指令的过程这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 分析Dockerfile中的保留字指令的过程

本文链接: https://lsjlt.com/news/304726.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 分析Dockerfile中的保留字指令的过程
    这篇文章主要讲解了“分析Dockerfile中的保留字指令的过程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“分析Dockerfile中的保留字指令的过程”吧!一、Dockerfile是什么...
    99+
    2023-06-25
  • Dockerfile中的保留字指令的过程解析
    目录一、Dockerfile是什么?二、Dockerfile构建过程分析三、Dockerfile保留字指令3.1、FROM3.2、MAINTAINER3.3、RUN3.4、EXPOS...
    99+
    2024-04-02
  • docker笔记13-Dockerfile的保留字指令
        Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。    构建三步骤:1、编写dockerfile文件;2、do...
    99+
    2023-06-04
  • Docker执行DockerFile构建过程指令解析
    目录DockerFile 简介DockerFile 构建过程DockerFile 指令解析DockerFile 案例演示构建一个 mycentos 镜像DockerFile 简介 镜...
    99+
    2024-04-02
  • 在Dockerfile的RUN指令中不执行守护进程的示例分析
    小编给大家分享一下在Dockerfile的RUN指令中不执行守护进程的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!不要在你的Dockerfile中的RUN指令中执行守护进程 $ cat&nbs...
    99+
    2023-06-04
  • 查看Python中的保留字
    查看Python中的保留字命令:        python import keyword keyword.kwlist截图:查看更多技术请移步:https://ui.29mn.com...
    99+
    2023-01-31
    Python
  • go是C语言中的保留字吗?
    深入探讨:go是C语言中的保留字吗? 在C语言中,有一些被保留的关键字(Reserved Keywords),这些关键字在编程中有特殊的作用,不能用作标识符命名。这些保留字包含了各种数...
    99+
    2024-03-15
  • Redis中命令执行过程的示例分析
    这篇文章将为大家详细讲解有关Redis中命令执行过程的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Redis 是怎么执行远程客户端发来的命令的Redis cli...
    99+
    2024-04-02
  • top命令中Load Average分析过程
    后端们最怕的事情之一就是服务器的负载突然飙升,这可能又意味着一个个夺目Call马上要打过来了。碰到这种情况怎么办,大家第一反应一定是登陆到服务器上,先敲一个top命令看看Load Average吧。Load Average很多人说Load ...
    99+
    2023-06-15
  • Oracle 12c R2中ADG会话保留特性的示例分析
    这篇文章给大家分享的是有关Oracle 12c R2中ADG会话保留特性的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Oracle 12c R2中有一个不错的特性,那就...
    99+
    2024-04-02
  • C# 中this保留字的作用是什么
    这期内容当中小编将会给大家带来有关C# 中this保留字的作用是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。C#语言有很多值得学习的地方,这里我们主要介绍C# this保留字,包括介绍在结构的方法中...
    99+
    2023-06-17
  • 如何理解MySQL 5.7中的关键字和保留字
    如何理解MySQL 5.7中的关键字和保留字,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 最近在将数据从O...
    99+
    2024-04-02
  • Vue中v-model指令的原理分析
    小编给大家分享一下Vue中v-model指令的原理分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!vue的v-model是一个...
    99+
    2024-04-02
  • Vue.js中基础指令的示例分析
    这篇文章给大家分享的是有关Vue.js中基础指令的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Vue.js 是一套构建用户界面的渐进式框架。他自身不是一个全能框架——只...
    99+
    2024-04-02
  • 怎么在mysql中保留指定位数的小数
    在mysql中保留指定位数的小数:1.启动mysql;2.登录mysql数据库;3.进入数据表;4.在数据表添加小数;4.使用format函数设置保留小数的位数。在mysql中保留指定位小数的方法首先,在命令行中启动mysql服务;serv...
    99+
    2024-04-02
  • springboot运行到dokcer中dockerfile的场景分析
    目录1.场景2.编写springboot项目打包上传linux服务器2.1将jar包和docker放到同一个目录2.2编写dockerfile3.运行dockerfile4.查看镜像...
    99+
    2024-04-02
  • MySQL 是否保留存储过程创建时的环境?
    实际上,MySQL 会保留创建存储过程时的环境。可以通过以下示例来理解,在该示例中我们使用两个条来连接字符串。这仅在 SQL 模式为 ansi 时才合法。但是,如果我们将 SQL 模式更改为非 ansi,该过程仍然有效,就好像原始设置仍然为...
    99+
    2023-10-22
  • Python中字符串驻留指的是什么
    小编给大家分享一下Python中字符串驻留指的是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python主要应用领域有哪些1、云计算,典型应用OpenSta...
    99+
    2023-06-14
  • python字符串驻留技术的示例分析
    小编给大家分享一下python字符串驻留技术的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言每种编程语言为了表现出色,并且实现卓越的性能,都需要有大量...
    99+
    2023-06-15
  • angular中自定义指令的示例分析
    这篇文章将为大家详细讲解有关angular中自定义指令的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。自定义属性的四种类别分为: 元素E,属性A,注释M,类C ,...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作