docker镜像讲解(代码片段)

疯狂小公举 疯狂小公举     2023-01-07     411

关键词:

镜像是什么

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

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

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

分层理解

分层的镜像

我们可以去下载一个镜像,注意观察下载的日志输出,可以看到是一层一层的在下载
思考:为什么Docker镜像要采用这种分层的结构呢?
最大的好处,我觉得莫过于是资源共享了!比如有多个镜像都从相同的Base镜像构建而来,那么宿主机
只需在磁盘上保留一份base镜像,同时内存中也只需要加载一份base镜像,这样就可以为所有的容器服
务了,而且镜像的每一层都可以被共享。

理解:
所有的 Docker 镜像都起始于一个基础镜像层,当进行修改或增加新的内容时,就会在当前镜像层之
上,创建新的镜像层。
特点
Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部!
这一层就是我们通常说的容器层,容器之下的都叫镜像层!

镜像Commit

docker commit 从容器创建一个新的镜像。

docker commit 提交容器副本使之成为一个新的镜像!
#语法
docker commit -m=“提交的描述信息” -a=“作者” 容器id 要创建的目标镜像名:[标签名]

例子

  docker commit -a="zhangzheng" -m="add webapps app" d9c41b73705c tomcat02:1.0

测试案例tomcat镜像提交

1、从Docker Hub 下载tomcat镜像到本地并运行 -it 交互终端 -p 端口映射

 docker run -it -p 8080:8080 tomcat

注意:坑爹:docker启动官方tomcat镜像的容器,发现404是因为使用了加速器,而加速器里的 tomcat的webapps下没有root等文件! # 下载tomcat官方镜像,就是这个镜像(阿里云里的tomcat的webapps下没有任何文件) # 进入tomcat查看cd到webapps下发现全部空的,反而有个webapps.dist里有对应文件,cp -r 到webapps下!

2、删除上一步镜像产生的tomcat容器的文档

docker ps # 查看容器id 
docker exec -it 容器id /bin/bash

cp -r webapps.dist/* webapps

exit 退出

docker commit -a="xiaozheng" -m="add webapps app" a2c08435915a tomcat02:1.0


镜像commit总结:

docker镜像讲解(代码片段)

...容,包括代码、运行时、库、环境变量和配置文件。Docker镜像加载原理UnionFS(联合文件系统)UnionFS(联合文件系统):Union文件系统( 查看详情

docker镜像讲解(代码片段)

...容,包括代码、运行时、库、环境变量和配置文件。Docker镜像加载原理UnionFS(联合文件系统)UnionFS(联合文件系统):Union文件系统( 查看详情

docker:docker常见命令(代码片段)

本篇文章主要讲解Docker中一些常见的命令。本机演示环境使用的是DockerDesttop和PowerShell,使用CMD命令行工具也可以。一、Docker容器信息1、查看docker容器版本使用下面的命令查看docker容器的版本信息:dockerversion 如下图所示:2... 查看详情

docker镜像之dockercompose讲解(代码片段)

文章目录1docker-compose1.1compose编排工具简介1.2安装docker-compose1.3编排启动镜像1.4haproxy代理后端docker容器1.5安装socat直接操作socket控制haproxy1.6compose中yml配置指令参考1.6.1简单命令1.6.2build1.6.3depends_on1.6.4deploy1.6.5logging1.6.6network_mode1.6.7s... 查看详情

docker讲解与实战,精炼易懂!(代码片段)

1、docker简介docker通过内核虚拟化技术(namespace及cgroups等)来提供容器的资源隔离与安全保障等,由于docker通过操作系统层的虚拟化实现隔离,所以docker容器在运行时,不需要类似虚拟机额外的操作系统开销,提供资源利用率2、... 查看详情

docker的学习第四天(代码片段)

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

docker基础命令详解——镜像及容器操作(代码片段)

Docker基础命令详解——镜像及容器操作前言?上篇文章介绍了有关Docker的基础与Linux下docker的安装,本文主要讲解安装docker后的基础使用方法以及命令的介绍,主要是docker镜像操作及容器操作命令。?当然,docker的相关命令非常多... 查看详情

dockerfile定制专属镜像|果断收藏(代码片段)

前言大家好,本文是对Docker自定义镜像的详细讲解,讲解了如何进行构建自己的Docker镜像以及Dockerfile的操作指令。希望对大家有所帮助~一、使用Dockerfile定制镜像1.1、Dockerfile定制镜像镜像的定制实际上就是定制每一层所... 查看详情

docker镜像(代码片段)

本文内容:什么是Docker镜像什么是rootfs什么是容器的一致性什么是Docker镜像Docker镜像是一个只读的Docker容器模板,含有启动Docker容器所需要的文件系统结构及其内容,是启动一个容器的基础。可以这么理解,Docker镜像是Docker容器... 查看详情

docker深入浅出系列教程——镜像管理外加视频(代码片段)

...的头条号,我们一起奇闻共赏,疑义相析。接下来来讲解Docker三大组件之一的镜像,如果说镜像是静态的只读文件,那么容器就是带有运行时需要的可写文件层。也可以这样理解,镜像是对象的模板——类,容器是类生成的... 查看详情

docker|第六章:构建私有仓库(代码片段)

前言上一章节,讲解了利用Dockerfile和commit进行自定义镜像的构建。大部分时候,公司运维或者实施部门在构建了符合公司业务的镜像环境后,一般上不会上传到公共资源库的。这就需要自己搭建一个私有仓库,来存放自己的镜... 查看详情

云原生生态圈:docker核心技术全面总结(代码片段)

...f01;大家一起学习,一起进步。本文将分别讲解什么是Docker,如何安装Docker,Docker的镜像操作,Docker容器操作,以实战为线索,逐步深入Docker相关知识,打造完整的Docker学习体系,可查阅,可复... 查看详情

docker搭建rabbitmq(代码片段)

...联网大厂还是中小企业都在大量使用。本文主要讲解使用Docker快速安装RabbitMQ。如果有对docker还不了解的小伙伴,数量多的话,以后我会再出个专题专门给大家讲解docker。         docker安装rabbitMQ&n... 查看详情

docker命令-dockerpull(代码片段)

dockerpull原文描述从镜像仓库拉取镜像。使用$dockerpull[options]name[:tag|@digest]name镜像名称后面可以跟上镜像标签或者镜像摘要,这些可以在接下来的内容中讲解。选项名称默认描述--all-tags,a 下载仓库所有镜像--disable-content-trusttru... 查看详情

dockerfile命令详细讲解(代码片段)

文章目录前言一、dockerfile命令1.FROM2.MAINTAINER3.LABEL4.ADD5.COPY6.EXPOSE7.ENV8.WORKDIR9.USER结尾前言Dockerfile是Docker用来构建镜像的文本文件,包括自定义的指令和格式。可以通过dockerbuild命令从Dockerfile中构建镜像。用户可以通过统一的语法... 查看详情

mongodb用docker安装一个mongodb最新版玩玩(代码片段)

1安装本文假设大家已经安装好了docker并能正常使用,所以不讲解如何安装docker了。用docker安装MongoDB最新版本如下:#从repository查找mongo的相关镜像,结果很多,其中第一条为官方的镜像$dockersearchmongo#下载官方镜像的最新版本$dock... 查看详情

docker学习笔记(代码片段)

目录一、 原理1、没使用Docker之前,所有应用共享Lib文件和内核2、使用之后,每个容器相当于单独的Linux操作系统,仅仅共享内核,也就是可以配置多个Tomcat应用3、原理讲解二、名词三、镜像查询原理图四、基本... 查看详情

docker镜像管理基础(代码片段)

docker镜像管理基础文章目录docker镜像管理基础镜像的概念docker镜像层docker存储驱动AUFSOverlayFSDeviceMapperdockerregistrydocker镜像的制作DockerHubdocker镜像的获取镜像的生成基于容器制作镜像镜像的概念镜像可以理解为应用程序的集装箱&#x... 查看详情