首页 文章 精选 留言 我的

精选列表

搜索[file],共10014篇文章
优秀的个人博客,低调大师

每日一博 | Docker file 中的保留字指令讲解

之前简单学过Docker,当时是为了快速部署一个项目,过的很快,对于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执行流程分析: docker从基础镜像运行一个容器 执行一条指令并对容器作出修改 执行类似docker commit的操作提交一个新的镜像层。 docker再基于刚提交的镜像运行一个新容器 执行dockerfile中的下一条指令直到所有指令都执行完成 后文有案例,结合案例回过来看更容易理解。 小小番外: 在现阶段,我们将Dockerfile、Docker镜像和Docker容器看待为软件的三个不同阶段。 Dockerfile面向开发--->Docker镜像成为交付标准--->Docker容器则涉及部署与运维 在Dockerfile中定义了进程所需要的一切东西,以前需要依赖的环境变量、依赖包、运行时环境等都被写入到Dockerfile文件中啦。比起之前你在Liunx服务器中,下载那么那么多软件,配置那么那么多,真的是简单蛮多,起码对于我这个菜鸡来说用Docker部署真的简单了蛮多的。 Docker镜像是在用Dockerfile定义了一个文件后,docker build 时产生的一个Docker镜像,当运行时Docker镜像时,才会真正开始提供服务。 Docker容器就是运行起来即可提供服务的。 三、Dockerfile保留字指令 Dockerfiel保留字指令大致有以下: FROM MAINTANINER RUN EXPOSE WORKDIR ENV ADD COPY VOLUME CMD ENTRYPOINT ONBUILD 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 为什么会这样?因为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 #只会运行最后一个 然后把这个复制进去即可。 mkdir -p /usr/local/docker/mycentos # 自己创建存放的位置vim 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 . 执行: 看到最后的这个就是代表成功了。 docker images 查看全部镜像: 4.1.4、运行Centos镜像 docker run -it mycentos:1.3pwdifconfig 之所以我们进去容器的目录会从/切换到/usr/local是因为在dockerfile文件中已经写明。 ENV MYPATH /usr/localWORKDIR $MYPATH 4.1.5、查看镜像的变更历史 docker history mycentos:1.1 在这里也可以看出来,镜像它是由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文件,命名为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 . 可以看到父镜像中的语句被输出了。 五、自言自语 纸上得来终觉浅,绝知此事要躬行。 大家好,我是博主宁在春:主页 一名喜欢文艺却踏上编程这条道路的小青年。 希望:我们,待别日相见时,都已有所成。 换个小猫表情,我们一起击个掌吧。

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册