一、仓库(repository),镜像(image),容器(container)的关系
Docker 是一个开源的C/S架构应用容器引擎(客户端(client)和服务端(server)),让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。码头工人开发最佳实践 |码头工人文档 (docker.com)
关于容器和镜像的定义,官网的解释如下:
简单来说,容器是用镜像创建的运行实例。而镜像是一个打包好带上环境的项目。(PS:一个镜像可以创建多个容器,跟一个类可以创建多个对象是一个道理)
每个容器都可以被启动,开始,停止,删除,同时容器之间相互隔离,保证应用运行期间的安全。我们可以把容器理解为一个精简版的linux操作系统,包括root用户权限,进程空间,用户空间和网络空间等等这些,然后加上再它之上运行的应用程序。
比如我们现在基于mysql镜像创建了一个容器,那么,这个容器其实并不是只有一个mysql程序,而是mysql同样也是安装运行在我们容器内的linux环境中的。
镜像是 Docker 运行容器的前提,仓库是存放镜像的场所(分别公有仓库)。当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。
二、常用命令
镜像相关的命令:
使用 docker images 来列出本地主机上的镜像
- REPOSITORY:表示镜像的仓库源
- TAG:镜像的标签, 同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本
- IMAGE ID:镜像ID
- CREATED:镜像创建时间
- SIZE:镜像大小
使用 docker search 命令来搜索镜像 (docker ps 是列出容器)
- NAME: 镜像仓库源的名称
- DESCRIPTION: 镜像的描述
- OFFICIAL: 是否 docker 官方发布
- STARS: 类似 Github 里面的 star,表示点赞。
- AUTOMATED: 自动构建。
使用docker pull 来拉取镜像
使用 docker rmi 删除镜像(这里需要注意一下,可以看到提示信息,无法删除该镜像,因为有容器正在引用他!除非通过添加 -f
子命令,也就是强制删除,才能移除掉该镜像!
但是,我们一般不推荐这样暴力的做法,正确的做法应该是:
- 先删除引用这个镜像的容器;
- 再删除这个镜像;)