docker 基本操作
概述
在介绍 Docker 的基本操作之前,我们先行简单介绍一下 Docker Engine。
Docker Engine 是一个 客户端/服务器 应用,具有如下重要组件:
- 一个服务器,它是一种长期运行的程序,也称为守护进程 (daemon process)。
- 一套 REST API,实现与守护进程的通信。
- 一套命令行接口 (Command Line Interface),可实现客户端与服务器的通信。
借助于脚本或 CLI 命令,CLI 间接使用 REST API 以实现与服务器的交互 (这种间接关系也可从上图直观看到)。
日常应用之中,我们主要使用 CLI 命令。因此,在本文之中,我们简单介绍 image、container、registry (Docker 的三大组成部分) 的相关操作。
两种方式可查看具体 CLI 命令:其一,网站 https://docs.docker.com/reference/ ;其二,bash 窗口下使用命令
docker xxx --help。
image (镜像)
image 是一个只读文件,基于此可创建 container。为方便理解,可将其视为程序代码;同样地,container 可视为程序代码运行后对应的进程。
image 对应的 CLI 命令可使用 docker image --help 进行查看:
1 | Usage: docker image COMMAND |
根据命令功能将它们分门别类,并简要介绍如下:
构建相关
build–> 根据 Dockerfile 配置文件,构建一个image。import–> 根据归档文件内容,创建一个image(export后续会介绍)。load–> 根据归档文件或标准输入流内容,创建一个image。save–> 保存一个或多个image至标准输出流或归档文件。pull–> 从registry处拉取一个image(registry后续会介绍)。push–> 上传一个image至registry。save/load互为一组命令,保存image至归档文件,然后加载归档文件为image,其中归档文件不仅保有image的具体内容,也保有image的各种元数据、历史记录。import/export互为一组命令,导出容器至归档文件,然后导入归档文件为image,其中归档文件仅保存容器状态 (类似于虚拟机快照),而不保存任何额外信息。因此,相较于基于export得到的归档文件,基于save得到的归档文件所占容量往往偏大。查看相关
ls–> 列举所有image。inspect–> 显示一个或多个image的详细信息。history–> 显示一个image的历史操作记录。修改相关
tag–> 为指定image创建一个标签。删除相关
rm–> 删除一个或多个image。prune–> 删除无用的image(默认指代 dangling image)。官网解释:A dangling image is one that is not tagged and is not referenced by any container。我们在此说明使用过程中产生 dangling image 的一种情景:编写
image构建脚本并运行它,我们将得到一个image;假定修改脚本相关配置但是不修改镜像名和标签,此时再次运行脚本,我们将再次得到一个image。此时第一个image便成为 dangling image,使用docker image ls命令,我们将会得到如下内容 (第一个image所对应标识被清空,并被置为<none>):1
2
3REPOSITORY TAG IMAGE ID ...
image 0.0.3 e5d7b72aad05 ...
<none> <none> 8e2b049f9783 ...对于
prune命令而言,如果指定-a参数,同样会删除未被任何容器引用的image。
container (容器)
container 是 image 的运行实例。它对应的 CLI 命令可使用 docker container --help 进行查看:
1 | Usage: docker container COMMAND |
根据命令功能将它们分门别类,并简要介绍如下:
构建相关
create–> 基于某个image创建一个container。export–> 保存容器内容至一个归档文件。commit–> 基于当前容器构建一个image。运行相关
run–> 基于某个image创建container,并运行它。attach–> 链接本地标准输入、输出、错误流至一个运行的container。exec–> 在运行的container中运行指定命令。start–> 启动运行指定container。pause–> 暂停运行指定container。unpause–> 恢复运行指定container。stop–> 停止运行指定container,其首先发送 SIGTERM 信号至容器,等待一段时间后,发送 SIGKILL 信号以终止容器。kill–> 终止运行指定container,其直接发送 SIGKILL 信号以终止容器。restart–> 重启运行指定container。wait–> 阻塞运行指定container,当容器停止运行时,将打印其退出码。查看相关
ls–> 列举所有container。inspect–> 显示一个或多个container的详细信息。logs–> 获取指定container的日志信息。diff–> 检查指定container文件系统哪些部分发生改动。port–> 显示指定container的端口映射信息。stats–> 显示指定container的资源统计信息。top–> 显示指定container中各运行进程信息。删除相关
rm–> 删除一个或多个container。prune–> 删除已停止的container。其他
cp–> 在本机与指定container间拷贝文件或文件夹。rename–> 重命名指定container。update–> 更新一个或多个container的配置信息。
容器属于 Docker 的核心组成部分,其运行往往存在众多参数可选。这些参数主要分为四类:与容器运行模式相关、与容器环境配置相关、与容器资源限制相关、安全保护相关。
下面简要介绍若干重要参数:
--detach–> 是否后台运行容器。--interactive–> 始终保持标准输入打开。--net–> 指定容器所处网络。--publish-all–> 将容器内所有暴露端口自动映射为本机临时端口。--publish–> 将容器内指定端口映射为本机指定端口--tty–> 是否分配一个伪终端。--volume–> 挂载数据卷至容器。--ip–> 指定容器的 IPV4 地址。--env–> 指定容器内的环境变量。--name–> 指定容器别名。--memory–> 限制容器可使用的内存。
registry (注册服务器)
registry 是集中存放 repository (仓库) 的地方,其中 repository 用于集中存放同类型不同版本的镜像。
registry与repository的关系可类比于github与repository的关系。
与 registry 相关的 CLI 命令具体如下:
docker search在默认
registry中搜索指定内容。docker pull/docker image pull从默认
registry处拉取一个image。docker push/docker image push上传一个
image至默认registry。
数据卷 + 网络 + Dockerfile + 容器管理/编排 + 底层原理 (涉及Linux东西,比较难)
底层原理 镜像组织、容器具体是什么、存储驱动