Docker 镜像和容器的区别详解

 更新时间:2016年10月20日 14:28:52   投稿:lqh  
这篇文章主要介绍了Docker 镜像和容器的区别详解的相关资料,需要的朋友可以参考下

 最近学习Docker,被Docker 的镜像和容器搞的晕头转向,索性上网查找相关资料并整理下彻底的理解这块内容,有需要的小伙伴可以看下,少走点弯路。

Docker的镜像和容器的区别        

一、Docker镜像

要理解Docker镜像和Docker容器之间的区别,确实不容易。

假设Linux内核是第0层,那么无论怎么运行Docker,它都是运行于内核层之上的。这个Docker镜像,是一个只读的镜像,位于第1层,它不能被修改或不能保存状态。

一个Docker镜像可以构建于另一个Docker镜像之上,这种层叠关系可以是多层的。第1层的镜像层我们称之为基础镜像(Base Image),其他层的镜像(除了最顶层)我们称之为父层镜像(Parent Image)。这些镜像继承了他们的父层镜像的所有属性和设置,并在Dockerfile中添加了自己的配置。

Docker镜像通过镜像ID进行识别。镜像ID是一个64字符的十六进制的字符串。但是当我们运行镜像时,通常我们不会使用镜像ID来引用镜像,而是使用镜像名来引用。要列出本地所有有效的镜像,可以使用命令

# docker images

镜像可以发布为不同的版本,这种机制我们称之为标签(Tag)。

如上图所示,neo4j镜像有两个版本:lastest版本和2.1.5版本。

可以使用pull命令加上指定的标签:

# docker pull ubuntu:14.04
# docker pull ubuntu:12.04

二、Docker容器

Docker容器可以使用命令创建:

# docker run imagename

它会在所有的镜像层之上增加一个可写层。这个可写层有运行在CPU上的进程,而且有两个不同的状态:运行态(Running)和退出态(Exited)。这就是Docker容器。当我们使用docker run启动容器,Docker容器就进入运行态,当我们停止Docker容器时,它就进入退出态。

当我们有一个正在运行的Docker容器时,从运行态到停止态,我们对它所做的一切变更都会永久地写到容器的文件系统中。要切记,对容器的变更是写入到容器的文件系统的,而不是写入到Docker镜像中的。

我们可以用同一个镜像启动多个Docker容器,这些容器启动后都是活动的,彼此还是相互隔离的。我们对其中一个容器所做的变更只会局限于那个容器本身。

如果对容器的底层镜像进行修改,那么当前正在运行的容器是不受影响的,不会发生自动更新现象。

如果想更新容器到其镜像的新版本,那么必须当心,确保我们是以正确的方式构建了数据结构,否则我们可能会导致损失容器中所有数据的后果。

64字符的十六进制的字符串来定义容器ID,它是容器的唯一标识符。容器之间的交互是依靠容器ID识别的,由于容器ID的字符太长,我们通常只需键入容器ID的前4个字符即可。当然,我们还可以使用容器名,但显然用4字符的容器ID更为简便。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • Docker容器时间与宿主机不一致/宿主机时间不同步校验问题

    Docker容器时间与宿主机不一致/宿主机时间不同步校验问题

    在Docker容器中,若未单独配置localtime,可能导致时间与宿主机不一致,例如UTC与CST(东八区)相差8小时,解决方法包括在启动时通过docker run添加时间参数,使用Dockerfile设置,或通过docker-compose配置,对于已运行的容器
    2024-10-10
  • Docker desktop安装mysql过程

    Docker desktop安装mysql过程

    文章介绍了如何在本地已有的Docker环境中拉取并启动MySQL容器,并详细说明了常用的环境变量参数,此外,还讨论了如何通过挂接本地磁盘来持久化MySQL数据,从而避免数据丢失
    2024-12-12
  • python脚本在docker上运行的方法

    python脚本在docker上运行的方法

    在本篇文章里小编给各位分享的是关于python脚本在docker上运行的方法内容,有需要的朋友们可以学习下。
    2020-03-03
  • docker firewalld 防火墙设置方式

    docker firewalld 防火墙设置方式

    在CentOS7中,Docker默认修改防火墙配置,可能导致手动添加的策略失效,解决方法包括启用firewalld,禁用Docker的iptables,并重新配置防火墙策略,具体步骤包括编辑/etc/docker/daemon.json文件,重启Docker服务,以及在firewalld中设置伪装地址和端口策略
    2024-10-10
  • Docker容器的使用方法简单示例

    Docker容器的使用方法简单示例

    这篇文章主要介绍了Docker容器的使用方法简单示例,包括拉取镜像、运行镜像、测试容器内的应用、检查主机端口及停止容器的操作方法,本文给大家介绍的非常详细,需要的朋友可以参考下
    2021-07-07
  • 利用Docker搭建Laravel开发环境的完整步骤

    利用Docker搭建Laravel开发环境的完整步骤

    这篇文章主要给大家介绍了关于如何利用Docker搭建Laravel开发环境的完整步骤,文中通过示例代码介绍的非常详细,对大家学习或者使用Laravel具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • 通过Dockerfile构建Docker镜像的方法步骤

    通过Dockerfile构建Docker镜像的方法步骤

    这篇文章主要介绍了通过Dockerfile构建Docker镜像的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • 限制 docker 使用cpu的常见方式

    限制 docker 使用cpu的常见方式

    在 Docker 中可以使用多种方法来限制容器对 CPU 的使用,下面给大家分享如何限制 docker 使用cpu,感兴趣的朋友跟随小编一起看看吧
    2024-07-07
  • Docker单机部署Doris超详细图文教程

    Docker单机部署Doris超详细图文教程

    Apache Doris是一款基于MPP架构的分析型数据库,由百度大数据部研发,支持亚秒级响应时间的实时数据分析,本文旨在为学习Doris的同学提供一个快速的操作指引,以便更高效地挖掘数据背后的价值,对docker 部署Doris 数据库使用感兴趣的朋友跟随小编一起看看吧
    2024-09-09
  • docker使用jdk21启动jar包报错的解决方案

    docker使用jdk21启动jar包报错的解决方案

    这篇文章主要介绍了docker使用jdk21启动jar包报错的解决方案,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-07-07

最新评论