文档章节

15 个 Docker 技巧和提示

l
 lykops
发布于 2017/08/04 09:06
字数 1218
阅读 4
收藏 1

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

本文转载自:http://blog.csdn.net/liyingke112/article/details/73920837

共有 人打赏支持
l
粉丝 2
博文 297
码字总数 7445
作品 2
深圳
运维
私信 提问
15 个 Docker 技巧和提示

Docker 是个神奇的工具,我最喜欢它了。在软件开发界它是迄今为止最闪亮的神器,数十倍的简化了项目配置。 本文中,我会与你分享一些很酷的 Docker 技巧和提示。多数人可能熟悉这些命令,但我...

oschina
2017/02/13
1K
1
一些 Docker 的技巧与秘诀

Docker 可能一开始让你望而生畏,但确实是一个非常伟大的工具。用 Shells 工作令人烦扰,并且有陷阱。鉴于我花了很多时间才弄明白它,所以我想写这篇文章来避免你们做无用功。这篇文章列举了...

pior
2014/10/04
0
0
Docker 6岁啦!多场线下 Party 即将来袭!

出品丨Docker公司(ID:docker-cn) 编译丨小东 每周一、三、五,与您不见不散! 随着 2019 年的开始,Docker 也迎来了自己的6岁生日!多年来,Docker 社区用户不断创新 Docker 技术的使用方...

docker公司
03/04
0
0
centos7安装docker总结

最近工作中需要用到docker,所以决定自己搭建一个docker环境,于是选择在virtualbox上安装centos7虚拟机,并在虚拟机上安装docker,没搭建环境之前,觉得应该很简单,没想到折腾了好长时间。...

被钓的小鱼
2018/07/10
0
0
centos7 FS=btrfs时 安装docker时,启动服务失败

在centos7上使用btrfs 文件系统,安装docker完成后,启动时会报错 Job for docker.service failed. See 'systemctl status docker.service' and 'journalctl -xn' for details. 此时,按照提......

lcxpx
2015/12/07
3
1

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 看见这花臂了么?赶紧叫大佬!

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享周华健的单曲《有没有一首歌会让你想起我》 《有没有一首歌会让你想起我》- 周华健 手机党少年们想听歌,请使劲儿戳(这里) ...

小小编辑
今天
98
4
Confluence 6 升级中的一些常见问题

升级的时候遇到了问题了吗? 如果你想尝试重新进行升级的话,你需要首先重新恢复老的备份。不要尝试再次对 Confluence 进行升级或者在升级失败后重新启动老的 Confluence。 在升级过程中的一...

honeymoose
今天
2
0
C++随笔(四)Nuget打包

首先把自己编译好的包全部准备到一个文件夹 像这样 接下来新建一个文本文档,后缀名叫.nuspec 填写内容 <?xml version="1.0"?><package xmlns="http://schemas.microsoft.com/packaging/201......

Pulsar-V
今天
3
0
再谈使用开源软件搭建数据分析平台

三年前,我写了这篇博客使用开源软件快速搭建数据分析平台, 当时收到了许多的反馈,有50个点赞和300+的收藏。到现在我还能收到一些关于dataplay2的问题。在过去的三年,开源社区和新技术的发...

naughty
今天
20
0
Python3的日期和时间

python 中处理日期时间数据通常使用datetime和time库 因为这两个库中的一些功能有些重复,所以,首先我们来比较一下这两个库的区别,这可以帮助我们在适当的情况下时候合适的库。 在Python文...

编程老陆
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部