这篇转载别人的,类比的相当不错,有助于理解docker

首先说明一下,这是一位 docker 新手对于 docker 的粗浅理解。如有不对还请谅解。我很早之前就尝试过使用 docker,然而由于术语的差异,导致我每次运行东西时都傻乎乎地创建了一个新的容器……现在感觉用法终于是弄对了,所以整理一下,将其类比到 Linux 上的普通软件的概念上。

image

相当于软件分发中的软件(安装)包。

Dockerfile

跟 PKGBUILD 类似,是用于制作一个 image 的打包脚本。用 docker build -t name:tag . 就可以制作。

container(容器)

一个容器就像是一个安装好了的软件包。该软件已经准备好,随时可以运行了。

docker run

「安装」指定的 image。也就是从 image 制作出容器来,顺带着进行首次运行。如果反复使用,会把同一个软件给安装多次。

docker start

就像是「运行」一个已经安装好的软件,容器跑起来了。之前容器的状态(文件的修改)也会生效。

docker ps

列出运行中或者已安装(带 -a 参数)的软件们。前者和 UNIX 命令 ps 类似,后者则没什么相似之处了。

docker exec

在正在运行的软件的环境内执行命令。有点类似于 ssh。

repository

跟 Linux 的包含众多软件的软件源并不一样。这个东西跟软件名类似,用于标识为特定功能的 image 集。发布出来的 repository 名的格式通常是 owner/name,跟 GitHub 差不多的。

tag

软件的版本,跟什么 lite、pro、beta 之类区分类似。它并不是用于分类的标签,也不是 git 中对于指定版本的不变的称呼。它更像是 git 的分支在某些情况下的作用,比如 latest tag 就跟 git 仓库的 master 分支一样,总是指向最新的版本。
我经过以上这样的映射之后,docker 理解起来就容易多了,行为也更符合预期。


zjinc36
141 声望8 粉丝

世界是辩证唯物的