系统制成docker镜像_docker镜像原理 镜像制作 dockerfile

为什么一个centos镜像只有两百多兆,而tomcat镜像五百多兆

1.先说说操作系统

操作系统组成部分:

进程调度子系统

进程通信子系统

内存管理子系统

设备管理子系统

文件管理子系统

网络通信子系统

作业控制子系统

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

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

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

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

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

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

第二层是 root文件系统rootfs,称为base image

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

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

所以当我们安装的tomcat镜像大小是五百多兆 是因为里面还包含了jdk和centos的镜像

而centos镜像复用了宿主机的bootfs 下载的只有rootfs 所以小很多

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

所以tomcat-》jdk(父镜像)-》centos(基础镜像) 所以整个向外暴露就是五百多兆

镜像只读 当从一个镜像启动容器时, 所以docker会在镜像上面加载一个可读可写的文件系统作为容器

docker镜像本质就是一个分层系统

3.镜像制作 注意容器转镜像 容器里面文件不会消失 但是容器挂载的镜像卷会消失

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

镜像压缩(镜像不能传输 所以做好的镜像) docker save -o 压缩文件名称 镜像名称:版本号

镜像压缩文件解压成镜像 docker load -i 压缩文件名称

3.dockerfile

docker就是一个文本文件 包含了一条条的指令

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

为开发、测试。运维提供完全一致的开发环境 只需要通过一个dockerfile文件构建出相同的镜像

4.dockerfile关键字

FROM 指定父镜像 基于哪个镜像image构建

RUN 容器创建的时候执行一段命令

CMD 容器启动的时候执行的命令

COPY 创建容器是复制文件到镜像

ADD 添加文件到镜像还会自动解压 还可以添加远程的

ENV 设置环境变量 启动容器时 -e参数可以覆盖ENV设置的环境变量

VOIUME 启动容器时挂载目录到容器里面

EXPOSE 暴露端口

WORKDIR 设置进入容器时的路径

案例:需求 自定义一个centos7镜像 默认登录路径为/usr 并且可以使用vim

定义父镜像:FROM centos:7

定义作者信息:MAINTAINER itheima

执行安装vim命令: RUN yum install -y vim

定义默认的工作目录:WORKDIR /usr

定义容器启动执行的命令:CMD /bin/bash

通过dockerfile构建镜像:docker bulid –f dockerfile文件路径 –t 镜像名称:版本

docker build -f ./centos_docker(dockerfile文件) -t mycentos:1.1(镜像名称和版本号) .(寻址路径)

案例:java程序做成一个镜像

1.先package 打包成jar包 hello.jar

2.创建一个hello_dockerfile 写入下面数据

定义父镜像:FROM java:8

定义作者信息:MAINTAINER itheima

将jar包添加到容器: ADD hello.jar app.jar

定义容器启动执行的命令:CMD java –jar app.jar

通过dockerfile构建镜像:docker bulid –f dockerfile文件路径 –t 镜像名称:版本

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

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

相关文章

linux的vi命令详解,Linux上Vi命令详解

Linux下Vi命令详解补充一点:在vi中使用命令的方法是:冒号命令回车,如:q 回车代表退出。这里有一本0分下载关于Vi详细介绍的书:http://download.csdn.net/detail/zqiang_55/4399731文本编辑器是所有计算机系统中最常用的一种工具。…

jpg、gif、png-8、png-24的区别

一、gif格式的特点 1、透明性。gif是一种布尔透明类型,即它可以是全透明,也可以是全不透明,但是没有半透明 2、动画。gif支持动画 3、无损耗性。gif是一种无损耗的图像格式,这意味着你可以对gif图片做任何操作也不会使图片质量产生…

Java依赖注入选项

我想花一些时间来总结一些流行的Java依赖注入(DI)框架。 这是可用功能的高级概述。 首先,什么是依赖注入? “依赖注入是一种软件设计模式,可以删除硬编码的依赖,并可以在运行时或编译时更改它们。” – 维…

实用技巧:使用 Google Analytics 跟踪 JS 错误

Google Analytics(谷歌分析)不仅仅是一个流量统计工具,你还可以用它来测量广告活动的有效性,跟踪用户多远到所需的页面流(从点击广告到购物车到结账页面)获取,并基于用户的信息设置浏览器和语言…

从Ubuntu 14.04 LTS版升级到Ubuntu 16.04 LTS

Ubuntu 16.04 (Xerial Xerus) Long Term Support版于最近发布了。要想了解它的新功能和新特性,就必须升级或安装这个新系统。 本文讲述怎样一步步从Ubuntu 14.04 LTS版升级到Ubuntu 16.04 LTS版。要注意在升级前做好重要数据的备份,以免造成数据损失。因…

finditerable 转list_java – 通过拆分和运行将ListenableFuture转换为Iterable

(替代my original answer)但是,如果转型是缓慢的,或者某些输入可能会失败但是对其他输入成功会怎么样?在这种情况下,我们希望单独转换每个输出.另外,我们希望确保转换只发生一次.我们的集合转换方法不能保证这一点.因此,在您的示例代码中,输出上的每次迭代都会向执行…

linux 的date命令详解,linux之date命令详解

时间方面 :% : 印出% %n : 下一行%t : 跳格%H : 小时(00..23)%I : 小时(01..12)%k : 小时(0..23)%l : 小时(1..12)%M : 分钟(00..59)%p : 显示本地 AM 或 PM%r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止…

Java 8:对集合中的值进行排序

意识到Java 8将在接下来的几周内发布其GA版本之后,我认为现在是时候来看看它了,在过去的一周里,我一直在阅读Venkat Subramaniam的书 。 我要讲的是第3章,其中涉及对人员集合进行排序。 Person类的定义大致如下: sta…

html的table弹窗_Js弹出基于Table的可关闭浮动层

可以拖动和隐藏的层,替代弹出窗口isIEdocument.all;isNN!document.all&&document.getElementById;isN4document.layers;isHotfalse;function ddInit(e){topDogisIE ? "BODY" : "HTML";whichDogisIE ? document.all.theLayer : docume…

Linux装ntfs后内存不够,Linux_安装Ubuntu后无法使用NTFS硬盘或移动硬盘,  在安装Ubuntu系统后,存在 - phpStudy...

安装Ubuntu后无法使用NTFS硬盘或移动硬盘在安装Ubuntu系统后,存在无法使用NTFS硬盘或移动硬盘的问题,下面小编就给大家介绍下Ubuntu系统无法挂载NTFS的解决方法,不知如何挂载的朋友不妨来了解下。具体问题如下图所示:“Please res…

TJOI2018Party

题目描述 小豆参加了\(NOI\)的游园会,会场上每完成一个项目就会获得一个奖章,奖章 只会是\(N\), \(O\), \(I\)的字样。在会场上他收集到了\(K\)个奖章组成的串。 兑奖规则是奖章串和兑奖串的最长公共子序列长度为小豆最后奖励的等级。 现在已知兑奖串长度…

HTML5 Dashboard – 那些让你激动的 Web 技术

HTML5 Dashboard 是一个 Mozilla 推出的项目,里面展示了最前沿的 HTML5,CSS3,JavaScript 技术。每一项技术都有简洁,在线演示以及详细的文档链接。这些技术将成为未来一段时间 Web 开发的顶尖技术,如果不想落伍的话就赶…

通过自动回复机器人学Mybatis---基础版

第1章 案例简介 介绍要实现的案例情况,后面会通过这个案例来学习 Mybatis第2章 实战第一部----黎明前的黑暗 在没有 Mybatis 的情况下,使用 Jsp Servlet Jdbc 实现案例中的一个模块开发流程1: 开发流程2: 开发流程3:…

部署到Maven中央存储库

您需要使您的Java库公开访问吗? 您的项目托管在GitHub上吗? 您是否喜欢“将所有功能都部署到Maven Central Repository”按钮的想法? 我将展示如何使用maven-release-plugin进行设置 。 源代码托管在GitHub上,因此还将描述对源代码…

Scroll Depth – 衡量页面滚动的 Google 分析插件

Scroll Depth 是一个小型的 Google Analytics(谷歌分析)插件,可以让你衡量用户在页面上滚动了多远。它可以监控 25%、50%、75% 和 100% 四个滚动点,并发送谷歌分析事件。 您还可以跟踪页面上的特定元素是否滚动到视图中。例如在博…

aws ec2时间_AWS中自动化的三大领域,以避免支付过多的云账单

AWS是全球最常用的云服务之一。 Gartner Magic Quadrant将AWS评为最大的IaaS提供商。每个可能的域都由企业使用AWS服务。 全球约有 1,000,000家公司正在使用AWS作为其IaaS提供商。从Netflix到Unilever再到Met Office,每个人都转移到AWS上的云基础架构。既然您正在阅…

linux vector 头文件,LINUX 之Vector用法

在Linux开发过程中常用到的一个功能----列表显示.如何将中心数据进行列表显示呢?这里就用到了VECTOR容器.从中心获取的数据通过VECTOR容器传输给站点程序从而实现批量数据的传输.VECTOR容器常用的函数包括以下几个1.push_back函数函数原型:void push_back(const T& x);实现…

MySQl的一些基本知识(1)

数据库优化操作&#xff1a; MySQL优化 数据库优化维度有四个: 硬件、系统配置、数据库表结构、SQL及索引 优化成本: 硬件>系统配置>数据库表结构>SQL及索引 优化效果: 硬件<系统配置<数据库表结构<SQL及索引 运行机制原理和底层架构 MySQL的查询优化&#x…

将一个word文档按一页或多页拆分成多个文档

工作中&#xff0c;有时候碰到需要将一个比较大的word按照指定的页数分割成若干个小的word文档&#xff0c;下面提供分割的方法供参考&#xff1a; 一、按照单页拆分 1、在Word里面打开那个需要分割的文档&#xff08;假设它的文件名叫做“test.doc”&#xff09;&#xff1b; …

Croppic – 免费开源的 jQuery 图片裁剪插件

Croppic 这款开源的 jQuery 图片裁剪插件能够满足网站开发人员各种不同的使用需要。只需要简单的上传图片&#xff0c;就可以实现你想要的图像缩放和裁剪功能。因为使用了 HTML5 FormData 对象&#xff0c;所以目前只支持 IE 10 、Chrome 和 Firefox 等现代浏览器。 您可能感兴…