1.Docker图像
理解Docker图像和Docker容器的区别真的不容易。
假设Linux内核是第0层,那么无论Docker如何运行,都是运行在内核层。此Docker图像是只读图像,位于1级,不能修改或保存。
一个Docker图像可以建立在另一个Docker图像之上,并且这种级联关系可以是多层的。层1的镜像层被称为基础镜像(Base
Image),其他层(除了顶层)的镜像我们称之为母层镜像(Parent
图片).这些镜像继承其父镜像的所有属性和设置,并在Dockerfile中添加它们自己的配置。
Docker图像由图像ID标识。镜像ID是64个字符的十六进制字符串。但是我们在运行镜像的时候,通常不是用镜像ID来指代镜像,而是用镜像名称来指代。要列出所有有效的本地镜像,可以使用命令。
# docker图像
图片可以发布不同的版本,这个机制叫做Tag。
如上图所示,次映像有两个版本:最新版本和2.1.5版本。
您可以使用pull命令添加指定的标签:
# docker pull ubuntu:14.04
# docker pull ubuntu:12.04
第二,Docker容器
可以使用以下命令创建Docker容器:
# docker运行映像名称
它将在所有镜像层的顶部添加一个可写层。这个可写层有运行在CPU上的进程,有两种不同的状态:运行和退出。这是码头集装箱。当我们使用docker时
启动运行容器,Docker容器将进入运行状态,当我们停止Docker容器时,它将进入退出状态。
当我们有一个正在运行的Docker容器时,从运行状态到停止状态,我们对它所做的所有更改都将被永久写入容器的文件系统中。请记住,对容器的更改被写入容器的文件系统,而不是Docker映像。
我们可以用相同的图像启动多个Docker容器。这些容器都是活动的,启动后相互隔离。我们对其中一个容器所做的更改将仅限于该容器本身。
如果容器的基础映像被修改,当前运行的容器将不会受到影响,自动更新也不会发生。
如果您想将容器更新到其镜像的新版本,您必须小心确保我们以正确的方式构建了数据结构,否则我们可能会丢失容器中的所有数据。
64个字符的十六进制字符串,用于定义容器ID,这是容器的唯一标识符。容器之间的交互依赖于容器ID。因为容器ID的字符太长,我们通常只需要输入容器ID的前4个字符。当然,我们也可以使用容器名,但显然使用4个字符的容器ID更容易。