首页 > 其他分享 >Docker镜像

Docker镜像

时间:2023-06-20 21:03:47浏览次数:35  
标签:容器 文件系统 bootfs 镜像 Docker 加载

是什么

是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件。

只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)。

分层的镜像

以我们的pull为例,在下载的过程中我们的可以看到docker的镜像一层层在下载。

Docker镜像_分层

UnionFS(联合文件系统)

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

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层的文件系统叠加起来,这样最终的文件系统包含所有底层文件目录

Docker加载原理

docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。

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等等。

Docker镜像_安装命令_02

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

为啥采用分层结构

镜像分层最大的一个好处就是共享资源,方便复制迁移,就是为了复用。

重点

Docker镜像层都是只读的,容器层是可写的 当容器启动时,一个新的可写层被加载到镜像的顶部。 这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。

当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。

所有对容器的改动 - 无论添加、删除、还是修改文件都只会发生在容器层中。只有容器层是可写的,容器层下面的所有镜像层都是只读的。

实际操作

ubuntu安装vim

· 从Hub上下载ubuntu镜像到本地并成功运行

· 原始的默认Ubuntu镜像是不带着vim命令的

Docker镜像_镜像_03

· 外网连通的情况下,安装vim

#更新我们包的管理工具
apt-get update 
#安装我们需要的vim
apt-get -y install vim

· 安装完成后,commit我们自己的新镜像

· docker commit提交容器副本使之成为一个新的镜像

· docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]

Docker镜像_分层_04

总结

  1. docker 中的镜像分层,支持通过扩展现有镜像,创建新的镜像。类似于Java继承一个基础类,自己按需扩展
  2. 新镜像是base镜像叠加生成的。每安装一个软件,就在现有镜像的基础之上增加一层

Docker镜像_安装命令_05

标签:容器,文件系统,bootfs,镜像,Docker,加载
From: https://blog.51cto.com/u_16084527/6524664

相关文章

  • Docker --镜像容器学习笔记
    Docker简介准备工作1.前提知识-linux-Git2.课程定位和范围(基于JavaEE方向)-JavaEEjavaSpringMVC/springBoot/mybatis...docker基础篇-DockerGoSwarm/compose/machine/mesos/k8s/---CI/CDjenkinds整合docker高级篇是什么1.问题:为什......
  • Docker 常用命令
    DOCKER常用命令根据镜像创建:sudodockercreate-itimg_name启动容器:sudodockerstartcon_name停止容器:dockerstopcon_name删除容器:dockerrmcon_name改名:dockerrenameold_namenew_name进入容器:sudodockerexec-itcon_namebash退出容器:exit查看运行中的容......
  • 【Podman Desktop】配置镜像源加速
    配置Podmandesktop镜像源加速打开阿里云https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,复制里面的加速地址打开window的Powershell,输入wsl进入linux子系统sudovi/etc/containers/registries.conf#输入命令,修改该文件添加如下内容后,使用wq保存退......
  • 使用docker-compose同时启动MySQL和Redis
    环境查看安装docker和docker-composeapt-yinstalldocker.iodocker-compose设置docker-compose配置文件root@iZ2zebcd9hncu1371fetliZ:/data/docker-compose#pwd/data/docker-composeroot@iZ2zebcd9hncu1371fetliZ:/data/docker-compose#catdocker-compose.ymlvers......
  • Docker配置SpringBoot+ShardingJDBC+MybatisPlus项目实现分库分表与读写分离
    Docker配置SpringBoot+ShardingJDBC+MybatisPlus项目实现分库分表与读写分离 分类于 实战例子本文ShardingJDBC相关知识主要参考自ShardingJDBC官方文档,更多的用法建议到官网文档查看。前言传统的业务系统都是将数据集中存储至单一数据节点的解决方案,如今随着互联网数据......
  • docker 安装zookeeper(单机版)
    Docker安装ZK查看本地镜像和检索拉取Zookeeper镜像#查看本地镜像dockerimages#检索ZooKeeper镜像dockersearchzookeeper#拉取ZooKeeper镜像最新版本dockerpullzookeeper:latest#我使用的版本dockerpullzookeeper:3.5.7 创建ZooKeeper挂载目录(数据挂载......
  • GPT速报!Midjourney镜像站 MJ镜像站选择可免费使用
    进入这里=》网站进入白泽AI:https://chatgpt.myqi.top/1.打开网站 选择Ai绘画2.输入提示词 3.确定直接生成,跟官网mj一样的操作方式生成一个在睡觉的美女,也是非常nice,哈哈 4.目前网站还有GPT3.4和GPT4.0欢迎大家使用......
  • Docker PHP如何安装mysqli扩展
    查找用于安装PHP扩展的命令文件whichdocker-php-ext-install安装mysqli扩展docker-php-ext-installmysqli需要注意的是,docker-php-ext-install命令仅适用于基于PHP的Docker镜像,并且需要与DockerCompose文件一起使用,以便在容器中运行PHP应用程序。......
  • docker基础
    docker: 开源的应用容器引擎.可以给应用和应用需要的环境移植到linux机器上.版本:CE社区版本 EE企业版本,收费的安装docket//1.yum包更新到最新版本yumupdate//2.安装需要的软件包,yum-utils提供yum-config-manager功能,另外2个是devicemapper驱动功能yumin......
  • 通过cgroup给docker的CPU和内存资源做限制
    1.cpudockerrun-it--cpu-period=100000--cpu-quota=2000ubuntu/bin/bash相当于只能使用20%的CPU在每个100ms的时间里只能使用20ms的计算时间2.内存$dockerrun-m1Gubuntu:16.04,该容器能使用的内存大小为1G,能使用的swap分区大小也为1G。容器内的进程能申请到的总内存......