三十二、自定义镜像

news2024/12/28 20:24:26

1 、Docker镜像的原理

  • Docker镜像本质是什么?

  • Docker中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个G?

  • Docker中一个tomcat镜像为什么有500MB,而一个tomcat安装包只有10多MB?

操作系统组成部分: 计算机组成原理

  • 进程调度子系统

  • 进程通信子系统

  • 内存管理子系统

  • 设备管理子系统

  • ==文件管理子系统==

  • 网络通信子系统

  • 作业控制子系统

linux文件系统由bootfs和rootfs两部分组成。

  • vbootfs:包含bootloader (引导加载程序)和kernel(内核) 

  • rootfs: root文件系统,包含的就是典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件

  • ·不同的linux发行版,bootfs基本一样,而rootfs不同,如ubuntu,centos等

  • Docker镜像是由特殊的文件系统叠加而成

  • 最底端是bootfs,并使用宿主机的bootfs

  • 第二层是root文件系统rootfs,称为base image: 基础镜像

  • 然后再往上可以叠加其他的镜像文件

  • 统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。

  • 一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像成为基础镜像。

  • 当从一个镜像启动容器时,Docker会在最顶层加载一个读写文件系统作为容器

2、镜像制作

自定义镜像:提供了两种方式: 第一种:基于容器来制作 第二种: 通过dockerfile文件来制作[重要]

第一种 容器转为镜像:

步骤: 把现有的镜像--运行成一个容器---修改容器中的内容--->变成镜像---把镜像压缩文件--->交给其他人---变成本地镜像  

 演示:

docker commit 容器id 镜像名称:版本号

docker commit 04f7bf4b4fab aa_centos:1.0

 把容器变成了镜像

 docker save -o 压缩文件名称 镜像名称:版本号

 docker save -o aa_centos.tar aa_centos:1.0

docker load -i 压缩文件名称

docker load -i aa_centos.tar

3、 dockerfile的概念[重要]

  • Dockerfile是一个文本---任意一个镜像都是通过dockerfile来制作

  • 文件包含了一条条的指令

  • 每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像

  • 对于开发人员:可以为开发团队提供一个完全一致的开发环境

  • 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了

  • 对于运维人员:在部署时,可以实现应用的无缝跨平台移植

4 、Dockerfile关键字

 这些命令必须都大写

关键字作用备注
FROM指定父镜像指定dockerfile基于那个image构建
MAINTAINER作者信息用来标明这个dockerfile谁写的
LABEL标签【项目】用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看
RUN执行命令执行一段命令 默认是/bin/sh 格式: RUN command 或者 RUN [“command” , “param1”,”param2”]
CMD容器启动命令提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD [“command” , “param1”,”param2”]
ENTRYPOINT入口一般在制作一些执行就关闭的容器中会使用
COPY复制文件build的时候复制文件到image中
ADD添加文件build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程服务
ENV环境变量指定build时候的环境变量 可以在启动的容器的时候 通过-e覆盖 格式ENV name=value
ARG构建参数构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数
VOLUME定义外部可以挂载的数据卷指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME [“目录”]
EXPOSE暴露端口定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp
WORKDIR工作目录指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径
USER指定执行用户指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户
HEALTHCHECK健康检查指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制
ONBUILD触发器当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大
STOPSIGNAL发送信号量到宿主机该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。
SHELL指定执行脚本的shell指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell

5、 Dockerfile案例

5.1 案例一

编辑dockerfile文件

[root@localhost ~]# vi centos_dockerfile ​

FROM centos:7
MAINTAINER jmy <7263764736@qq.com>
RUN yum install -y vim
WORKDIR /usr
CMD ["/bin/bash"]

构建镜像

[root@hecs-33111 docker-files]# docker build -f centos_dockerfile -t aaa_centos:1 .

-f :表示dockerfile文件
-t : 镜像名称版本号 
. : 必须加上

创建容器

docker run -it --name=c3 aaa_centos:1.5

 5.2 案例二

准备好springboot jar包并传至宿主机的根目录  

  

FROM java:8
LABEL author="张三"
ADD springtest-0.0.1-SNAPSHOT.jar app.jar
CMD java -jar app.jar

 docker build -f qy163_dockerfile -t qy163:1.0 .

启动并做端口映射

docker run -id --name=qy163  -p 9000:8080 qy163:1.0

成功 

6、把本地镜像上传阿里远程镜像仓库

 

  docker login --username=aliyun5424006047 registry.cn-hangzhou.aliyuncs.com

docker tag 1f634040778d registry.cn-hangzhou.aliyuncs.com/jimiaoyu/qy163:1.0

docker push registry.cn-hangzhou.aliyuncs.com/jimiaoyu/qy163:1.0 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OPPO 关停“造芯”业务 ZEKU:一场大胆的尝试的结束

前言 近期&#xff0c;OPPO 关停了其“造芯”业务 ZEKU&#xff0c;结束了其自主研发处理器的尝试。本文将对这一事件进行探讨&#xff0c;分析其背后的原因及其对整个行业的影响。 1. ZEKU的成立与使命 在2019年&#xff0c;OPPO旗下的ZEKU研究所成立&#xff0c;标志着OPP…

Redis缓存穿透、缓存雪崩和缓存击穿

缓存穿透 缓存穿透&#xff0c;是指查询一个缓存和数据库中都没有的数据。正常的使用缓存流程大致是&#xff0c;数据查询先进行缓存查询&#xff0c;如果key不存在或者key已经过期&#xff0c;再对数据库进行查询&#xff0c;并把查询到的对象&#xff0c;放进缓存。如果数据库…

Centos和Windows之间通过主机名实现相互访问

一、业务需求 在内网环境中,我们想直接通过特定的主机名称去访问我们的服务器,而不用去记忆服务器的IP地址,且不想通过nginx等代理工具或域名配置内容来操作。 二、分析 通常我们可以直接在浏览器中输入【localhost】后按下回车键后就可以访问我们的主机80端口的内容了;那…

计算机网络大作业(Wireshark抓包分析)

实验要求 wireshark的深入学习与掌握&#xff0c;如过滤器的使用&#xff0c;归纳方法通过实验阐述ARP的工作原理利用实验结果分析 ICMP 协议的报文结构字段定义基于实验数据深入分析 TCP 协议的连接过程原理&#xff0c;报文的分片等功能从校园网发起向外网中某 Web 服务器的…

基于正点原子电机实验的pid调试助手代码解析(速度环控制)

这里写目录标题 下位机与PID调试助手传输的原理代码讲解(基于正点原子)解析数据接受和数据发送的底层函数数据接受数据帧格式环形数组以及怎么找到它的帧头位置crc校验 数据发送数据上传函数 通过前两节文章&#xff0c;我已经了解了基本的pid算法&#xff0c;现在在完成了电机…

MatrixGate 5.0 性能再升级,加载速度提升三倍!

前言 数据的加载速度在数据处理和分析领域一直是一个挑战&#xff0c;为应对这一挑战&#xff0c;YMatrix 数据库开发了 mxgate 高速数据加载工具。最近&#xff0c;随着 YMatrix 5.0 的 GA&#xff0c;新版 mxgate 与上一版本&#xff08;4.8.1&#xff09;相比&#xff0c;速…

Linux 虚拟机 磁盘扩容

概述 在单台虚拟机上部署了过多服务&#xff0c;导致磁盘使用过度达到98%。 现在扩容提高磁盘容量&#xff0c;增加10G。 现象 df -h df -ih du -s具体步骤 VMware 扩容 关闭虚拟机的情况下执行&#xff0c;类似于生产环境下需要关闭服务器&#xff0c;从而添加硬盘等相关操作…

Liunx基础命令 - rm删除命令

rm命令 – 删除文件或目录 rm命令来自英文单词“remove”的缩写&#xff0c;中文译为“消除”&#xff0c;其功能是用于删除文件或目录&#xff0c;一次可以删除多个文件&#xff0c;或递归删除目录及其内的所有子文件。 rm也是一个很危险的命令&#xff0c;使用的时候要特别…

从BinDiff到0day 在IE中利用CVE-2019-1208

前言 如上所述&#xff0c;CVE-2019-1208是UAF漏洞&#xff0c;这类安全漏洞可以破坏有效数据、引发进程crash、并且可以精心利用最终导致任意代码执行。而对于本文介绍的CVE-2019-1208而言&#xff0c;成功利用此漏洞的攻击者可以获得系统当前用户权限。如果当前用户具有admi…

理解Java虚拟机——JVM

目录 一、初识JVM 二、JVM执行流程 三、内存区域划分&#xff08;JVM运行时数据区&#xff09; 3.1 本地方法栈&#xff08;线程私有&#xff09; 3.2 程序计数器&#xff08;线程私有&#xff0c;无并发问题&#xff09; 3.3 JVM虚拟机栈&#xff08;线程私有&#xff0…

最全的分布式事务详情,它来啰~

我们首先得理解什么是分布式事务呢&#xff1f;分布式事务是指在分布式系统中&#xff0c;涉及多个计算机或服务器的操作序列&#xff0c;这些操作需要满足一致性和可靠性的要求。每个操作要么全部成功执行&#xff0c;要么全部回滚&#xff0c;以保持数据的一致性和完整性。 …

嵌入式通信协议【Modbus】Modbus TCP的帧格式

一、请求帧格式 Client request:例&#xff1a; 19 B2 00 00 00 06 06 03 00 27 00 02 1、头字节 上面是modbus客户端发出的报文内容&#xff0c;为modbus tcp/ip协议格式&#xff0c;其前面的六个字节为头字节( header handle)&#xff1b; 19 B2 00 00 00 06 19 B2 00 00…

3D点云之语义分割(相关官方示例介绍)

之前在博客中提到&#xff0c;会考虑用深度学习来对3D点云进行处理&#xff0c;接下来迈出脚步&#xff0c;先整几个例子来熟悉它。例子原型来源于官网&#xff0c;博主在其基础上做了一些代码修改。 一. 例子参考 1. Keras中的资源 Code examples 2.openvinotoolkit open_…

20230515在亚马逊Amazon扣费之后的申诉

20230515在亚马逊Amazon扣费之后的申诉 2023/5/15 22:56 缘起&#xff1a;使用Amazon的12个月的免费存储桶&#xff0c;然后调用S3功能翻译&#xff01; 但是&#xff0c;被扣费了&#xff01; 由于绑定的信用卡是工行的&#xff0c;要求和亚马逊解除绑定&#xff0c;工行给了一…

第十章创建模式—外观模式

文章目录 外观模式解决的问题概念结构 案例优缺点使用场景Tomcat 源码 结构型模式描述如何将类或对象按某种布局组成更大的结构&#xff0c;有以下两种&#xff1a; 类结构型模式&#xff1a;采用继承机制来组织接口和类。对象结构型模式&#xff1a;釆用组合或聚合来组合对象。…

GEE:无监督聚类算法(wekaKMeans)

作者:CSDN @ _养乐多_ 本文将介绍如何使用 Google Earth Engine(GEE)进行卫星图像 K-means 聚类分析的基本步骤,并提供相应的示例代码。 结果如下图所示, 文章目录 一、K-means 原理二、代码详解三、代码链接一、K-means 原理 二、代码详解 var roi = table; Map.cent…

【前后端异常】axios post请求 返回415错误状态码的解决方法

错误描述&#xff1a; 进行有文件的表单提交时出现415错误&#xff0c;以前没遇到过记录一下 415错误的解释是说&#xff0c;服务器无法处理请求附带的媒体格式。以下是HTTP的状态码关于415返回码的说明&#xff1a; 415Unsupported Media Type服务器无法处理请求附带的媒体格…

awk的应用

awk的基本应用 一、awk的工作原理二、实际应用按行输出文本按字段输出文本时间的使用查看各个功能 一、awk的工作原理 awk与sed和grep共成为文本三剑客&#xff0c;都是针对文本非常实用的工具。 awk的工作原理&#xff1a; 遂行读取文本&#xff0c;默认以空格或者tab&#x…

NodeJs模块化之上半部分

模块化 什么是模块化 模块化是指解决一个复杂问题时&#xff0c;自顶向下 逐层把系统 拆解 成若干 模块 的过程。 对于整个系统来说&#xff0c;模块是可组合、分解和更换的单元。 编程领域中的模块化 编程领域中的模块化&#xff0c;就是遵守固定的规则&#xff0c;把一个…

( 位运算 ) 231. 2 的幂 / 342. 4的幂 ——【Leetcode每日一题】

❓题目一 231. 2 的幂 难度&#xff1a;简单 给你一个整数 n&#xff0c;请你判断该整数是否是 2 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果存在一个整数 x 使得 n 2 x n 2^x n2x &#xff0c;则认为 n 是 2 的幂次方。 …