Dockerfile创建Docker镜像

Dockerfile

DOCKER镜像的组成

Docker 镜像的构建和使用是基于 UnionFS(联合文件系统)的原理。UnionFS 允许将多个目录挂载到一个虚拟文件系统下,并且可以对这些目录进行修改,这些修改会以一次提交的形式叠加在已有的文件系统层上。在 Docker 中,镜像的每一层都是一个 UnionFS 的文件系统层,它们通过这种方式叠加在一起,形成了一个完整的镜像文件系统。
Docker 的镜像由以下几部分组成:

  1. bootfs(引导文件系统):这是镜像的最底层,包含 bootloader 和内核。当 Docker 容器启动时,会加载 bootfs 文件系统,引导内核启动。
  2. rootfs(根文件系统):这是在 bootfs 之上的文件系统,包含操作系统的基础文件和目录,如 /bin、/etc、/proc 等。不同的操作系统发行版会有不同的 rootfs。
    Docker 镜像的构建过程如下:
  • 基础镜像:创建一个新的镜像时,需要指定一个基础镜像。这个基础镜像通常是某个操作系统的基础镜像,如 Ubuntu、CentOS 等。
  • 构建层:Dockerfile 中的每个指令都会创建一个新的镜像层。这些指令可以是 RUN、COPY、ADD 等,它们会添加或修改镜像的内容。
  • 缓存和复用:Docker 在构建镜像时会尝试复用已有的镜像层,这样可以加快构建速度。如果 Dockerfile 的指令没有改变,或者复制的文件没有变化,相应的镜像层缓存就会生效。
  • 镜像层缓存失效:如果 Dockerfile 的指令发生了变化,或者复制的文件发生了变化,相应的镜像层缓存就会失效。如果某一层镜像缓存失效,它之后的镜像层缓存也会失效。
  • 不可变的镜像层:一旦镜像层被创建,它就不可再更改。如果在某一层中添加了一个文件,然后在下一层中删除了它,这个文件依然会存在于镜像中,但在 Docker 容器中是不可见的。
    Dockerfile 是一个文本文件,其中包含了构建镜像的指令。这些指令可以分为以下几类:
  • 基础镜像指令:FROM,指定基础镜像。
  • 维护者指令:LABEL,添加元数据,如维护者信息。
  • 镜像操作指令:RUN、COPY、ADD、EXPOSE、WORKDIR、CMD、ENTRYPOINT 等,用于构建镜像。
  • 容器启动指令:CMD 和 ENTRYPOINT,用于设置容器启动时的命令和参数。
    通过编写 Dockerfile,我们可以自动化地构建镜像,从而提高构建效率和一致性。

Dockerfile的编写

Dockerfile 是一个文本文件,用于定义如何构建 Docker 镜像。它包含了构建镜像所需的指令和配置,每个指令都会创建一个新的镜像层。

Dockerfile指令

  1. 基础镜像指令(FROM):指定构建镜像的基础镜像。
    FROM ubuntu:latest
    
  2. 维护者指令(LABEL或老版本MAINTAINER):添加元数据,如维护者信息。
    LABEL maintainer="your_name@example.com"
    
  3. 镜像操作指令
    • RUN:在容器中执行命令,如安装软件包。
      RUN apt-get update && apt-get install -y nginx
      
    • COPY:将宿主机的文件复制到容器中。
      COPY . /usr/src/app
      
    • ADD:将文件添加到容器,可以从 URL 下载文件。
      ADD . /usr/src/app
      
  4. 环境变量指令(ENV):设置环境变量。
    ENV NODE_ENV production
    
  5. 暴露端口指令(EXPOSE):暴露端口,供外部访问。
    EXPOSE 3000
    
  6. 容器启动指令
    • CMD:设置容器启动时的默认命令和参数。
      CMD ["npm", "start"]
      
    • ENTRYPOINT:设置容器启动时执行的命令。
 ENTRYPOINT ["pm2-runtime"]

Dockerfile编写与使用案例

在宿主机上创建一个文件夹 ,如我要编写一个Tomcat的镜像
在这里插入图片描述
本地拥有了centos7的镜像

mkdir /dockerfile
cd  /dockerfile
mkdir Tomcat
cd Tomcat/
vim Dockerfile

Dockerfile文件内容如下

#指定基底镜像
FROM centos:7
#添加镜像说明
MAINTAINER this is tomcat image
#将压缩包传入镜像
ADD jdk-8u411-linux-x64.tar.gz  /usr/local/
#切换工作目录至/usr/local/
WORKDIR /usr/local/
RUN mv jdk1.8.0_411 /usr/local/java
#设置环境变量
ENV JAVA_HOME /usr/local/java
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH $JAVA_HOME/bin:$PATH
#传入Tomcat二进制安装包
ADD apache-tomcat-9.0.85.tar.gz /usr/local/
WORKDIR /usr/local/
RUN mv apache-tomcat-9.0.85 /usr/local/tomcat
#开放8080端口
EXPOSE 8080
ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]
CMD ["/usr/local/tomcat/bin/startup.sh","start"]

放入所需文件
在这里插入图片描述
生成镜像

docker build -t tomcat:centos .

在这里插入图片描述
镜像生成完毕
测试

docker run -itd --name tomcat -p 8080:8080 tomcat:centos

访问主机8080端口进行测试 ,成功
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CTF-WEB(MISC)

安全攻防知识——CTF之MISC - 知乎 CTF之MISC杂项从入门到放弃_ctf杂项 你的名字-CSDN博客 CTF MICS笔记总结_archpr 掩码攻击-CSDN博客 一、图片隐写 CTF杂项---文件类型识别、分离、合并、隐写_ctf图片分离-CSDN博客 EXIF(Exchangeable Image File)是…

笔记本电脑怎么多选删除文件?误删除文件怎么办

在日常使用笔记本电脑中,我们可能会遇到需要删除大量文件的情况,例如清理临时文件、整理文档或卸载不再需要的程序。手动一个一个地删除不仅效率低下,还可能遗漏某些文件。那么,如何在笔记本电脑上高效地进行多选删除操作呢&#…

Case中default的综合结果

在使用case语句时,不完备的case语句会导致Vivado综合时推断出锁存器。下面通过实例来详细看看各种情况下的综合结果: 1.完备的case语句 下述的verilog对应的电路结构是一个8选一的多路复用器: module case_test(input [2:0]sel,input data…

PostgreSQL连接拒绝如何解决和排查?

1. 服务器未运行 解决方案:确保 PostgreSQL 服务已启动。在 Linux 上,你可以使用如下命令来检查服务状态:sudo systemctl status postgresql如果服务未运行,使用以下命令启动它:sudo systemctl start postgresql2. Po…

【软考】模拟考卷错题本2024-05-05

1 算法 关键词:按照单位重量价值大优先,那就是1、2、3即430;之后的根据排除法又可以得到630;故C。 2 UML 序列图 上图已经基本上有解析;重点在于在四个选项中选正确的。根据概念排除:异步和同步是不一样的&…

uniapp的底部弹出层实现保姆式教程

实现照片: 此过程先进入uniapp官网,找到扩展组件 打开找到里面的uni-popup和uni-icons 点击进入,下载&安装 点击下载并导入HBuilderX 导入到你使用的目录,如test目录

高效、精准:皮秒激光切割机在陶瓷基板加工中的应用

皮秒激光切割机(激光划片机)在陶瓷基板切割领域具有显著的优势和潜力,主要体现在以下几个方面: 1. 高精度:皮秒激光切割机能够实现极高的切割精度,对于陶瓷基板这种需要精细加工的材料尤为重要。它能够在不…

五一 作业

#include <iostream>using namespace std; class Num { private:int a; public:Num() {}Num(int a):a(a){}//设置a的值void set(int a){this->aa;}//1-a的和void Sum(){if(a<1){cout<<"a<1"<<endl;return;}int sum0;for(int i1;i<a;i)…

Excel文件解析---超大Excel文件读写

1.使用POI写入 当我们想在Excel文件中写入100w条数据时&#xff0c;使用XSSFWorkbook进行写入时会发现&#xff0c;只有将100w条数据全部加载到内存后才会用write()方法统一写入&#xff0c;效率很低&#xff0c;所以我们引入了SXXFWorkbook进行超大Excel文件读写。 通过设置 …

图像降噪算法 BM3D 介绍

介绍 BM3D 是 “Block-Matching and 3D Filtering” 的缩写&#xff0c;即三维块匹配滤波&#xff0c;它是一种用于图像去噪的算法。该算法来源于 一篇“Image and video denoising by sparse 3D transform-domain collaborative filtering”的高质量文章&#xff0c;文章的作…

软件测试面试问题汇总

一般软件测试的面试分为三轮&#xff1a;笔试&#xff0c;HR面试&#xff0c;技术面试。 前两轮&#xff0c;根据不同企业&#xff0c;或有或无&#xff0c;但最后一个技术面试是企业了解你“行不行”的关键环节&#xff0c;每个企业都会有的。 在平时的学习、工作中一定要善于…

为什么要学Python?学Python有什么用?

为什么要学Python&#xff1f;学Python有什么用&#xff1f; 在当今的数字化时代&#xff0c;编程已成为一项宝贵的技能。Python&#xff0c;作为一种流行的编程语言&#xff0c;因其易于学习和强大的功能而受到全球开发者的青睐。本文将探讨学习Python的原因和它的实际应用&am…

MLP实现fashion_mnist数据集分类(1)-模型构建、训练、保存与加载(tensorflow)

1、查看tensorflow版本 import tensorflow as tfprint(Tensorflow Version:{}.format(tf.__version__)) print(tf.config.list_physical_devices())2、fashion_mnist数据集下载与展示 (train_image,train_label),(test_image,test_label) tf.keras.datasets.fashion_mnist.l…

如何使git提交的时候忽略一些特殊文件?

认识.gitignore文件 在生成远程仓库的时候我们会看到这样一个选项&#xff1a; 这个.gitignore文件有啥用呢&#xff1f; .gotignore文件是Git版本控制系统中的一个特殊文件。用来指定哪些文件或者目录不被Git追踪或者提交到版本库中。也就意味着&#xff0c;如果我们有一些文…

怎么通过Java语言实现远程控制无人售货柜

怎么通过Java语言实现远程控制无人售货柜呢&#xff1f; 本文描述了使用Java语言调用HTTP接口&#xff0c;实现控制无人售货柜&#xff0c;独立控制售货柜、格子柜的柜门。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称厂商1智能WiFi控…

使用 Postman 实现 API 自动化测试

背景介绍 相信大部分开发人员和测试人员对 postman 都十分熟悉&#xff0c;对于开发人员和测试人员而言&#xff0c;使用 postman 来编写和保存测试用例会是一种比较方便和熟悉的方式。但 postman 本身是一个图形化软件&#xff0c;相对较难或较麻烦&#xff08;如使用 RPA&am…

低功耗UPF设计的经典案列分享

案例1 分享个例子&#xff0c;景芯A72低功耗设计&#xff0c;DBG domain的isolation为何用VDDS_maia_noncpu供电而不是TOP的VDD&#xff1f; 答&#xff1a;因为dbg的上一级是noncpu&#xff0c;noncpu下面分成dbg和两个tbnk。 案例2 景芯A72的低功耗&#xff0c;请问&#…

精品干货 | 数据中台与数据仓库建设(免费下载)

【1】关注本公众号&#xff0c;转发当前文章到微信朋友圈 【2】私信发送 数据中台与数据仓库建设 【3】获取本方案PDF下载链接&#xff0c;直接下载即可。 如需下载本方案PPT/WORD原格式&#xff0c;请加入微信扫描以下方案驿站知识星球&#xff0c;获取上万份PPT/WORD解决方…

零基础入门学习Python第二阶01生成式(推导式),数据结构

Python语言进阶 重要知识点 生成式&#xff08;推导式&#xff09;的用法 prices {AAPL: 191.88,GOOG: 1186.96,IBM: 149.24,ORCL: 48.44,ACN: 166.89,FB: 208.09,SYMC: 21.29}# 用股票价格大于100元的股票构造一个新的字典prices2 {key: value for key, value in prices.i…

小微公司可用的开源ERP系统

项目介绍 华夏ERP是基于SpringBoot框架和SaaS模式的企业资源规划&#xff08;ERP&#xff09;软件&#xff0c;旨在为中小企业提供开源且易用的ERP解决方案。它专注于提供进销存、财务和生产功能&#xff0c;涵盖了零售管理、采购管理、销售管理、仓库管理、财务管理、报表查询…