Docker基础和常用命令( 二 )


Docker 镜像并非是像一个 ISO 那样的打包文件 , 镜像只是一个虚拟的概念 , 其实际体现并非由一个文件组成 , 而是由一组文件系统组成 , 或者说 , 由多层文件系统联合组成 。其被设计为分层存储的架构 , 镜像构建时 , 会一层层构建 , 前一层是后一层的基础 。每一层构建完就不会再发生改变 , 后一层上的任何改变只发生在自己这一层 。分层存储的特征还使得镜像的复用、定制变的更为容易 。甚至可以用之前构建好的镜像作为基础层 , 然后进一步添加新的层 , 以定制自己所需的内容 , 构建新的镜像 。
2.2 , 容器镜像(Image)和容器(Container)的关系 , 类似面向对象程序设计中的类和实例的关系 。可以把 Docker容器(Container) 看做是一个简易版的 Linux 环境(包括 root 用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序 。它可以被启动、开始、停止、 删除 。
容器的实质是进程 , 但与直接在宿主执行的进程不同 , 容器进程运行于属于自己的独立的 命名空间 。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间 , 甚至自己的用户 ID 空间 。容器内的进程是运行在一个隔离的环境里 , 使用起来 , 就好像是在一个独立于宿主的系统下操作一样 。
容器和镜像一样都是使用分层存储 , 每一个容器运行时 , 是以镜像为基础层 , 在其上创建一个当前容器的存储层 , 我们可以称这个为容器运行时读写而准备的存储层为容器存储层 。
2.3 , 仓库镜像构建完成后 , 可以很容器的在当前宿主主机上运行 , 但是如果需要在其他服务器上使用这个镜像 , 我们就需要一个集中的存储、分发镜像的服务 , Docker Registry 就是这样的服务 。
一个 Docker Registry 中可以包含多个 仓库(Repository);每个仓库可以包含多个 标签(Tag);每个标签对应一个镜像 。
通常 , 一个仓库会包含同一个软件不同版本的镜像 , 而标签就常用于对应该软件的各个版本 。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像 。如下所示:
registry.sensetime.com/kestrel_tatraffic/kestrel_tatraffic:kestrel_cuda11_1.2.21_opencv3.4.13_with_ffmpeg
Docker仓库(Registry) 分为公开仓库(Public)和私有仓库(Private)两种形式 。最大的公开仓库是 Docker Hub ,  存放了数量庞大的镜像供用户下载 。国内的公开仓库包括 Docker Pool 等 , 可以提供大陆用户更稳定快速的访问 。私有仓库是指用户在本地搭建的私有 Docker Registry 。
三 , Docker 使用3.1 , Docker 服务安装 Docker 这里不做介绍 。以下是 Linux 系统下 , 一些 docker 使用命令:
1 , 查看 Docker 服务状态:使用 systemctl status docker 命令查看 Docker 服务的状态 。其中 Active: active (running) 即表示 Docker 服务为正在运行状态 。

Docker基础和常用命令

文章插图
2 , 停止 Docker 服务:使用 systemctl stop docker 命令 。
3 , 启动 Docker 服务:使用 systemctl start docker 命令 。
4 , 重启 Docker 服务:使用 systemctl restart docker 命令 。
5 , 测试 Docker 是否安装正确 。

经验总结扩展阅读