第09讲:Docker镜像制作

news2025/2/23 21:54:48

         我们可以在容器去部署应用,然后把容器转为镜像给测试人员用,由于镜像是不能直接传输的,所以我们将新的镜像转成压缩文件,给测试人员。测试人员把我们的压缩文件还原成一个新的镜像。

一、Linux文件系统组成

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

  • bootfs:包含bootloader(引导加载程序)和 kernel(内核)
  • rootfs: root文件系统,包含的就是典型 Linux 系统中的/dev,/proc,/bin,/etc等标准目录和文件不同的linux发行版,bootfs基本一样,而rootfs不同,如ubuntu,centos等

思考:

  • Docker 镜像本质是什么?
  • Docker 中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个G?
  • Docker 中一个tomcat镜像为什么有500MB,而一个tomcat安装包只有70多MB?

二、Docker 镜像原理

  • Docker镜像是由一层一层的文件系统叠加而成,最底端是 bootfs,并使用宿主机的bootfs ,第二层是 root文件系统rootfs,称为base image,然后再往上可以叠加其他的镜像文件,这种层级的文件系统被称之为UnionFS,统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统
  • 一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像称为基础镜像,当从一个镜像启动容器时,Docker会在最顶层加载一个读写文件系统作为容器

在这里插入图片描述

三、对于三个问题就介绍

01、 Docker 镜像本质是什么?

Docker 镜像本质是一个分层文件系统

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

我们下载centos镜像很小,是因为centos镜像层复用了宿主机的bootfs,下载的只有rootfs,所以centos是很小的

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

我们下载tomcat镜像大小是600+MB,是因为里面还包含了jdk和centos这两个镜像层,所以很大,另外需要注意一点的是,这个tomcat镜像里面包含了jdk镜像和centos基础镜像,为什么基础镜像是centos而不是ubuntu呢?这是由做这个tomcat镜像的发行商决定的。

四、普通方式制作镜像

docker commit 容器id 镜像名称:版本号     #把容器做成镜像
docker save -o 压缩文件名称 镜像名称:版本号  #把镜像做成压缩包,放到宿主机的某个位置
docker load –i 压缩文件名称     #别人(测试人员)加载镜像(压缩包)

Tips:容器转为镜像,如果容器有挂载的内容,做成新镜像的时候,挂载的内容是不会载入到镜像里面的

实验1:制作tomcat镜像

第1步:创建tomcat容器

docker run -id --name=tomcat1 -p 8080:8080 tomcat:8

运行效果:

在这里插入图片描述

第2步:把宿主机的某个war包拷贝到容器的某个目录里面,这样将来做镜像时,war包会加载到镜像里

实验中的war包下载地址:test.war

001、上传test.war到CentOS宿主机

我创建了一个目录/usr/local/myfiles/,并将test.war上传到了该目录
在这里插入图片描述

002、从宿主机将test.war拷贝到容器

docker cp /usr/local/myfiles/test.war tomcat1:/usr/local/tomcat/webapps/test.war
## tomcat1为容器的名称

注意:不能将内容拷贝到tomcat容器的挂载目录,如果放到里面,做成镜像时,该目录下的内容不会载入镜像里面

运行效果:

在这里插入图片描述

第3步:把tomcat容器做成镜像

#语法:docker commit 容器名称 生成的镜像名称:版本号
docker commit tomcat1 my_tomcat:1.0
docker images   #可以查看到my_tomcat镜像,版本号是1.0

运行效果:

在这里插入图片描述

第4步:把镜像做成压缩包放到宿主机的某个位置

docker save -o my_tomcat.tar my_tomcat:1.0   #-o:output 压缩文件保存到/root目录下

运行效果:

在这里插入图片描述

第5步:把压缩文件载入镜像(第三方载入该压缩包)

docker run -id --name=tomcat2 -p:8080:8080 my_tomcat:1.0
docker exec -it tomcat2 bash  #进入容器,进入webapps/目录可以看到test.war存在

Tip:由于之前tomcat1已经运行,8080端口被占用,所以在启动容器之前先把之前的tomcat容器停掉

docker stop tomcat1

运行效果:

在这里插入图片描述
浏览器运行效果:http://192.168.0.181:8080/test/index.html

在这里插入图片描述

实验2:制作MySQL镜像

第1步:创建MySQL容器

docker run -id --name=c_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=Aa123123. mysql:8.0.16

运行效果:

在这里插入图片描述

第2步:进入容器,修改mysql的数据文件位置

        当创建一个数据库容器的时候,数据库文件默认是放在/var/lib/mysql,比如我们用外部客户端naticat导入一个数据文件,也会放到/var/lib/mysql目录里,这样在做成镜像时,var目录的内容是不会复制到镜像里面去的。那么就要修改容器里面的mysql的data数据库目录的位置 如:把/var/lib/mysql 放到/work下

01、进入c_mysql容器

docker exec -it c_mysql bash

02、拷贝mysql的数据目录

cp -r /var/lib/mysql   /work/

03、安装vim

apt-get update
apt-get install vim

04、修改mysql配置文件

修改/etc/mysql/my.cnf文件,找到 datadir这行修改为 datadir=/work/mysql

cd /etc/mysql
vi my.cnf

运行效果:

在这里插入图片描述

05、重启docker容器,启动mysql容器

systemctl restart docker
docker start c_mysql

运行效果:

在这里插入图片描述

第3步:制作mysql镜像

docker  commit 9b8fa15d03a6 my_mysql:2.0

运行效果:

在这里插入图片描述

第4步:导出mysql镜像到宿主机

docker save -o mysql.tar my_mysql:2.0 #-o:output 压缩文件保存到/root目录下

运行效果:

在这里插入图片描述

第5步:把压缩文件载入镜像(第三方载入该压缩包)

docker load -i mysql.tar

运行效果:

在这里插入图片描述

第6步:启动容器

docker run -id --name=c_mysql2 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=Aa123123. my_mysql:2.0

运行效果:

在这里插入图片描述

五、dockerfile方式

稍后添加

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

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

相关文章

mysql快速生成100W条测试数据(2)公司员工信息

首先这个就是我们需要生成的数据类型,这种只是我们用于测试以及学习时候使用,正常来讲公司架构会比这个要复杂的多 #mermaid-svg-fxDINAOpv25PiDLG {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid…

数据库,计算机网络、操作系统刷题笔记31

数据库,计算机网络、操作系统刷题笔记31 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle…

SpringBoot中JPA的基本使用

1、Jpa 是什么 JPA顾名思义就是Java Persistence API的意思,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 2、优势 2.1标准化 JPA 是 JCP 组织发布的 Java EE 标准之一,因此任何声称符…

美国空运专线 美国空运专线时效多久

美国空运专线是国内到美国的优势渠道,为跨境卖家专门研发的货物海关清关快递/卡车配送的专线运输服务,范畴覆盖全部美国地区,各路经安排发货次数更高一些,时效更有保障。一、美国空运专线是什么 美国空运专线是专门将货物运送到美…

开学季如何运营跑腿系统?

现在学生们都在放寒假中,再过一段时间就又到开学季了,开学季是运营好跑腿项目的关键时刻,刚开学的时候如何让同学继续使用呢?这时候我们可以采取一些优惠政策来吸引同学,我们可以在后台设置一些优惠券,满减…

nacos1.4.0与seata搭建实现分布式物

下载nacos https://github.com/alibaba/nacos/tagshttps://github.com/alibaba/nacos/releases/tag/1.4.0下载seata https://github.com/seata/seata/releases/tag/v1.4.0注意:最好使用相同版本,不然出问题会找很久的 创建seata数据库 1.创建数据库导…

Termius ssh ubuntu、kali、centos

目录Termius ssh ubuntu、centos、kali一、Ubuntu开启ssh服务及允许root登录1、Ubuntu默认没有安装ssh的server,需要安装2、允许远程使用root账号ssh连接本机修改/etc/ssh/sshd_config文件3、需要重启系统或者ssh服务,刚安装完ssh-sserver服务默认开启4、…

【自然语言处理】实验1答案:Word2Vec TransE案例

NLP_class 学堂在线《自然语言处理》实验课代码报告,授课老师为刘知远老师。课程链接:https://www.xuetangx.com/training/NLP080910033761/1017121?channeli.area.manual_search。 持续更新中。 所有代码为作者所写,并非最后的“标准答案…

MyBatisPlus-注解的使用

注解 | MyBatis-PlusMyBatis-Plus 官方文档https://baomidou.com/pages/223848/#idtype因为在MyBatisPlus中都是通过实体类映射到数据库的字段中,所以处理好实体类与数据库表中字段的映射关系就很重要,MyBatisPlus提供的注解可以解决数据库中表名、字段名…

简道云教学 | 零代码应用开发软件助力应用型高校学生创新能力培养

“高校的数字化转型两大抓手,一个是学校管理系统的数字化建设,另一个是学生数字化素养的提升,简道云在我校信息化管理中的广泛应用是我们使用零代码平台进行创新能力培养的良好基础。” ————河南工学院 刘丹教授 河南工学院位于豫北工业名…

CSS初级教程(图例-链接-列表-表格)【第八天 完】

文章目录【1】CSS 图标【2】CSS 链接【3】CSS 列表【4】所有 CSS 列表属性【5】CSS 表格【6】CSS 所有表格属性CSS上回学习链接 CSS初级教程 颜色【第一天】 CSS初级教程 背景【第二天】 CSS初级教程 边框【第三天】 CSS初级教程 边距、高度、宽度【第四天】 CSS初级教程(轮廓…

使用批处理文件和mkvtoolnix批量修改默认音轨和音轨属性并重新混流

工具和版本 windows10 x64 MkvToolNix v73 待输出的Mkv格式文件,要求是同类型的文件,比如从迅雷下载下来同一来源的连续剧 步骤 一、添加文件 打开MkvToolNix GUI,添加输入文件,选中一个待输出的文件A 二、编辑音轨 选中音…

IOC底层实现原理介绍,手动实现IOC容器

面试官特别爱问SpringIOC底层实现,Spring源码晦涩难懂怎么办呢? 跟着老师手动实现一个mini ioc容器吧,实现后再回头看Spring源码事半功倍哦,就算直接和面试官讲也完全可以哦,类名完全按照源码设计,话不多说开干~!手动…

葡聚糖-叶酸;Dextran-FA;Dextran-Folicacid 结构式;科研试剂简介

名称:Dextran-Folicacid 中文名:叶酸修饰的葡聚糖 别称:葡聚糖-FA,葡聚糖-叶酸 存储条件:-20C,避光,避湿 外观: 固体或类白色絮状,取决于分子量 溶剂:溶于大部分有机溶剂&#…

HTAP 能够取代 OLAP 吗?

HTAP是什么 HTAP(Hybrid Transaction and Analytical Processing)数据库,也称混合型关系数据库,是能同时提供OLTP和OLAP的混合关系型数据库。在互联网浪潮出现之前,企业的数据量普遍不大,特别是核心的业务数据,通常一个…

【深入理解JVM】垃圾收集器内存分配策略

目录 gc root对象有哪些 oopMap 安全点(safe point) 安全区域 卡表 伪共享问题 三色标记法 垃圾收集器 CMS G1 gc root对象有哪些 虚拟机栈中引用的对象(虚拟机栈中的引用的对象可以作为GC Root。我们程序在虚拟机的栈中执行&…

Redis安装及常用配置详解

一般redis安装于linux服务器,故本例介绍的是Linux下的安装一. Redis下载1. 官网下载tar包可以到​​ ​redis的官网​​​找到各个Redis版本的下载地址,如: https://redis.io/download/#redis-downloads,最新稳定版是7.0版2. 使用wget 下载redis在官网中…

无桥PFC的家族推演

1. 组合法构建无桥PFC PFC是一种AC-DC变换器,将交流输入电压分成正负半周,输出电压是直流,因此AC-DC变换器可以当做是两个DC-DC变换器的组合。在PFC的拓扑推演中,就是设计两个DC-DC变换器的工作模式。以下内容是基于对陈正格博士发…

流程编辑器bpmnjs的改造3:加一个审批人的设置

默认的设计器有代理人、候选用户和候选组,但是并不能满足实际的业务需求,我们需要对它进行改造,使得我们能够按照自定义的规则来生成用户任务节点的审批人。1、在bpmnjs里面加一个审批人的输入部件打开resources/properties-panel/provider/a…

MD5算法全解析

前言 这段时间刚好正在做软件安全的实验和课设,学习了各种加密算法,比如对称加密算法的DES,AES;非对称加密算法的RSA;再如今天要讲的主角-单向加密算法的MD5。为什么这么多算法,MD5成为了今天的猪脚呢?&am…