如果您使用 Docker 有一段时间,您可能已经有一个为您量身定制的简单而有效的工作流程,其中包括一些您最喜欢的 docker 命令。

例如,我曾经使用看起来像这样的长命令删除未运行的容器docker container rm $(docker container ps -qf status=exited),它起作用了,显然只要没有悬空的容器就会抛出错误。

有一天,当我发现我们还有一个prune用于容器的子命令时,这种情况就停止了!

所以现在这个长命令已经归结为一个简单的docker container prune.

关键是,即使我们中的许多人已经使用 Docker 一段时间了,有些事情可能会被忽视,甚至可能随着时间的推移而被遗忘。

在本文中,我将为您提供三个 docker 命令,它们可能对您来说是新的,或者您不经常使用它们,但我认为您应该使用它们。

1.系统子命令

Docker 有一个system命令,可以为您提供一些与 docker 相关的系统级信息,您实际上已经使用其中一个子命令有一段时间了,还记得docker info吗?这个命令实际上是docker system info.

要了解有关此子命令及其提供的更多信息,请在–help其上运行该选项。

➟ docker system --helpUsage:  docker system COMMANDManage DockerCommands:df          Show docker disk usageevents      Get real time events from the serverinfo        Display system-wide informationprune       Remove unused dataRun 'docker system COMMAND --help' for more information on a command.

让我们逐一介绍这些子命令,因为我认为它们都非常关键。

Docker system df

您是否曾经遇到过服务器磁盘空间几乎已满的情况?

要检查它是否是容器(运行/卷),您可能一直在直接在数据根目录上使用该du命令。

数据根或数据根是 docker 存储与其状态相关的所有数据的位置,这包括但不限于图像(层)、卷、网络相关信息、插件。

du在数据根上使用需要sudo访问权限。

✗ du -h --max-depth=1 /var/lib/docker
du: cannot read directory '/var/lib/docker': Permission denied
4.0K    /var/lib/docker

不仅如此,要明确知道分配了多少卷或映像,您必须多次运行该命令。

➟ sudo du -h --max-depth=0 /var/lib/docker/volumes && \sudo du -h --max-depth=0 /var/lib/docker/image && \sudo du -h --max-depth=0 /var/lib/docker/

一个更好的选择是调用docker system df命令,这将自动检测数据根并相应地打印有关Docker 容器、图像和卷的磁盘使用情况的所有信息。

这是我当前系统显示的内容(这是一个新安装)

➟ docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          10        1         84.17MB   84.17MB (100%)
Containers      1         1         8.219MB   0B (0%)
Local Volumes   0         0         0B        0B
Build Cache     0         0         0B        0B

Docker 系统修剪

如果您曾经想要删除:

  • 所有未使用的网络
  • 悬空图像
  • 停止的容器
  • 所有未使用的卷

那么您很有可能使用过,或者习惯于使用四个单独的命令来实现工作。

docker network prune && \docker image prune && \docker volume prune && \docker container prune

如果您以前不知道container prune像我一样,那么命令会变得更大。我们很幸运,所有这些都可以使用一个简单的命令来完成,即docker system prune --volumes.

默认情况下docker system prune不会删除卷,因为您需要使用该–volumes选项。此命令还为您清除构建缓存。

您可以使用该-f选项来避免(有时)烦人的提示,请参见下面的示例:

➟ docker system prune --volumes -f
Deleted Containers:
672d39c1a78969887f411ce9139e74e5b21c31fccf2bcf8c1190a9e166089edeDeleted Networks:
Example
SSHnet
DummyDeleted Volumes:
dummyTotal reclaimed space: 0B

其他选项包括-a删除所有未使用的图像,而不仅仅是悬空的图像。

Docker 系统事件

这个命令可能不是一直都有用,但我认为每个人都应该知道这一点。

docker system events或者docker events简而言之,直接为 docker 守护进程 ( ) 提供实时事件dockerd。这可以帮助监控某些事件,例如图像何时被删除。

请参阅下面的屏幕截图以更好地理解这一点。

2.上下文子命令

这是另一个漂亮的子命令,据我所知,没有多少人知道。任何 docker 命令执行的上下文都是一对键值对,包括但不限于端点、主机,可能还有一些配置文件等。

创建上下文后,以后可以重用它。

最大的实际用例之一,尤其是对我来说,是为我运行 docker 的各个服务器创建单独的上下文。因为我的大部分工作都围绕它展开,所以我不是每次都登录服务器,而是通过 SSH 使用本地客户端和删除 docker 服务器。

让我向您展示如何使用 docker 上下文实现这一目标。

首先,我在Linode上部署了一台服务器,该服务器正在运行 docker。如果我要在没有上下文的情况下访问远程 docker 守护程序,我将使用如下命令

➟ docker --host ssh://debdut@194.195.116.210:7770 ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED       STATUS       PORTS                                                                      NAMES
bb4fa8390ab7   jrcs/letsencrypt-nginx-proxy-companion   "/bin/bash /app/entr…"   2 hours ago   Up 2 hours                                                                              reverse-proxy_letsencrypt_1
ccdda507facb   jwilder/nginx-proxy                      "/app/docker-entrypo…"   2 hours ago   Up 2 hours   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   reverse-proxy_reverse_proxy_1

因此,要访问远程守护程序,我必须使用别名docker,docker --host ssh://debdut@194.195.116.210:7770或者使用环境变量DOCKER_HOST。但是这些使得切换到其他主机非常困难。一个更简单的选择是只创建一个上下文。

以下命令remote为与本地主机不同的 docker 端点创建一个名为 的上下文。

docker context create remote --description "Remote docker server" --docker "host=ssh://debdut@194.195.116.210:7770"

输出如下所示:

➟ docker context create remote --description "Remote docker server" --docker "host=ssh://debdut@194.195.116.210:7770"
remote
Successfully created context "remote"

现在,如果您想快速检查某些内容或重复操作,您可以使用该-c选项,将上下文更改为这个新的。docker

使用以下-c选项:

➟ docker -c remote ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED       STATUS       PORTS                                                                      NAMES
bb4fa8390ab7   jrcs/letsencrypt-nginx-proxy-companion   "/bin/bash /app/entr…"   2 hours ago   Up 2 hours                                                                              reverse-proxy_letsencrypt_1
ccdda507facb   jwilder/nginx-proxy                      "/app/docker-entrypo…"   2 hours ago   Up 2 hours   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   reverse-proxy_reverse_proxy_1

与docker context use [CONTEXT_NAME]:

➟ docker context use remote
remote
Current context is now "remote"
~
➟ docker ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED       STATUS       PORTS                                                                      NAMES
bb4fa8390ab7   jrcs/letsencrypt-nginx-proxy-companion   "/bin/bash /app/entr…"   2 hours ago   Up 2 hours                                                                              reverse-proxy_letsencrypt_1
ccdda507facb   jwilder/nginx-proxy                      "/app/docker-entrypo…"   2 hours ago   Up 2 hours   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   reverse-proxy_reverse_proxy_1

要脱离上下文,请使用usewith 子命令default作为上下文名称:

➟ docker context use default
default
Current context is now "default"
~
➟ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

3. pause & unpause 子命令

大部署(应用程序)现在分为多个组件,更广为人知的是微服务,当您使用 docker-compose 之类的工具部署它们时,有时会发生一个组件在它所依赖的组件之前启动的情况,这是一个问题,因为它的依赖项(或多个依赖项)尚未启动,因此该组件将无法启动。

您可以通过在 Docker 中使用重启策略来缓解此问题,但它们并不能防止失败的尝试导致日志泛滥,我一开始所做的只是停止容器/服务,直到依赖项完全启动。

更好的方法是暂停容器一段时间,一旦必要的服务成功启动,您可以取消暂停容器,一切都会从那里顺利进行。

尽管容器可以快速启动,但这是解决此类问题的更快方法。

pause和的语法unpause非常简单。

docker pause [CONTAINER_NAME|ID]
docker unpause [CONTAINER_NAME|ID]

3 个不为人知的 Docker 命令,但它们在管理容器时会派上用场相关推荐

  1. Kubernetes1.7新特性:支持绕过docker,直接通过containerd管理容器

    背景情况 从Docker1.11版本开始,Docker依赖于containerd和runC来管理容器,containerd是控制runC的后台程序,runC是Docker公司按照OCI标准规范编写的一 ...

  2. docker命令大全 随笔日记

    docker命令大全 笔记 1.容器生命周期管理 1.1.run 1.2.create 1.3.exec 1.4.start/stop/restart 1.5.pause/unpause 1.6.ki ...

  3. THREE DAY | 网络安全之Linux(包含Linux常用命令,镜像下载,docker命令等内容)超详细!!!

    THREE DAY | 网络安全之Linux 一.Linux介绍 1.Linux系统简介 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多 ...

  4. 用于管理容器生命周期的 Docker 命令

    了解 Docker 容器的各种状态对于任何认真的 Docker 用户都至关重要. 我将解释容器生命周期,然后显示生命周期每个阶段的 Docker 命令. 但在学习所有这些东西之前,让我们再次回顾一下容 ...

  5. Docker的实现原理以及与容器的区别

    docker和容器的区别? 其实容器的发展历史早于docker的.docker也不等同于容器,"容器"是一系列内核特性的统称. 2000年的时候,LXC容器发布,这是一种内核虚拟 ...

  6. Docker中仓库、镜像和容器用法详解

    1.仓库.镜像和容器之间的关系 2.Docker镜像 当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载 ...

  7. Docker系列七: 使用Humpback管理工具管理容器(一款UI管理工具)

    Humpback 可以帮助企业快速搭建轻量级的 Docker 容器云管理平台,若将你的 Docker 主机接入到 Humpback 平台中,就能够为你带来更快捷稳定的容器操作体验. 功能特点 Web操 ...

  8. docker一个简单易用的容器管理平台-Humpback

    什么是Humpback? 项目开源地址在此: Humpback Source,觉得有用或者有趣,欢迎给个star~ 在回答这个问题前,我们得先了解下什么的 Docker(哦,现在叫 Moby,文中还是 ...

  9. 设置普通用户执行docker命令,执行docker命令无需输入密码或者切换root用户

    每次执行docker命令都要输入密码或者切换root用户,非常不方便,尤其是在shell脚本中就更麻烦了,一起来解决这个问题: 1. 创建名为docker的组,如果之前已经有该组就会提示已存在: su ...

最新文章

  1. redis java切片_jedis 单点配置
  2. java--static关键字
  3. VMProtect SDK完全避坑指南
  4. Spring集成Quartz定时任务框架介绍
  5. python自然场景文字识别_chineseocr
  6. Android设计模式之——模板方法模式
  7. 16.1 Tomcat介绍 16.2 安装jdk 16.3 安装Tomcat
  8. “火星人”马斯克推论:世界或是被编码而成,上帝可能是个程序员!
  9. 华为云发布 GaussDB(DWS) 实时数仓,技术创新释放行业数据价值
  10. [转载]Spring Cloud微服务Sentinel+Apollo限流、熔断实战
  11. C++ 整型长度的获取 不同的系统
  12. R语言绘制流程图(一)
  13. latex数学符号加粗_LaTex数学公式符号整理
  14. java 月的天数_Java获取某月天数
  15. 苹果官方付费升级内存_32GB内存秒变64GB ,vivo官方推出内存升级服务
  16. win10关闭快速启动_内存占用率过高怎么办?Win10电脑内存占用率很高的原因和解决方法...
  17. torch.contiguous()函数用法
  18. 用python画风景图_NV这个AI黑科技简直绝了!几笔画出逼真照片
  19. 2.4G无线芯片NRF24L01 驱动源码及详解
  20. 抖音素材哪里收集_抖音素材哪里收集 这个视频下载网站帮你处理好了

热门文章

  1. 2D美术4——选择主体功能,一键抠图
  2. acs java_ACS 4.2 安装图解
  3. 软件测试集成测试ppt,软件测试之第七章-集成测试过程.ppt
  4. 品牌赞助公关策划有哪些经典案例?
  5. Unity简单的轻量级ECS框架 LeoECS中文文档
  6. 卸载apache mysql_WIN7如何卸载apache + mysql +php
  7. 6.26 考研又锤子了
  8. 2022-2027年中国减肥药行业市场全景评估及发展战略规划报告
  9. css文本长英文换行
  10. MIRACL库 Lib 配置指南!20200827更新!!!Visual Studio, Windows 环境,已更新!