一、命令行分类

docker现在采用也是"github.com/spf13/cobra"来管理其命令结构,和k8s是一样的。来看看docker的命令行分类,我们可以打开/moby-1.13.1/cli/command/commands/commands.go文件进行查看,下面是1.13的部分源码。

func AddCommands(cmd *cobra.Command, dockerCli *command.DockerCli) {
	cmd.AddCommand(
		/*
			根据资源划分,添加各种子命令到root command下
		*/
		node.NewNodeCommand(dockerCli),
		service.NewServiceCommand(dockerCli),
		swarm.NewSwarmCommand(dockerCli),
		secret.NewSecretCommand(dockerCli),
		container.NewContainerCommand(dockerCli),
		image.NewImageCommand(dockerCli),
		system.NewSystemCommand(dockerCli),
		container.NewRunCommand(dockerCli),
		image.NewBuildCommand(dockerCli),
		network.NewNetworkCommand(dockerCli),
		hide(system.NewEventsCommand(dockerCli)),
		registry.NewLoginCommand(dockerCli),
		registry.NewLogoutCommand(dockerCli),
		registry.NewSearchCommand(dockerCli),
		system.NewVersionCommand(dockerCli),
		volume.NewVolumeCommand(dockerCli),
		hide(system.NewInfoCommand(dockerCli)),
		hide(container.NewAttachCommand(dockerCli)),
		hide(container.NewCommitCommand(dockerCli)),
		hide(container.NewCopyCommand(dockerCli)),
		hide(container.NewCreateCommand(dockerCli)),
		hide(container.NewDiffCommand(dockerCli)),
		hide(container.NewExecCommand(dockerCli)),
		hide(container.NewExportCommand(dockerCli)),
		hide(container.NewKillCommand(dockerCli)),
		hide(container.NewLogsCommand(dockerCli)),
		hide(container.NewPauseCommand(dockerCli)),
		hide(container.NewPortCommand(dockerCli)),
		hide(container.NewPsCommand(dockerCli)),
		hide(container.NewRenameCommand(dockerCli)),
		hide(container.NewRestartCommand(dockerCli)),
		hide(container.NewRmCommand(dockerCli)),
		hide(container.NewStartCommand(dockerCli)),
		hide(container.NewStatsCommand(dockerCli)),
		hide(container.NewStopCommand(dockerCli)),
		hide(container.NewTopCommand(dockerCli)),
		hide(container.NewUnpauseCommand(dockerCli)),
		hide(container.NewUpdateCommand(dockerCli)),
		hide(container.NewWaitCommand(dockerCli)),
		hide(image.NewHistoryCommand(dockerCli)),
		hide(image.NewImagesCommand(dockerCli)),
		hide(image.NewImportCommand(dockerCli)),
		hide(image.NewLoadCommand(dockerCli)),
		hide(image.NewPullCommand(dockerCli)),
		hide(image.NewPushCommand(dockerCli)),
		hide(image.NewRemoveCommand(dockerCli)),
		hide(image.NewSaveCommand(dockerCli)),
		hide(image.NewTagCommand(dockerCli)),
		hide(system.NewInspectCommand(dockerCli)),
		stack.NewStackCommand(dockerCli),
		stack.NewTopLevelDeployCommand(dockerCli),
		checkpoint.NewCheckpointCommand(dockerCli),
		plugin.NewPluginCommand(dockerCli),
	)

}

/*
	在设置了 环境变量“DOCKER_HIDE_LEGACY_COMMANDS”的情况下
	func hide的功能就是给入参 cmd 增加两个属性:Hidden和Aliases
*/
func hide(cmd *cobra.Command) *cobra.Command {
	if os.Getenv("DOCKER_HIDE_LEGACY_COMMANDS") == "" {
		return cmd
	}
	cmdCopy := *cmd
	cmdCopy.Hidden = true
	cmdCopy.Aliases = []string{}
	return &cmdCopy
}

docker 之前版本的命令管理比较复杂的,容易混淆。
在v1.13.1中进行了重构,旧的语法仍然支持。

func AddCommands将命令按照逻辑分组到management commands中,以下就是docker中的顶级命令(注意这里都是单数的):

管理命令
  container   管理容器
  image       管理镜像
  network     管理网络服务
  node        管理Docker Swarm节点
  plugin      管理支持插件
  secret      管理Docker密码
  service     管路服务
  stack       管理Docker 栈
  swarm     管理 Swarm
  system      管理 Docker 系统
  volume      管理卷(磁盘)

每一个管理命令有一套类似的子命令,他们负责执行操作:

  子命令                 用途
    ls             获取<image,container,volume,secret等等>的列表
    rm             移除<image,container,volume等等>
    inspect        检阅<image,container,volume等等>

这也就是说:docker image ls 效果等同于 docker images

重构之后,一些平时使用频繁的子命令仍然留在顶层。
默认情况下,所有的顶级命令也会显示出来。
可以设置DOCKER_HIDE_LEGACY_COMMANDS环境变量来只显示顶级命令,这就是func hide函数的作用。
但即便如此docker --help依然会显示所有的顶级命令和管理命令。

最后可以通过下述命令来强制只显示管理命令

DOCKER_HIDE_LEGACY_COMMANDS=true docker --help

可以和docker --help命令的效果进行对比下

二、docker常用命令

1.12 版本1.13 版本用途
attachcontainer attach附加到一个运行的容器
buildimage build从一个Dockerfile构建镜像
commitcontainer commit从一个容器的修改创建一个新的镜像
cpcontainer cp在容器与本地文件系统之间复制文件/文件夹
createcontainer create创建新的容器
diffcontainer diff检阅一个容器文件系统的修改
eventssystem events获取服务器的实时时间
execcontainer exec在运行的容器内执行命令
exportcontainer export打包一个容器文件系统到tar文件
historyimage history展示镜像历史信息
imagesimage ls展示镜像列表
importimage import用tar文件导入并创建镜像文件
infosystem info展示整个系统信息
inspectcontainer inspect展示一个容器/镜像或者任务的底层信息
killcontainer kill终止一个或者多个运行中的容器
loadimage load从tar文件或者标准输入载入镜像
loginlogin登录Docker registry
logoutlogout从Docker registry登出
logscontainer logs获取容器的日志
networknetwork管理Docker网络
nodenode管理Docker Swarm节点
pausecontainer pause暂停一个或者多个容器的所有进程
portcontainer port展示容器的端口映射
pscontainer ls展示容器列表
pullimage pull从某个registry拉取镜像或者仓库
pushimage push推送镜像或者仓库到某个registry
renamecontainer rename重命名容器
restartcontainer restart重启容器
rmcontainer rm移除一个或多个容器
rmiimage rm移除一个或多个镜像
runcontainer run运行一个新的容器
saveimage save打包一个或多个镜像到tar文件(默认是到标准输出)
searchsearch在Docker Hub搜索镜像
serviceservice管理Docker services
startcontainer start启动一个或者多个容器
statscontainer stats获取容器的实时资源使用统计
stopcontainer stop停止一个或多个运行容器
swarmswarm管理Docker Swarm
tagimage tag标记一个镜像到仓库
topcontainer top展示容器运行进程
unpausecontainer unpause解除暂停一个或多个容器的所有进程
updatecontainer update更新一个或多个容器的配置
versionversion显示Docker版本信息
volumevolume管理Docker volumes
waitcontainer wait阻塞直到容器停止,然后打印退出代码
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐