很多刚刚接触容器技术的朋友,不容易弄清楚容器,容器镜像和Docker这几个词的区别和联系。
我们首先来看容器和容器镜像。举个例子,执行命令行docker search nginx,搜索结果的一条条记录就是一个个容器镜像。
所谓镜像,就是一个静态概念,一个镜像由若干只读层(read-only layer)构成。
上图左边是Docker镜像的内部实现细节,我们能看到多个只读层叠加在一起,层与层之间通过指针关联,这些层能够在运行Docker的宿主机的文件系统上访问到。
Linux的统一文件系统(union file system)技术将这些叠加的只读层合并成一个文件系统,该系统为这些只读层提供了一个统一的视角,从而为Docker的用户隐藏了多层的存在。
从Docker用户的视角出发,一个Docker镜像只存在一个文件系统,即上图右边所示。
这些文件系统的设计是Docker实现细节,一般情况下我们不用去深究。但如果您足够好奇,使用命令sudo tree浏览目录 /var/lib/docker即可:
比如我用命令docker images浏览下载到本地的docker镜像:
其中一个叫jerry-nginx的镜像,是一个web应用,它的所有内容能在/var/lib/docker目录下的这个目录查到:
讲完了容器镜像,我们再来看容器。
容器和容器镜像一样,也是若干层的叠加,唯一区别是所有只读层的最上面一层,是一层可读可写层,如上图绿色图例所示。
初学者可以记住这个简单的公式:容器 = 容器镜像 + 可读可写层
我们如果用命令docker ps --all查看本机所有容器列表,会发现有的容器处于运行状态,有的处于退出状态。
因此,一个处于运行状态的容器(running container)包含一个可读写的文件系统加上隔离的进程空间。
容器里的进程可以对这个可读写文件系统内的文件进行修改、删除、创建等操作。
镜像里每一层其实都能在docker文件夹的containers子目录下找到:
上图每一个红色文件夹代表镜像里的一层,蓝色文件包含了该层运行时的日志文件,或者网络相关配置等。
做个实验:
ubuntu这个容器执行结束后,使用find / -name i042416.txt文件,这说明docker运行时能对宿主机的文件系统进行写操作。
下面分析几个常用的易混淆的命令。
docker create <image-id>
先看它的帮助文档:
试着执行以下:
产生一个输出id:
7ee10851c3f1e53bbd35e5f196f34de560afa1a20d9bf1ced587630dbcda877b
create创建的容器,状态变为created:
docker create命令给通过命令行传入的容器镜像创建了一个新的可读可写层,从而生成了一个新的容器实例:
然后再执行docker start,输入docker create创建的容器实例ID,就可以启动这个容器实例了。
而docker run其实就是docker create和docker start这两个命令合二为一的版本。
希望这篇文章能帮助大家理解容器和容器镜像的区别。
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
相关推荐
由于ARM架构的多样性和广泛性,针对不同版本的ARM处理器,BusyBox的ARM平台容器镜像也会有所差异,以确保最优的性能和兼容性。 在开发和部署时,ARM平台容器镜像提供了一个预配置好的环境,这意味着开发人员可以在...
但基于标题和描述中提供的信息,我们可以深入探讨关于alpine ARM版本容器镜像的相关知识点。 首先,Alpine是一种轻量级的Linux发行版,其特点在于占用资源极少,这使得它非常适合用作容器技术的基础镜像。容器技术...
因此,在使用nginx ARM平台容器镜像之前,开发者和系统管理员需要确认容器镜像是针对所使用的ARM处理器版本进行优化的,这样才能确保nginx服务能够在特定的硬件上发挥出最佳性能。 nginx ARM平台容器镜像是一个专门...
该方法可以提高 Docker 容器镜像的更新效率,减少更新过程中的网络带宽占用和服务器负载。 知识点1: Docker 容器镜像增量更新的必要性 在实际应用中,Docker 容器镜像的更新是非常必要的。由于 Docker 容器镜像的...
基础容器镜像,不到10兆,适合部署微服务
而OpenJDK作为开源的Java开发平台,其ARM平台的容器镜像对于开发者而言,意味着能够在ARM架构的设备上构建和运行Java应用程序。 OpenJDK ARM平台容器镜像的推出,为开发者提供了一个预配置、可移植、轻量级的Java...
深入Docker的镜像,容器和仓库以及测试下的Docker
docker docker _ 容器和镜像的区别
容器镜像就是包含了应用程序运行所需的所有依赖和配置的文件集合,它定义了容器在启动时的行为和状态。 CentOS(Community ENTerprise Operating System)是一个基于Red Hat Enterprise Linux(RHEL)构建的开源...
使用IDEA编辑器远程管理docker镜像及容器服务,可以实现 docker容器和镜像的基本操作,例如启动、停止、删除容器,创建、删除镜像等。 七、结论 使用IDEA远程管理docker镜像及容器服务,可以实现docker容器和镜像...
Nginx的官方容器镜像可以在Docker Hub这样的容器镜像仓库中找到,它为开发者和运维人员提供了极大的便利,无需从源代码开始编译安装,大大简化了部署流程。 使用官方容器镜像的好处在于,用户可以确信他们正在运行...
然后深入探讨了镜像的创建、加速配置、常用管理命令,容器的创建选项、数据持久化方式和网络配置。最后介绍了通过Dockerfile自动化构建镜像的方法,并讲解了Harbor这一企业级镜像仓库的部署和基本使用方法。 适合...
本文将详细介绍 Docker 容器与镜像的使用方法,包括获取镜像、启动容器、停止容器、导入和导出容器等操作。 获取镜像 使用 `docker pull` 命令可以获取指定的镜像。例如,要获取 Ubuntu 的镜像,可以使用以下命令...
于是,我花了几周的时间来学习Docker的工作原理,更确切地说,是关于Docker统一文件系统(the union file system)的知识,然后回过头来
Rocky Linux容器镜像的推广和使用,不仅为开源社区和企业用户提供了一个稳定、可靠的操作系统选项,还通过容器技术加强了软件开发的效率和应用部署的灵活性,对于推动企业IT架构现代化和云原生应用的开发具有重要...
2.2导入容器镜像 4 2.3运行该镜像(带上command参数) 4 3、生成容器快照镜像 4 四、使用dockerfile制作镜像创建器 4 1、构建Nginx环境镜像 5 1.1 准备文件 5 1.2 创建dockerfile文件 5 1.3构建nginx镜像 5 1.4创建...
镜像安全是指保护容器镜像免受攻击和篡改。这个过程包括了多个方面: * 持续扫描所有镜像以发现安全漏洞。 * 只部署经验证签名的镜像。 * 使用私有镜像仓库,并限制公共镜像仓库的使用。 * 维护标准基本镜像,并...
Gitea Docker容器镜像 版本号:1.22.1版本 Gitea是一个轻量级的全功能DevSecOps平台软件,旨在从开发计划到产品成型的整个软件生命周期中提供高效且轻松的帮助。它支持代码托管、代码审查、CI/CD、项目管理等...
手把手打镜像并运行到k8s容器上(亲测可用) 博客地址:https://blog.csdn.net/qq_36963950/article/details/125036352 第一个示例:wordpress博客系统 第二个示例:自己写一个springboot项目生成镜像部署到K8S集群...
开发者可以通过docker命令来管理镜像和容器,如拉取镜像、创建容器、启动容器、停止容器、删除容器等。同时,docker还提供了丰富的工具和插件,可以帮助开发者更方便地管理和维护容器。 Ubuntu 20.04 ARM64 docker...