文章目录

  • 一、镜像基本介绍
  • 1.1 什么是镜像
  • 1.2 UnionFS(联合文件系统)
  • 1.3 Docker镜像加载原理
  • 1.4 分层的镜像与容器
  • 二、DockerHub基本介绍
  • 2.1 什么是DockerHub
  • 三、制作镜像的方式
  • 3.1 使用Dockerfile制作镜像
  • 3.2 使用Docker CLI制作镜像
  • 四、提交镜像
  • 4.1 基本语法
  • 4.2 使用 Docker CLI 提交一个新的镜像
  • 4.2.1 准备好一个ubuntu镜像
  • 4.2.2 以交互运行的形式进入ubuntu容器
  • 4.2.3 在ubuntu容器内下载安装vim
  • 4.2.4 使用commit命令提交新的镜像



一、镜像基本介绍

1.1 什么是镜像

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

1.2 UnionFS(联合文件系统)

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

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

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

Docker大学生看了都会系列(五、Dokcer镜像详解)_文件系统

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

1.4 分层的镜像与容器

所有的Docker镜像都起始于一个基础镜像层,当进行修改或增加新的内容时,就会在当前镜像层之上,创建新的镜像层。

Docker大学生看了都会系列(五、Dokcer镜像详解)_docker_02


Docker镜像都是只读的,当容器启动时,一个新的可写层镜像加载到镜像顶部!

这一层就是我们通常说的容器层,容器之下的都叫镜像层。

二、DockerHub基本介绍

2.1 什么是DockerHub

Docker-hub是一个公共的云端镜像库,它可提供用户使用的Docker镜像,包括官方库和用户私人库。它还提供了包括构建,管理和分享Docker镜像的工具,被广泛应用于Docker开发和部署。Docker-hub为Docker镜像的构建和管理提供了一个简单的方法并且提高了基础设施的可移植性。

官方地址:https://hub.docker.com/

三、制作镜像的方式

3.1 使用Dockerfile制作镜像

Dockerfile 是 Docker 官方提供的一种用来自动化构建镜像的脚本工具。它通过一系列的指令来生成一个镜像,包括内部系统设置、软件安装、环境变量配置、启动命令等。优点是易于维护和分享,且可通过 Git 等版本控制工具进行管理;缺点则是构建速度较慢,不太适合快速迭代的场景。

3.2 使用Docker CLI制作镜像

使用 Docker CLI 可以将容器文件系统的更改打包成一个新的镜像。该方式的优点是速度非常快,且操作简单;缺点则是会导致镜像的版本管理比较混乱,不太适合用于正式环境的部署。

四、提交镜像

4.1 基本语法

docker commit 提交容器成为一个新的副本
docker commit -m="描述信息"  -a="作者"  容器id  目标镜像名:[TAG]

4.2 使用 Docker CLI 提交一个新的镜像

这里以ubuntu为例,制作一个带有vim命令的新的镜像

4.2.1 准备好一个ubuntu镜像

Docker大学生看了都会系列(五、Dokcer镜像详解)_Docker_03

4.2.2 以交互运行的形式进入ubuntu容器

Docker大学生看了都会系列(五、Dokcer镜像详解)_容器_04


可以看到当前容器是无法使用vim命令的

4.2.3 在ubuntu容器内下载安装vim

在容器内执行如下命令

apt-get update
apt-get -y install vim

此时再使用vim命令,已经安装完毕

Docker大学生看了都会系列(五、Dokcer镜像详解)_运维_05

4.2.4 使用commit命令提交新的镜像

提交镜像

docker commit -m="add vim" -a="donkor" 203826fd9f9d donkor/ubuntu:1.0

Docker大学生看了都会系列(五、Dokcer镜像详解)_容器_06

查看是否创建成功

docker images

Docker大学生看了都会系列(五、Dokcer镜像详解)_文件系统_07


此时可以看到新制作的带有vim的ubuntu镜像就完成了

完成ヾ(◍°∇°◍)ノ゙