docker设想是交付运行环境如同海运,OS如同一个货轮,每一个在OS基础上的软件都如同一个集装箱,用户可以通过标准化手段自由组装运行环境,同时集装箱的内容可以由用户自定义,也可以由专业人员制造。
在容器技术出现之前都是使用虚拟机技术
虚拟机:使用一个软件,通过这个软件可以虚拟出来一台或者多台电脑。
docker容器技术,也是一种虚拟化技术。
比较Docker和虚拟机的不同:

就是存放镜像的地方。仓库分为共有仓库和私有仓库。
目前就可以把这个容器理解为就是一个简易的Linux系统
容器是图像的可运行实例。Docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建的。
启动,停止,删除,基本命令
Docker 使用一种称为容器namespaces的技术来提供隔离的工作空间。当您运行容器时,Docker 会为该容器创建一组 命名空间。
这些命名空间提供了一层隔离。容器的每个方面都在单独的命名空间中运行,并且它的访问权限仅限于该命名空间。
当一个容器运行时,它使用图像中的各个层作为其文件系统。每个容器还有自己的“暂存空间”来创建/更新/删除文件。任何更改都不会在另一个容器中看到,即使它们使用相同的图像。
容器数据的暂存
默认情况下,将其数据存储在容器文件系统中的SQLite 数据库中。/etc/todos/todo.db
其中所有数据都存储在一个文件中。虽然这对于大型应用程序来说不是最好的,但它适用于小型演示。
通过创建一个卷并将其附加(通常称为“挂载”)到存储数据的目录,我们可以持久化数据
当我们的容器写入todo.db文件时,它将被持久化到卷中的主机。
数据卷可在容器之间共享或重用数据
数据卷中的更改不会包含在镜像的更新中
卷中的更改可以直接生效
数据卷的生命周期一直持续到没有容器使用它为止
默认 Docker 引擎安装支持的两种主要卷类型
使用了一个命名卷来将数据持久化到我们的数据库中。如果我们只是想存储数据,命名卷非常好,因为我们不必担心数据存储在哪里。
-v 卷名:容器内路径
-v 容器内路径
使用绑定挂载,我们可以控制主机上的确切挂载点。我们可以使用它来持久化数据,但它通常用于向容器中提供额外的数据。
-v 宿主机路径:容器内路径
docker volume inspect 卷名
Mountpoint是存储数据的磁盘上的实际位置。请注意,在大多数机器上,您需要具有 root 访问权限才能从主机访问此目录。
在 Docker Desktop 中运行时,Docker 命令实际上是在您机器上的一个小型 VM 中运行。如果您想查看 Mountpoint 目录的实际内容,您需要首先进入 VM。
如果是使用windows11 + WSL2 ,那么卷的存放路径如下:
\\wsl.localhost\docker-desktop-data\version-pack-data\community\docker\volumes
docker volume create 卷名 #创建数据卷
docker volume inspect 卷名 #显示数据卷的详细信息
docker volume ls #列出所有的数据卷
prune #删除所有未使用的 volumes,并且有 -f 选项
rm #删除一个或多个未使用的 volumes,并且有 -f 选项
每个容器都有自己的IP地址,不同容器之间要通信需要在同一网络上
docker network create 网络名
可以看到用于在图像中创建每个图层的命令。
docker image history 镜像名
每条线代表图像中的一层。此处的显示在底部显示基础,在顶部显示最新层。使用它,您还可以快速查看每一层的大小,帮助诊断大图像。
获得完整的输出
docker image history --no-trunc 镜像名
一旦层发生变化,所有下游层也必须重新创建