1. 镜像是什么

    镜像是一种轻量级,可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件.

    所有的应用,直接打包docker镜像,就可以直接跑起来!

    如何得到镜像:

    • 从远处仓库下载
    • 直接拷贝
    • 自己制作镜像 DockerFile
  2. Dock镜像加载原理

    UnionFS(联合文件系统)

    UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统, 它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系 统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基 础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。 特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件 系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录

    注:

    • 可以在下载的时候直接查看到分层
    • 不同镜像间的同一层是共享的,不用额外下载
    • 分层举例:mysql,jdk,docker…

    Docker镜像加载原理

    bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启 动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是 一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已 由bootfs转交给内核,此时系统也会卸载bootfs。

    注:

    • 这种引导加载是公用的
    • 类似于电脑开机时,从黑屏到亮屏的阶段
    • 用完之后会卸载
    • 高端设计的底层原理都是最朴素的智慧

    rootfs (root file system) ,在bootfs之上。包含的就是典型 Linux 系统中的 /dev, /proc, /bin, /etc 等标 准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。

    注:

    • 引导完成后,对应的linux系统搭建完成

    平时我们安装进虚拟机的CentOS都是好几个G,为什么Docker这里才200M?

    对于一个精简的OS,rootfs 可以很小,只需要包含最基本的命令,工具和程序库就可以了,因为底层直接用Host的kernel,自己只需要提供rootfs就可以了。由此可见对于不同的linux发行版, bootfs基本是一 致的, rootfs会有差别, 因此不同的发行版可以公用bootfs。

    注:

    • 内核做了精简,删去了部分命令
    • 舍去了共有的引导操作
    • 直接使用了主机的内核
  3. 分层理解

    分层的镜像:为什么Docker镜像要使用分层结构?

    优点:

    • 实现资源的复用.以层级为单位进行下载,如果不同的镜像间有相同的层级就无需下载,直接使用
    • 对于不同版本应用的交叉,高层镜像的版本会覆盖底层镜像的版本

    查看:docker inspect inspect imageId

    特点

    Docker镜像都是只读的,当容器启动时,一个新的可写层(容器层)被加载到镜像的顶部,容器之下的可以称为镜像层

  4. commit镜像

    docker commit 提交容器成为一个新的副本
    
    # 命令和git原理类似
    #将容器提交为镜像
    docker commit -m="提交的秘书信息" -a="作者" 容器id 目标镜像名[:TAG] #TAG可以为版本号 #测试:重新构建一个tomcat镜像,使webapps文件夹下有webapps.dist中的文件 #1.将webapps.dist中的文件递归复制到webapps中
    [root@iZwz908j8pbqd86doyrez5Z ~]# docker run -d -it tomcat /bin/bash
    ca78e0a04a1555f597818a59cb7b2efb57d0cfa631a7f3be9f013acf01780f30
    [root@iZwz908j8pbqd86doyrez5Z ~]# docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    ca78e0a04a15 tomcat "/bin/bash" 18 seconds ago Up 17 seconds 8080/tcp happy_khayyam
    1c7cb01a1127 portainer/portainer "/portainer" 3 hours ago Up 4 minutes 0.0.0.0:8088->9000/tcp jovial_yonath
    fc7c340046da d5eef28cf41d "catalina.sh run" 4 hours ago Up 4 hours 0.0.0.0:8081->8080/tcp loving_yalow
    [root@iZwz908j8pbqd86doyrez5Z ~]# docker attach ca78e0a04a15
    root@ca78e0a04a15:/usr/local/tomcat# ls
    BUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.dist
    CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps work
    root@ca78e0a04a15:/usr/local/tomcat# cp -r webapps.dist/* webapps
    root@ca78e0a04a15:/usr/local/tomcat# cd webapps
    root@ca78e0a04a15:/usr/local/tomcat/webapps# ls
    ROOT docs examples host-manager manager #2.制作镜像
    [root@iZwz908j8pbqd86doyrez5Z ~]# docker commit -m="test" -a="Arno" 2bf4b871c05c tomcat1:1.0
    sha256:c41979180de2e523874ff2aba70b4ffa37e95a91db7e7e9c458662221e76a8a4
    [root@iZwz908j8pbqd86doyrez5Z ~]# docker run -d -p 8082:8080 tomcat1:1.0
    92d267e01bd61ef6a4ffbf8f92134a023a1e7b44e6b03565c989832dacc93755
    [root@iZwz908j8pbqd86doyrez5Z ~]# docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    92d267e01bd6 tomcat1:1.0 "catalina.sh run" 10 seconds ago Up 9 seconds 0.0.0.0:8082->8080/tcp affectionate_cohen
    2bf4b871c05c tomcat:9.0 "catalina.sh run" 7 minutes ago Up 3 minutes 0.0.0.0:8081->8080/tcp strange_poincare
    [root@iZwz908j8pbqd86doyrez5Z ~]# curl localhost:8082

    注:

    • 这里要用tomcat:9.0,如果用tomcat:latetst则不行
    • -it:要等容器内的命令执行完毕才会出来执行当前的操作,与bash形成了很好的搭配

Docker——镜像讲解的更多相关文章

  1. Docker(五)Docker镜像讲解

    Docker镜像讲解 镜像概念 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量和配置文件 Dock ...

  2. Docker镜像讲解

    Docker镜像讲解 镜像是什么 镜像是一种轻量级的,可执行的独立软件包,用来打包软件运行环境和基于运行环境的开发软件,它包含运行某个软件做需要的所有的内容,包括代码,运行时,库,环境变量和配置文件. ...

  3. 『现学现忘』Docker基础 — 25、Docker镜像讲解

    目录 1.镜像是什么 2.Docker镜像获取的方式 3.Docker镜像加载原理 (1)UnionFS(联合文件系统) (2)Docker镜像加载原理 1.镜像是什么 镜像是一种轻量级.可执行的独立 ...

  4. Docker镜像细节

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 回顾前面: 为什么需要Docker? Docker入 ...

  5. Docker 镜像(五)

    我们都知道,操作系统分为内核和用户空间.对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持.而 Docker 镜像(Image),就相当于是一个 root 文件系统.比 ...

  6. Docker镜像浅谈

    先抛出几个我在学习过程中产生的几个问题. 1. 容器镜像是什么, 和装系统时的镜像有什么关系? 2. 容器镜像的作用是什么? 3. 不同版本的ubuntu镜像有什么区别, 比如说 ubuntu:18. ...

  7. docker镜像的创建

    获得更多资料欢迎进入我的网站或者 csdn或者博客园 昨天讲解了docker的安装与基本使用,今天给大家讲解下docker镜像的创建的方法,以及push到Docker Hub docker安装请点击右 ...

  8. docker镜像与容器

    目录 docker镜像与容器 概述 分层存储 镜像与容器 删除镜像与容器 将容器中的改动提交到镜像 慎用 docker commit--构建镜像推荐使用dockerfile docker镜像与容器 概 ...

  9. kubernetes实战篇之nexus oss服务器部署及基于nexus的docker镜像仓库搭建

    系列目录 Nexus oss仓库管理平台搭建 Nexus是一款仓库管理工具,支持Npm,bower,maven,nuget,apt,yum甚至docker,helm等各种仓库,说的通俗以下,就是私服镜 ...

随机推荐

  1. 交换机基本原理与VRP基础及操作

    交换机基本原理与VRP基础及操作 目录 交换机基本原理与VRP基础及操作 一.数据链路层 1.数据链路层的位置 2.数据链路层的功能 二.以太网(Ethernet) 1.以太网的概念 2.MAC地址( ...

  2. 【BZOJ2820】YY的GCD(莫比乌斯反演 数论分块)

    题目链接 大意 给定多组\(N\),\(M\),求\(1\le x\le N,1\le y\le M\)并且\(Gcd(x, y)\)为质数的\((x, y)\)有多少对. 思路 我们设\(f(i)\ ...

  3. make小tip

    总所周知make一般需要Makefile才能编译相关源码,但也可以无需Makefile就能编译一些简单的源代码. 在算法竞赛里,一道题的源程序一般只有一个文件,此时用Makefile显得十分累赘,但如 ...

  4. 帆软报表(finereport)雷达图钻取详细点新页面展示

    添加参数栏,季度下拉框的空间名为combobox0 添加雷达图,通过第三页面做跳转 雷达图钻取.cpt为联动钻取的第三页面 添加纬度(所点击钻取的点) 参数   wd 添加季度参数 jd    值为季 ...

  5. 聊聊DevOps制品管理-不止是存储制品这么简单

    什么是制品? 制品是指由源码编译打包生成的二进制文件,不同的开发语言对应着不同格式的二进制文件:这些二进制文件通常用于运行在服务器上或者作为编译依赖,"制品的管理"是配置管理的重要 ...

  6. Go Exec 僵尸与孤儿进程

    原文地址:Go Exec 僵尸与孤儿进程 最近,使用 golang 去管理本地应用的生命周期,期间有几个有趣的点,今天就一起看下. 场景一 我们来看看下面两个脚本会产生什么问题: 创建两个 shell ...

  7. Win10系统下关闭管理员运行确认弹窗

    Windows10及以上系统对于安全的考虑,对于程序运行时的权限做了控制.    点击后,会弹出确认的弹窗. 像我做测试,或者使用cmd经常需要administrator 权限,一直弹弹弹就很烦. 要 ...

  8. C# InterFace 接口

    接口设计方式 自顶向下 (如图所示),自底向上. 接口成员: 事件 public interface IDrawingObject { event EventHandler ShapeChanged; ...

  9. linux shell脚本批量修改密码,无需交互输入

    转至:https://blog.csdn.net/weixin_34409357/article/details/89833777?utm_medium=distribute.pc_relevant. ...

  10. Linux下忘记MySQL密码的解决办法

    一.使用免密码登录 1.使用 #find / -name my.cfg 找到mysql配置文件 2.vim /etc/mysql/my.cfg (我的配置文件是这个路径,每个人的路径可能有所不同,用f ...