六、Dockerfile解析

这篇具有很好参考价值的文章主要介绍了六、Dockerfile解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

课前思考:

分别准备好两个已经写好的.net 程序与springboot程序, 如何让这两个程序在docker 中运行呢?

1. 什么是Dockerfile

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

构造三个步骤

  • 1.编写Dockerfile文件

  • 2.编译:docker build

  • 3.生成容器:docker run ....

2. 基础知识

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

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

  • 3.# 表示注释

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

 文章来源地址https://www.toymoban.com/news/detail-747607.html

从软件开发的角度来说,可以分为三个层次:

Dockerfile --------> 产品原型

镜像文件 ---------> UI设计图

运行的容器 ---------> 最终交付的成品

 

3.Dockerfile体系结构(保留字指令)

FROM :基础镜像,当前新镜像是基于哪个镜像的

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

RUN:容器构建时需要运行的命令(使用&&连接多条命令,不建议使用多个RUN指令,因为会造成镜像层太多)

FROM centos:6.9
MAINTAINER 任我行码农场
RUN sed -i "s|enabled=1|enabled=0|g" /etc/yum/pluginconf.d/fastestmirror.conf && curl -o /etc/yum.repos.d/CentOS-Base.repo https://www.xmpan.com/Centos-6-Vault-Aliyun.repo && yum -y install vim

 

EXPOSE:当前容器对外暴露的端口

WORKDIR:指定在创建容器后,终端默认登陆进来的工作目录,一个落脚点(进入容器之后默认所在的目录位置)

ENTRYPOINT:指定一个容器启动时要运行的命令,与CMD一样。

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

FROM mcr.microsoft.com/dotnet/aspnet:6.0
COPY . /unit8
WORKDIR /unit8
EXPOSE 8888
ENTRYPOINT ["dotnet", "Step4.Unit8.dll","--urls","http://0.0.0.0:8888"]

 

ENV:用来在构建镜像过程中设置环境变量(可理解为事先定义了一个变量,可参考官网的tomcat案例)

ADD:将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包(比COPY命令更强大)

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

CMD:指定一个容器启动时要运行的命令,如果有多个CMD命令,则只有最后一个生效。如果指定了 ENTRYPOINT,则CMD表示传参。CMD命令会被docker run 之后的参数替换掉(可以恶意在docker run 后 面加/bin/bash 参数)。

FROM mcr.microsoft.com/dotnet/aspnet:6.0
MAINTAINER 任我行
ENV DOTNET_HOME=/app
WORKDIR $DOTNET_HOME
ADD ./unit8 $DOTNET_HOME   # 相对路径是相对Dockerfile所在目录的路径
EXPOSE 8888
ENTRYPOINT ["dotnet","Step4.Unit8.dll"]
CMD ["--urls","http://0.0.0.0:8888"]

 

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

我们在一个Dockerfile文件中加上ONBUILD指令,该指令对利用该Dockerfile构建镜像(比如为A镜像)不会产生实质性影响。

但是当我们编写一个新的Dockerfile文件来基于A镜像构建一个镜像(比如为B镜像)时,这时构造A镜像的Dockerfile文件中的ONBUILD指令就生效了,在构建B镜像的过程中,首先会执行ONBUILD指令指定的指令,然后才会执行其它指令。 需要注意的是,如果是再利用B镜像构造新的镜像时,那个ONBUILD指令就无效了,也就是说只能再构建子镜像中执行,对孙子镜像构建无效

 

4.构建镜像

语法:docker build [-f Dockerfile文件名] -t 新镜像名:[TAG]

  • -t:表示指定镜像名

  • -f 表示指定Dockerfile文件名,若未指定,默认会扫描当前目录下名称为Dockerfile文件

  • 注意:最好在你的项目目录中将Dockerfile文件放进来,并在当前目录下执行docker build

例如:

docker build -f ./Dockerfile -t new_redis .

大坑:最后的那个. 千万不要忘记了!!!!

5. 镜像压缩

目的:主要是为了方便镜像的传输

语法:docker save -o 文件名.tar 镜像名:版本号

如:

docker save -o product.tar productservice:1.0

7. 导入为镜像文件

目的:将镜像压缩包解压成镜像文件

语法:docker load --input 文件名.tar

如:

docker load --input productservice.tar

 

8. 虚悬镜像

虚悬镜像(dangling image) , 那些没有标签的镜像被称为悬虚镜像,在列表中展示为 <none> :

<none>      <none>     00285df0df87    5 days ago   342 MB

 

通常出现这种情况,是因为构建了一个新镜像,然后为该镜像打了一个已经存在的标签。当此情况出现,Docker会构建新的镜像,然后发现已经有镜像包含相同的标签,接着Docker会移除旧镜像上面的标签,将该标签标在新的镜像之上。例如,首先基于alpine:3.4构建一个新的镜像,并打上dodge:challenger标签。然后更新Dockerfile,将alpine:3.4替换为alpine:3.5,并且再次执行docker image build命令。该命令会构建一个新的镜像,并且标签为dodge:challenger,同时移除了旧镜像上面对应的标签,旧镜像就变成了悬虚镜像
  • 查询显示虚悬镜像

docker images -f dangling=true

 

  • 删除虚悬镜像

    一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的

docker rmi $(docker images -q -f dangling=true)
或者
docker image prune

 

 

配套视频链接:全网首发java/.net双案例Docker精品课程,Docker 进阶教程(双语言双案例助力教学)-已完结_哔哩哔哩_bilibili

 

 

 

到了这里,关于六、Dockerfile解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 四月成功上岸阿里,年后准备了两个月,要个21k应该不过分吧~

    先说下我基本情况,本科不是计算机专业,现在是学通信,然后做图像处理,可能面试官看我不是科班出身没有问太多计算机相关的问题,因为第一次找工作,阿里的游戏专场又是最早开始的,就投递了,投递的是测试开发岗,阿里是自己投的第一家公司,也是第一家笔试

    2024年02月04日
    浏览(42)
  • Python实验一基本数据类型针对用元组创建的5*5矩阵,格式化分行输出元素并分别计算两个主对角线元素之和;

    又到了自闭环节了,做个实验报告差点自闭,自己写的真的是很长的代码才实现,加油吧 这个根据参考网上大佬的方法进行了一些优化,在这里给大家提供参考。 输出结果: 对大家有帮助的话,记得关注点个赞哈!

    2024年02月16日
    浏览(46)
  • 六、Dockerfile解析

    课前思考: 分别准备好两个已经写好的.net 程序与springboot程序, 如何让这两个程序在docker 中运行呢? Dockerfile 是用来构建Docker镜像的构建文件 ,是由一系列命令和参数构成的脚本。 构造三个步骤 1.编写Dockerfile文件 2.编译:docker build 3.生成容器:docker run .... 1.每条保留字指

    2024年02月05日
    浏览(33)
  • DockerFile文件详细解析

    所有文章不设限,我们相遇偶然,相散坦然,互不打扰,各自安好,向阳而生 致敬尚硅谷周阳老师,此处内容迁移学习来自于阳哥! DockerFile是用来构建Docker镜像的文本文件,是一条条构建镜像所需要的指令和参数构成的脚本 编写DockerFile文件 Docker build命令构建镜像 docker r

    2024年02月08日
    浏览(39)
  • docker高级(DockerFile解析)

    1、构建三步骤 ·编写Dockerfile文件 ·docker build命令构建镜像 ·docker run依镜像运行容器实例 2、DockerFile构建过程解析 ·Dockerfile内容基础知识 ·1:每条保留字指令都必须为大写字母且后面要跟随至少一个参数 ·2:指令按照从上到下,顺序执行 ·3:#表示注释 ·4:每条指令都会创

    2024年02月10日
    浏览(35)
  • docker 笔记6:高级篇 DockerFile解析

    目录  1.是什么?   2.构建三步骤 3.DockerFile构建过程解析 3.1 Dockerfile内容基础知识 3.2Docker执行Dockerfile的大致流程   总结 4.DockerFile常用保留字指令 5.案例:自定义镜像  5.1 要求: Centos7镜像具备vim+ifconfig+jdk8  5.2编写 5.3 准备编写Dockerfile文件  大写字母D 5.3构建 5.4再体会下

    2024年02月10日
    浏览(32)
  • Docker 解析:使用 Dockerfile 自动构建镜像

    简介 Docker 容器是使用 基础 镜像创建的。一个镜像可以是基本的,只包含操作系统的基本要素,也可以包含一个准备好启动的复杂的预构建应用程序堆栈。 在使用 Docker 构建镜像时,每个操作(例如执行的命令,比如 apt-get install)都会形成一个新的层叠在之前的层之上。然

    2024年03月26日
    浏览(60)
  • 关于前后端JSON解析差异问题与思考

      一、问题回顾 在一次涉及流程表单的需求发布时,由于表单设计的改动,需要在历史工单中的一个json字段增加一个属性,效果示意如下: 由于历史数据较多,采用了通过odc从数据库查询数据,线下开发数据处理脚本,更新数据后生成sql去线上执行,脚本示例如下。 在数据

    2024年02月09日
    浏览(51)
  • 【云原生-Docker】docker镜像制作、上传、dockerfile命令解析

    在实际业务场景中,需要制作多个不同版本进行镜像使用,如maven版本、JDK、openJDK不同使用等,所以需要做多个针对不同版本做不同的镜像。 这里记录一下之前devops用的openJDK版本、某些部门需要用orcle JDK、特此需要做不同的镜像,镜像内包含centos、maven、jdk。 基础镜像 基础

    2024年02月03日
    浏览(58)
  • 课前测2-丑数

    目录 课前测2-丑数  程序设计 程序分析  系列文章 【问题描述】 丑数的定义是这样的—— 一个数,如果它分解后的素因子最多只有2、3、5、7四种,这个数则称为“丑数”。比如,前20个丑数是:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27。 现在你的任务是:给你

    2023年04月13日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包