Docker系列(4) 基本命令

1 阅读3分钟

本文介绍Docker的基本命令以及相关的概念,首先先上一张Docker命令的思维导图

Docker命令分类

image.png 根据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命令使用出发,梳理出如下命令结构图:

image.png

Docker镜像(image)

什么是Docker镜像?作为一名研发人员,可以把镜像理解为类(class)。

类似于Maven私服,Docker也有一个远程仓库地址,名字叫做Docker Hub hub.docker.com/ ,当然也有对应的私服地址,这点后面会讲。

通过拉取动作(pull) 会将镜像下载到本地Docker主机,然后可以使用该镜像启动一个或者多个容器。

镜像有多个组成,每层叠加之后,从外部看来就如一个独立的对象。镜像内部是一个精简的操作系统(OS),同时还包含应用运行时所必须的文件和依赖包。

因为容器的设计初衷就是快速和小巧,所以镜像通常都比较小。

前面多次提到镜像就像停止运行的容器(类)。实际上,可以停止某个容器的运行,并从中创建新的镜像。

在该前提下,镜像可以理解为一种构建时(build-time)结构,而容器可以理解为一种运行时(run-time)结构,如下图所示。

image.png

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;