本文介绍Docker的基本命令以及相关的概念,首先先上一张Docker命令的思维导图
Docker命令分类
根据Docker官网案例,总的来说分为一下几种:
- Docker环境信息 — docker [info|version]
- 容器生命周期管理 — docker[create|exec|run|start|stop|restart|kill|rm|pause|unpause]
- 容器操作管理 — docker [ps|inspect|top|attach|wait|export|port|rename|stat]
- 容器rootfs命令 — docker [commit|cp|diff]
- 镜像仓库 — docker [login|pull|push|search]
- 本地镜像管理 — docker [build|images|rmi|tag|save|import|load]
- 容器资源管理 — docker [volume|network]
- 系统日志信息 — docker [events|history|logs]
官网地址:docs.docker.com/engine/refe…
从docker命令使用出发,梳理出如下命令结构图:
Docker镜像(image)
什么是Docker镜像?作为一名研发人员,可以把镜像理解为类(class)。
类似于Maven私服,Docker也有一个远程仓库地址,名字叫做Docker Hub hub.docker.com/ ,当然也有对应的私服地址,这点后面会讲。
通过拉取动作(pull) 会将镜像下载到本地Docker主机,然后可以使用该镜像启动一个或者多个容器。
镜像有多个层
组成,每层叠加之后,从外部看来就如一个独立的对象。镜像内部是一个精简的操作系统(OS),同时还包含应用运行时所必须的文件和依赖包。
因为容器的设计初衷就是快速和小巧,所以镜像通常都比较小。
前面多次提到镜像就像停止运行的容器(类)。实际上,可以停止某个容器的运行,并从中创建新的镜像。
在该前提下,镜像可以理解为一种构建时(build-time)结构
,而容器可以理解为一种运行时(run-time)结构
,如下图所示。
Docker镜像常用命令
pull命令
- 下载镜像的命令。镜像从远程镜像仓库服务的仓库中下载。默认情况下,镜像会从 Docker Hub 的仓库中拉取。
- 通过下载过程,可以看到,一个镜像一般是由多个层组成,类似 f7e2b70d04ae 这样的串表示层的唯一 ID。
# 安装tomcat
docker pull tomcat:9.0.20-jre8
# 安装centos
docker pull centos:7.8.2003
# 安装ubuntu
docker pull ubuntu:20.04
问题一: 如果多个不同的镜像中,同时包含了同一个层,这样重复下载,会导致空间浪费么?
Docker在下载之前会去检测本地是否会有同样ID的层,如果本地已经存在了,就直接使用本地
问题二: 不同仓库中,可能也会存在镜像重名的情况发生, 这种情况咋办?
从严格意义上讲,我们在使用 pull命令时,还需要在镜像前面指定仓库地址(Registry), 如果不指定,则Docker 会使用您默认配置的仓库地址。例如上面,由于我配置的是国内 docker.io的仓库地址,我在pull 的时候,docker 会默认为我加上 docker.io/library 的前缀。
例如:当我执行 docker pull tomcat:9.0.20-jre8
命令时,实际上相当于 docker pull docker.io/tomcat:9.0.20-jre8
如果您未自定义配置仓库,则默认在下载的时候,会在镜像前面加上DockerHub 的地址。Docker 通过前缀地址的不同,来保证不同仓库中,重名镜像的唯一性。
常用参数
-a, --all-tags=true|false
: 是否获取仓库中所有镜像,默认为否;--disable-content-trust
: 跳过镜像内容的校验,默认为 true;