CLI(Command Line Interface,命令行)

好的 docker ps 输出

将 docker ps 输出通过管道重定向到 less -S,避免折行:

docker ps -a | less -S

跟随 logs

docker logs 默认情况下不会观察日志,除非你使用 -f 参数:

docker logs <containerid> -f                                                        

docker inspect 输出漂亮的 JSON

docker inspect 默认输出大量的 JSON,可以通过 jq 提取需要的那些值:

# list IP addresses for all containers connected to 'bridge' network
docker network inspect bridge -f '{{json .Containers}}' | jq '.[] | {cont: .Name, ip: .IPv4Address}

也可以像下面这样在 docker inspect 中使用内置的模板:

# is the last run container still running?
docker inspect --format '{{.State.Running}}' $(docker ps -lq)

Docker 命令完成

Docker CLI 语法非常丰富,而且还在不断充实:添加新的命令和参数。要记住每个命令和参数几乎不可能,所以在终端上能自动完成这些命令很有必要。

命令完成是一个终端插件,通过 Tab 键,它会自动完成或建议你接下来要输入的内容。Docker 命令完成功能对命令和选项都能生效。Docker 团队为 Bash shell 和 Zsh shell 下的 docker、docker-machine 和 docker-compose 命令提供完成功能。

清理

使用一段时间 Docker 之后,没用的东西开始增长:不用的卷、网络、已退出的容器和不用的映像等。

prune:运行全部

prune 是个非常有用的命令(可在 vaume 和 network 子命令中使用),但它从 Docker 1.13 开始才有。如果你使用旧的 Docker 版本,下面的命令可用于代替 prune 命令。

docker system prune

移除悬空卷

悬空卷是不被任何容器使用的卷。若要移除它们,需要结合两个命令:首先列出悬空卷的 ID 然后移除它们。

docker volume rm $(docker volume ls -q -f "dangling=true")

删除已退出的容器

这个操作与上面的步骤相同。首先列出要删除(通过过滤)的容器(仅 ID)然后删除它们(参考 rm -f 强制删除)。

docker rm $(docker ps -q -f "status=exited")

删除悬空映像

悬空映像是未标记的映像,它们是映像树的叶节点(不是中间层)。

docker rmi $(docker images -q -f "dangling=true")

网络

Docker 内部有一个保存 IP 地址的 IP 地址池。这些 IP 地址默认对外不可见,需要通过桥接进行访问。

查找端口映射

docker run 接收明确的端口映射参数,你也可以使用 -P 来自动映射所有端口。后者的优势在于可以防止冲突, 可以通过下面的命令查找已经分配的端口:

docker port <containerId> <portNumber>
# 或
docker inspect --format '{{.NetworkSettings.Ports}}' <containerId>

容器 IP

每个容器在私有子网中都有自己的 IP (默认是 172.17.0.0/16)。重启可以改变 IP,如果你需要,可以查询:

docker inspect --format '{{.NetworkSettings.IPAddress}}' <containerId>

docker 会检查冲突并会在必要的时候使用不同的子网。

接管主机的网络栈

docker run --net=host 允许使用主机的网络栈。不要干这种事情 :)

使用另一容器的网络栈

$ docker run --net=container:<name|id> ...

新容器可以附加到另一个容器使用的网络接口。目标容器可以通过 ID 或名称指定。

可附加的覆盖网络

使用集群模式的 Docker 引擎可以在一人管理节点的覆盖网络上创建多个主机。创建集群服务的时候你可以将其附加到之前创建的覆盖网络。

有时候你需要将新的 Docker 容器(填充不同的网络工具)附加到已经存在的覆盖网络,以检查网络配置或调试问题。你可以使用 docker run 命令来完成,不需要创建全新的调试服务。

Docker 1.13 为 docker network create 命令添加了一个新选项:attachable。这个选项允许手工附加容器。

# create an attachable overlay network
 docker network create --driver overlay --attachable mynet
# create net-tools container and attach it to mynet overlay network
docker run -it --rm --net=mynet net-tools sh

自动启动容器

在 Docker 容器中运行的某个进程可能会有很多原因失败。某些情况下,可以通过重新运行失败的容器来修复。如果你在使用 Docker 业务流引擎,像 Swarm 或 Kubernetes,失败的服务会自动重启。

如果没有自动重启,那么你可能希望根据容器中主进程的退出代码来重启容器,或者直接重启容器(不管退出代码)。Docker 1.12 给 docker run 命令添加了 restart 参数来处理这种情况。

总是重启

配置重启策略为总是重启,这样一但容器退出,Docker 就会重启它。

docker run --restart=always my_image

失败时重启容器

配置重启策略为失败时重启,最大重启尝试次数为 10。

docker run --restart=on-failure:10 my_image

15 个 Docker 技巧和提示的更多相关文章

  1. Docker入门教程(六)另外的15个Docker命令

    Docker入门教程(六)另外的15个Docker命令 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第六篇,继续介绍Docker命令.之前的第二篇文章 ...

  2. 15个Docker基本命令及用法

    Docker入门教程:15个Docker基本命令及用法   本文中,我们将学习15个Docker命令以及命令的用法和功能,并通过实践学习它是如何工作的. AD:51CTO 网+ 第十二期沙龙:大话数据 ...

  3. Drools 7.15.0 docker容器方式部署

    关于drools的相关介绍就不再赘述了,关于drools网上的资料都很少,或者都有些老了,最近折腾了一下,记录下安装部署的过程,希望能节省下大家的时间. 一.快速部署 1.拉取基础镜像,命令如下: d ...

  4. 分享iOS最喜欢的技巧和提示

    转自:http://blog.csdn.net/biggercoffee/article/details/50394027 Objective-C 1.让Xcode的控制台支持LLDB类型的打印 这有 ...

  5. 分享你最喜欢的技巧和提示(Xcode,Objective-C,Swift,C...等等)

    http://www.cocoachina.com/ios/20151231/14846.html 笔者分享总结如下(本篇会不定期进行更新) : Objective-C 1.让Xcode的控制台支持L ...

  6. Docker启动时提示Get Permission Denied while trying to connect解决方法

    环境描述 vmware15虚拟机安装centos7.4 64位系统,docker版本19.03.2 问题描述 安装完docker后,执行docker相关命令 docker run ubuntu:15. ...

  7. 15、docker

    15.0.服务器使用说明: 服务器名称 ip地址 controller-node1 172.16.1.90 15.1.docker介绍: 1.Docker 是一个开源的应用容器引擎,基于 Go 语言 ...

  8. Docker入门系列之五:15个 Docker 命令

    在这篇文章中,我们将学习15个Dockers CLI命令.如果你还不了解Docker,请查看这个系列的其他部分进行学习,Docker概念,生态系统,Dockerfile,Docker镜像. Docke ...

  9. 学习老外用webstorm开发nodejs的技巧--代码提示DefinitelyTyped

    最近入了nodejs的坑,作为老码农,js对我来说还是很容易的.webstorm虽说用得不多,但是pycharms我是老手了,idea的东西一脉相承,想想也就那样了. 但是自从看了某个视频后,觉得毕竟 ...

随机推荐

  1. css控制文字模糊

    *{ color: transparent; text-shadow: #111 0 0 5px; }

  2. J2EE的十三个技术——Servlet

    简介: 基于协议的请求/响应服务的Java类.通俗的说,Servlet是在服务器上运行的小程序.为什么叫Servlet?Applet表示小应用程序,Server+Applet即为Servlet,表示小 ...

  3. mssql 格式化字符串 /时间 年月日时分秒

    比如:1 想格式化 000001,100 格式化为000100: 思路是这样的 1000000 +格式化的数字 取后6位: select   right(cast(power(10,6) as var ...

  4. 【bzoj2732】[HNOI2012]射箭 二分+半平面交

    题目描述 给出二维平面上n个与y轴平行的线段,求最大的k,使得存在一条形如$y=ax^2+bx(a<0,b>0)$的抛物线与前k条线段均有公共点 输入 输入文件第一行是一个正整数N,表示一 ...

  5. [学习笔记]Senparc.CO2NET 缓存使用笔记

    >笔记1:如果需要调用远程的Redis,那么您需要2步 步骤1: 在项目的web.config文件中配置 <!-- Cache.Redis连接配置 --> <add key=& ...

  6. WinDirStat is a disk usage statistics viewer

    WinDirStat is a disk usage statistics viewer and cleanup tool for various versions of Microsoft Wind ...

  7. for 循环里的i++

    写代码的时间也不短了,今天看快速排序的算法的时候才去更深层次得理解... for (语句 1; 语句 2; 语句 3) {     被执行的代码块 } 语句 1 (代码块)开始前执行 语句 2 定义运 ...

  8. 判断pc还是手机打开跳转到别的网页

    function is_mobile() { var regex_match = /(nokia|iphone|android|motorola|^mot-|softbank|foma|docomo| ...

  9. 让Vs2010支持 Css3+HTML5

    第一步. 先到微软官方下载一个 Microsoft Visual Studio 2010 sp1 . 给传送门:.microsoft.com/downloads/zh-cn/details.aspx? ...

  10. 关于String函数

    1.常常忘记加string 头文件 2.size和length函数没有区别,length函数是为了增强可读性 3.substr函数  s.substr(a,b)表示从a开始后的b位 s.substr( ...