在Docker中,什么';容器和图像之间的区别是什么?

在Docker中,什么';容器和图像之间的区别是什么?,docker,terminology,Docker,Terminology,Docker中的容器和图像有什么区别?实际上,这两个术语都被使用,但我不理解其中的区别 有人能解释一下吗?映像是根文件系统更改和相应执行参数的有序集合,用于容器运行时。图像是只读的 容器是映像的活动(如果已退出,则为非活动)状态实例化 $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS

Docker中的容器和图像有什么区别?实际上,这两个术语都被使用,但我不理解其中的区别


有人能解释一下吗?

映像是根文件系统更改和相应执行参数的有序集合,用于容器运行时。图像是只读的

容器是映像的活动(如果已退出,则为非活动)状态实例化

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED              STATUS                          PORTS                      NAMES
abf181be4379        ubuntu:14.04        /bin/bash              17 seconds ago       Exited (0) 12 seconds ago                                  elegant_ardinghelli    
48cff2e9be75        ubuntu:14.04        /bin/bash              About a minute ago   Exited (0) 50 seconds ago                                  determined_pare        
...

图像是活动容器的冻结不可变快照。容器正在运行(或停止)某些映像的实例

从名为“ubuntu”的基本映像开始。让我们在ubuntu映像中以交互方式运行bash并创建一个文件。我们将使用
-i
-t
标志为我们提供一个交互式bashshell

$ docker run -i -t ubuntu  /bin/bash
root@48cff2e9be75:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@48cff2e9be75:/# cat > foo
This is a really important file!!!!
root@48cff2e9be75:/# exit
当您退出并重新启动映像时,不要期望该文件仍然存在。您正在从与以前完全相同的定义状态重新启动,而不是从停止的位置重新启动

$ docker run -i -t ubuntu  /bin/bash
root@abf181be4379:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@abf181be4379:/# exit
但是,现在不再运行的容器具有状态,可以保存(提交)到映像

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED              STATUS                          PORTS                      NAMES
abf181be4379        ubuntu:14.04        /bin/bash              17 seconds ago       Exited (0) 12 seconds ago                                  elegant_ardinghelli    
48cff2e9be75        ubuntu:14.04        /bin/bash              About a minute ago   Exited (0) 50 seconds ago                                  determined_pare        
...
让我们从创建文件的容器ID 48cff2e9be75创建一个图像:

$ docker commit 48cff2e9be75 ubuntu-foo
d0e4ae9a911d0243e95556e229c8e0873b623eeed4c7816268db090dfdd149c2
现在,我们有了一个新的图像和一个非常重要的文件:

$ docker run ubuntu-foo /bin/cat foo
This is a really important file!!!!

尝试使用命令
docker images
。你应该会看到你的新图片
ubuntufoo
和我们开始使用的标准图片
ubuntu
一起列出。

图片基本上是一个创建容器的不可变模板。通过考虑将图像转化为容器时图像会发生什么变化,更容易理解图像和容器之间的区别


Docker引擎获取图像并在顶部添加读写文件系统,然后初始化各种设置。这些设置包括网络选项(IP、端口等)、名称、ID和任何资源限制(CPU、内存)。如果要求Docker引擎运行容器,它还将初始化其中的进程。容器可以停止并重新启动,在这种情况下,它将保留所有设置和文件系统更改(但会丢失内存中的任何内容,并重新启动所有进程)。因此,停止或退出的容器与映像不同

使用面向对象编程类比,Docker映像和Docker容器之间的区别与类和对象之间的区别相同。对象是类的运行时实例。类似地,容器是映像的运行时实例

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED              STATUS                          PORTS                      NAMES
abf181be4379        ubuntu:14.04        /bin/bash              17 seconds ago       Exited (0) 12 seconds ago                                  elegant_ardinghelli    
48cff2e9be75        ubuntu:14.04        /bin/bash              About a minute ago   Exited (0) 50 seconds ago                                  determined_pare        
...
对象在实例化时只创建一次。类似地,容器可以运行或停止。容器是从图像中创建的,尽管情况可能并非总是如此。以下示例创建Apache服务器映像,运行映像,列出映像,然后列出容器:

  • 创建包含以下内容的Dockerfile:

    FROM httpd:2.4
    
  • 安装Apache服务器

    sudo docker build -t my-apache2 .
    
  • 运行映像

    sudo docker run -it --rm --name my-running-app my-apache2
    
  • 列出Docker图像

    sudo docker images
    
  • 列出正在运行的Docker容器

    docker ps
    
    docker ps -a
    
    docker ps -l
    
  • 列出所有容器

    docker ps
    
    docker ps -a
    
    docker ps -l
    
  • 列出最新创建的容器

    docker ps
    
    docker ps -a
    
    docker ps -l
    

  • 容器基于图像。需要将图像传递给Dockers运行命令

    例如:

    形象

    这里我们指定一个名为
    busybox
    的图像。Docker在本地没有此映像,并将其从公共注册表中提取


    注册表是Docker客户端可以与之通信并从中下载图像的Docker图像目录。拉取图像后,Docker启动一个容器并执行echo hello world命令。

    在Docker中,所有操作都以图像开始。映像是指构成操作系统的每一个文件,它们刚好足以完成您需要执行的操作。传统上,您会为每个应用程序安装一个完整的操作系统。有了Docker,你可以把它配对,这样你就有了一个小容器,里面有足够的操作系统来做你需要做的事情,你可以在一台计算机上高效地拥有很多这样的东西

    使用
    docker images
    查看已安装的图像,使用
    docker ps
    查看正在运行的图像。 当您键入
    docker run
    时,它会获取图像,并使其成为具有运行进程的活动容器。我倾向于使用:

    docker run-ti
    bash

    最后,图像有自己的ID集,容器有自己的ID集-它们不重叠

    图像[如虚拟机]
    • 用于创建容器的只读模板
    • 由您或其他Docker用户创建
    • 存储在Docker Hub或本地注册表中
    容器[像运转的机器]
    • 独立应用平台
    • 包含运行应用程序所需的所有内容
    • 基于图像
    用简单的话来说

    图像-

    文件系统和配置(只读)应用程序,用于 创建容器

    容器-

    这些是Docker映像的运行实例。容器运行实际的 应用。容器包括一个应用程序及其所有组件 依赖关系。它与其他容器共享内核,并作为 主机操作系统上用户空间中的隔离进程


    其他需要注意的重要条款:


    Docker守护进程-

    在管理建筑的主机上运行的后台服务, 运行和分发Docker容器

    Docker客户端-

    允许用户与Docker交互的命令行工具 守护进程

    Docker商店-

    除其他外,Store是Docker图像的注册表。你可以 将注册表视为所有可用Docker映像的目录


    一幅画抵得上千言万语

    <