3 个不为人知的 Docker 命令,但它们在管理容器时会派上用场
如果您使用 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 命令,但它们在管理容器时会派上用场相关推荐
- Kubernetes1.7新特性:支持绕过docker,直接通过containerd管理容器
背景情况 从Docker1.11版本开始,Docker依赖于containerd和runC来管理容器,containerd是控制runC的后台程序,runC是Docker公司按照OCI标准规范编写的一 ...
- docker命令大全 随笔日记
docker命令大全 笔记 1.容器生命周期管理 1.1.run 1.2.create 1.3.exec 1.4.start/stop/restart 1.5.pause/unpause 1.6.ki ...
- THREE DAY | 网络安全之Linux(包含Linux常用命令,镜像下载,docker命令等内容)超详细!!!
THREE DAY | 网络安全之Linux 一.Linux介绍 1.Linux系统简介 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多 ...
- 用于管理容器生命周期的 Docker 命令
了解 Docker 容器的各种状态对于任何认真的 Docker 用户都至关重要. 我将解释容器生命周期,然后显示生命周期每个阶段的 Docker 命令. 但在学习所有这些东西之前,让我们再次回顾一下容 ...
- Docker的实现原理以及与容器的区别
docker和容器的区别? 其实容器的发展历史早于docker的.docker也不等同于容器,"容器"是一系列内核特性的统称. 2000年的时候,LXC容器发布,这是一种内核虚拟 ...
- Docker中仓库、镜像和容器用法详解
1.仓库.镜像和容器之间的关系 2.Docker镜像 当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载 ...
- Docker系列七: 使用Humpback管理工具管理容器(一款UI管理工具)
Humpback 可以帮助企业快速搭建轻量级的 Docker 容器云管理平台,若将你的 Docker 主机接入到 Humpback 平台中,就能够为你带来更快捷稳定的容器操作体验. 功能特点 Web操 ...
- docker一个简单易用的容器管理平台-Humpback
什么是Humpback? 项目开源地址在此: Humpback Source,觉得有用或者有趣,欢迎给个star~ 在回答这个问题前,我们得先了解下什么的 Docker(哦,现在叫 Moby,文中还是 ...
- 设置普通用户执行docker命令,执行docker命令无需输入密码或者切换root用户
每次执行docker命令都要输入密码或者切换root用户,非常不方便,尤其是在shell脚本中就更麻烦了,一起来解决这个问题: 1. 创建名为docker的组,如果之前已经有该组就会提示已存在: su ...
最新文章
- redis java切片_jedis 单点配置
- java--static关键字
- VMProtect SDK完全避坑指南
- Spring集成Quartz定时任务框架介绍
- python自然场景文字识别_chineseocr
- Android设计模式之——模板方法模式
- 16.1 Tomcat介绍 16.2 安装jdk 16.3 安装Tomcat
- “火星人”马斯克推论:世界或是被编码而成,上帝可能是个程序员!
- 华为云发布 GaussDB(DWS) 实时数仓,技术创新释放行业数据价值
- [转载]Spring Cloud微服务Sentinel+Apollo限流、熔断实战
- C++ 整型长度的获取 不同的系统
- R语言绘制流程图(一)
- latex数学符号加粗_LaTex数学公式符号整理
- java 月的天数_Java获取某月天数
- 苹果官方付费升级内存_32GB内存秒变64GB ,vivo官方推出内存升级服务
- win10关闭快速启动_内存占用率过高怎么办?Win10电脑内存占用率很高的原因和解决方法...
- torch.contiguous()函数用法
- 用python画风景图_NV这个AI黑科技简直绝了!几笔画出逼真照片
- 2.4G无线芯片NRF24L01 驱动源码及详解
- 抖音素材哪里收集_抖音素材哪里收集 这个视频下载网站帮你处理好了
热门文章
- 2D美术4——选择主体功能,一键抠图
- acs java_ACS 4.2 安装图解
- 软件测试集成测试ppt,软件测试之第七章-集成测试过程.ppt
- 品牌赞助公关策划有哪些经典案例?
- Unity简单的轻量级ECS框架 LeoECS中文文档
- 卸载apache mysql_WIN7如何卸载apache + mysql +php
- 6.26 考研又锤子了
- 2022-2027年中国减肥药行业市场全景评估及发展战略规划报告
- css文本长英文换行
- MIRACL库 Lib 配置指南!20200827更新!!!Visual Studio, Windows 环境,已更新!