(三)Docker三种重要元素之一==镜像(images)

本文围绕Docker镜像展开,介绍了镜像的概念,它是轻量级、可执行的独立软件包。阐述了UnionFS联合文件系统,这是Docker镜像的基础。讲解了镜像加载原理,包括bootfs和rootfs。还说明了分层的好处是共享资源,介绍了Docker特点,最后演示了提交commit和demo操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Docker( 二 )安装与使用

目录

1.镜像是什么

2.UnionFS(联合文件系统)

3.Docker镜像加载原理

4.分层的好处

5.docker特点

6.自己提交commit

7.demo演示 


1.镜像是什么

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


2.UnionFS(联合文件系统)

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

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

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


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

4.分层的好处

   最大的一个好处就是 - 共享资源
 比如:有多个镜像都从相同的 base 镜像构建而来,那么宿主机只需在磁盘上保存一份base镜像,
同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。

5.docker特点

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

6.自己提交commit

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

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

docker run -it -p 8080:8080 tomcat

  • -p 主机端口:docker容器端口
  • -P 随机分配端口
  • i:交互
  • t:终端

7.demo演示 

指定端口:

docker run -it -p 8080:8080  tomcat

不指定端口 -P

查看当前运行的进程


Docker(四)容器数据卷

### 删除不需要的Docker镜像 `docker images` 是用于列出本地存储的所有镜像的命令。然而,它本身并不具备直接删除镜像的功能。为了删除不需要的镜像,通常会结合其他命令来完成操作。 #### 列出所有镜像 通过 `docker images` 命令可以查看当前系统中存在的所有镜像及其详细信息,包括仓库名称、标签(TAG)、镜像ID以及创建时间等[^1]。 ```bash docker images ``` #### 定位虚悬镜像 虚悬镜像是指那些没有被标记也没有被任何容器引用的镜像层。这些镜像通常是构建过程中产生的中间产物或者由于手动删除某些高层级镜像而遗留下来的底层镜像。可以通过以下方式找到并清除这类无用数据: - **查找虚悬镜像** 使用带有 `-f dangling=true` 参数的 `docker images` 命令筛选出所有的虚悬镜像: ```bash docker images -f dangling=true ``` - **移除单个指定镜像** 如果知道具体想要删除哪个镜像,则可以直接调用 `docker rmi` 加上对应的 IMAGE ID 或 REPOSITORY NAME 和 TAG 进行卸载。例如: ```bash docker rmi <IMAGE_ID> ``` - **批量清理未使用的镜像** 对于希望一次性处理掉所有不再需要但又不一定是严格意义上的“虚悬”的多余资源时,可采用如下几种策略之一实现自动化管理[^2][^3]: - 清理所有未被任何容器所依赖的基础镜像(即所谓的dangling images): ```bash docker image prune ``` - 扩展范围至即使存在tag但仍处于闲置状态下的实例(-a选项),这将会更加彻底地释放硬盘空间: ```bash docker image prune -a ``` 注意,在执行上述动作之前最好确认清楚目标对象确实已经废弃不用了,以免误删重要资料造成不可逆的影响[^4]。 另外需要注意的是,如果尝试去销毁某个正处于活跃运行当中关联着某特定版本号image file 的container instance的话,那么在此之前必须先将其终止再做进一步的动作;否则就会遭遇失败提示告知该resource still in use by at least one container的情况发生。因此建议按照下面这样的顺序来进行整个流程的操作步骤安排比较稳妥安全可靠一些: ```bash docker stop [CONTAINER_NAME/ID] && docker rm [CONTAINER_NAME/ID] && docker rmi [IMAGE_NAME/ID] ``` ### 总结 综上所述,虽然无法单纯依靠 `docker images` 单独达成目的效果,但是配合其它辅助工具一起运用起来之后就能够轻松解决关于如何有效率地管理和维护个人电脑内部安装部署好的各种类型的linux containers environments 下面列举出来的几个常用技巧组合方案供大家参考选用即可满足日常运维工作的大部分场景需求啦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值