【云原生】Docker 实践(三):使用 Dockerfile 文件构建镜像

Docker 实践(三):使用 Dockerfile 文件构建镜像

  • 1.使用 Dockerfile 文件构建镜像
  • 2.Dockerfile 文件详解

1.使用 Dockerfile 文件构建镜像

Dockerfile 是一个文本文件,其中包含了一条条的指令,每一条指令都用于构建镜像中的一层。

Dockerfile 文件可以使用 docker build 命令进行编译。在编译过程中,每一条指令的内容描述了该层应如何进行构建。当我们需要指定自己额外的需求时,只需在 Dockerfile 文件的基础上添加或者修改指令,重新生成新的镜像即可。

下面通过一个简单的示例来演示如何使用 Dockerfile 文件。在这个示例中,将基于 Nginx 的镜像来构建一个新的镜像,并在该镜像中部署一个简单的 Web 网页。

  • 创建一个 Dockerfile 文件。在该文件中输入以下命令。
FROM nginx
RUN echo '<h1>This is a Demo HTML</h1>' > /usr/share/nginx/html/index.html

在这里插入图片描述

  • 在 Dockerfile 文件所在目录下执行 docker build 命令构建镜像。
docker build -t mynginx .

在这里插入图片描述

docker build 命令会在当前目录下寻找名为 Dockerfile 的文件,然后对该文件进行编译生成镜像。如果文件名不是 Dockerfile,则可以在使用 docker build 命令加上 -f 参数指定具体的文件名称。

  • 查看新生成的镜像。

在这里插入图片描述

  • 使用新生成的镜像创建容器。
docker run -d -p 7788:80 mynginx

在这里插入图片描述

  • 使用浏览器访问宿主机的 7788 端口,界面如下所示。

在这里插入图片描述

2.Dockerfile 文件详解

在这里插入图片描述
下表描述了一个完整的 Dockerfile 文件的组成部分。

组成部分
说明
基础镜像信息使用 FROM 关键字指定基础镜像信息,该命令必须是 Dockerfile 文件的第 1 条指令
维护者信息使用 MAINTAINER 关键字指定,通常可以使用 Dockerfile 文件创建者的姓名或者电子邮件作为维护者的信息
镜像操作指令每执行一条镜像操作时令,将在镜像中添加新的一层。可以根据需要使用一条或者多条镜像操作指令。常见的镜像操作指令有:RUNCOPYADDEXPOSEWORKDIRONBUILDUSERVOLUME
容器启动或执行指令用于指定在启动容器时需要执行的命令。通过关键字 CMDENTERPOINT 指定

docker build 命令在使用 Dockerfile 文件生成镜像时,会通过 Docker 守护进程执行 Dockerfile 文件中的每一条指令,并在每一步执行完成后生成一个镜像。当所有的指令执行完成后,会输出最终镜像的 ID。

当镜像最终生成后,Docker 守护进程会自动清理 Docker 的上下文环境,并自动重用已生成的中间镜像,以加快构建的速度。下图的方框部分表明,在构建过程中使用到了 Dockerfile 文件的缓存机制。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/660914.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【快速入门】数据库的增删改查与结构讲解

文章的操作都是基于小皮php study的MySQL5.7.26进行演示 what 数据库是能长期存储在计算机内&#xff0c;有组织的&#xff0c;可共享的大量数据的集合。数据库中的数据按照一定的数据模型存储&#xff0c;具有较小的冗余性&#xff0c;较高的独立性和易扩展性&#xff0c;并为…

解决TIVA飞控玄学类问题的通解,用魔法打败魔法

问题&#xff1a;我遭遇了玄学问题&#xff0c;出现飞机在起降过程中&#xff0c;位置晃动&#xff0c;突然出现的&#xff0c;昨天还好好的&#xff0c;位置地点都没换&#xff0c;今天中午测试了5、6次每次都这样&#xff0c;现在茫然无措&#xff0c;小哥救我&#xff1f; 这…

C语言——每日一题(移除链表元素)

一.前言 今天在leetcode刷到了一道关于单链表的题。想着和大家分享一下。废话不多说&#xff0c;让我们开始今天的知识分享吧。 二.正文 1.1题目要求 1.2思路剖析 我们可以创建一个新的单链表&#xff0c;然后通过对原单链表的遍历&#xff0c;将数据不等于val的节点移到新…

开通Jetbrains个人账号,赠送这些付费插件

开通Jetbrains个人账号&#xff0c;或者Jetbrains现成账号的, 可赠送以下付费插件 现成账号&#xff1a;https://web.52shizhan.cn/activity/xqt8ly 个人账号&#xff1a;https://web.52shizhan.cn/legal 账号支持全家桶系列&#xff1a;AppCode,CLion,DataGrip,GoLand,Intell…

Baidu Comate:“AI +”让软件研发更高效更安全

4月27日&#xff0c;百度副总裁陈洋出席由全国工商联主办的第64届德胜门大讲堂&#xff0c;并发表了《深化大模型技术创新与应用落地&#xff0c;护航大模型产业平稳健康发展》主题演讲。陈洋表示&#xff0c;“人工智能”成为催生新质生产力的重要引擎&#xff0c;对于企业而言…

ctf中的misc介绍(上)

目录 一、misc的介绍 二、使用到的工具 1、010editor 2、Binwalk&#xff08;kali自带&#xff09; 3、Notepad 4、Stegsolve 5、audacity 三、相关题型 文件/图片操作与隐写 文件类型的识别 1.使用linux中的file命令查看文件属性 2.使用010editer或者Winhex查看文…

OpenHarmony 实战开发——智能指针管理动态分配内存对象

概述 智能指针是行为类似指针的类&#xff0c;在模拟指针功能的同时提供增强特性&#xff0c;如针对具有动态分配内存对象的自动内存管理等。 自动内存管理主要是指对超出生命周期的对象正确并自动地释放其内存空间&#xff0c;以避免出现内存泄漏等相关内存问题。智能指针对…

【配置】Docker搭建JSON在线解析网站

云服务器打开端口8787 连接上docker运行 docker run -id --name jsonhero -p 8787:8787 -e SESSION_SECRETabc123 henryclw/jsonhero-webhttp://ip:8787访问 Github&#xff1a;地址

深度学习之基于Tensorflow卷积神经网络公共区域行人人流密度可视化系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 在公共区域&#xff0c;如商场、火车站、地铁站等&#xff0c;人流密度的监控和管理对于确保公共安全…

谷粒商城实战(020 RabbitMQ-消息确认)

Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强 总时长 104:45:00 共408P 此文章包含第258p-第p261的内容 消息确认 生产者 publishers 消费者 consumers 设置配置类 调用api 控制台 抵达brocker 代理 新版本ReturnCallbac…

期权交割对股市是好是坏?2024期权交割日一览表

期权交割是指期权买方在期权合约到期日或之前行使期权&#xff0c;卖方履行义务&#xff0c;按照约定的价格和数量与期权卖方进行标的物的买卖或现金结算的过程。 交割方式 期权交割可以分为实物交割和现金交割&#xff0c;具体取决于合约规定。 实物交割 实物交割是指期权买…

搭建大型分布式服务(三十七)SpringBoot 整合多个kafka数据源-取消限定符

系列文章目录 文章目录 系列文章目录前言一、本文要点二、开发环境三、原项目四、修改项目五、测试一下五、小结 前言 本插件稳定运行上百个kafka项目&#xff0c;每天处理上亿级的数据的精简小插件&#xff0c;快速上手。 <dependency><groupId>io.github.vipjo…