3、docker镜像深入理解和发布镜像

 

 

3.1、镜像的理解

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

2、只有通过镜像文件才能生成docker容器实例。

 

3.2、UnionFS(联合文件系统)

1、Union文件系统(UnionFS)是一种分层的、轻量级的、高性能的文件系统,它是docker镜像的基础,并且支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂在到同一个虚拟文件系统下。

2、镜像可以通过分层来进行继承,基于基础镜像,可以制作各种具体的应用镜像。

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

 

3.3、镜像分层

下载一个镜像时,注意观察下载的日志输出,可以看到是一层一层的在下载:

image-20230424154810939

 

3.3.1、分层理解

 

3.3.2、docker镜像要采用分层的好处

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

 

 

3.4、制作和发布镜像

 

3.4.1、制作镜像

方式1、从容器中提交一个镜像:

方式2、dockerfile制作镜像:

 

3.4.2、发布镜像

docker仓库(repository)是集中存放镜像文件的场所。最大的公开仓库是docker hub(https://hub.docker.com/),存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云 、网易云等。

 

3.4.2.1、发布镜像到docker hub步骤:

1、地址:https://hub.docker.com/ ,先注册账号 2、保证账号可以正常登录

image-20230424151714735

3、使用 tag命令修改镜像名称

发布镜像到docker hub的规范是:

比如我这里的注册用户名是:pengan88,那就要先修改镜像名称

4、登录docker hub发布镜像:

5、访问docker hub可查看到已经发布成功

image-20230424152530278

 

3.4.2.2、发布镜像生成tar压缩包步骤:

以下方法都是在宿主机中操作,而非docker里面操作

1、方式一:docker export 和 docker import(从容器中导出压缩包)

通过docker ps -a 查询到容器的ID,使用以下命令将该容器生成压缩包

生成压缩包后使用docker import导入到镜像库

2、方式二:docker save 和 docker load(从镜像中导出压缩包)

通过docker images 查询镜像的名字和标签号,使用以下命令将该镜像生成压缩包

生成压缩包后使用docker load导入到镜像库

3、两种方式的区别

docker export 是从容器(container)中生成,docker save 是镜像(image)中生成。docker export 比 docker save 保存的包要小,原因是 save 保存的是一整个分层的文件系统,export 导出的只是容器一层文件系统。docker import 和 docker load 导入都会生成镜像。docker import 可以对镜像指定新名称及版本号,docker load 无法对镜像重命名。