在Docker中,什么';容器和图像之间的区别是什么?
Docker中的容器和图像有什么区别?实际上,这两个术语都被使用,但我不理解其中的区别在Docker中,什么';容器和图像之间的区别是什么?,docker,terminology,Docker,Terminology,Docker中的容器和图像有什么区别?实际上,这两个术语都被使用,但我不理解其中的区别 有人能解释一下吗?映像是根文件系统更改和相应执行参数的有序集合,用于容器运行时。图像是只读的 容器是映像的活动(如果已退出,则为非活动)状态实例化 $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS
有人能解释一下吗?映像是根文件系统更改和相应执行参数的有序集合,用于容器运行时。图像是只读的
$ 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
...
-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服务器映像,运行映像,列出映像,然后列出容器:
FROM httpd:2.4
sudo docker build -t my-apache2 .
sudo docker run -it --rm --name my-running-app my-apache2
sudo docker images
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商店- 除其他外,Store是Docker图像的注册表。你可以 将注册表视为所有可用Docker映像的目录
一幅画抵得上千言万语 <