`
lykops
  • 浏览: 86390 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

15 个 Docker 技巧和提示

 
阅读更多

CLI(Command Line Interface,命令行)

好的 docker ps 输出

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

dockerps-a|less-S

跟随 logs

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

dockerlogs<containerid>-f                                                        

docker inspect 输出漂亮的JSON

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

#listIPaddressesforallcontainersconnectedto'bridge'network
dockernetworkinspectbridge-f'{{json.Containers}}'|jq'.[]|{cont:.Name,ip:.IPv4Address}

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

#isthelastruncontainerstillrunning?
dockerinspect--format'{{.State.Running}}'$(dockerps-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 命令。

dockersystemprune

移除悬空卷

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

dockervolumerm$(dockervolumels-q-f"dangling=true")

删除已退出的容器

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

dockerrm$(dockerps-q-f"status=exited")

删除悬空映像

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

dockerrmi$(dockerimages-q-f"dangling=true")

网络

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

查找端口映射

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

dockerport<containerId><portNumber>
#或
dockerinspect--format'{{.NetworkSettings.Ports}}'<containerId>

容器 IP

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

dockerinspect--format'{{.NetworkSettings.IPAddress}}'<containerId>

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

接管主机的网络栈

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

使用另一容器的网络栈

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

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

可附加的覆盖网络

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

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

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

#createanattachableoverlaynetwork
dockernetworkcreate--driveroverlay--attachablemynet
#createnet-toolscontainerandattachittomynetoverlaynetwork
dockerrun-it--rm--net=mynetnet-toolssh

自动启动容器

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

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

总是重启

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

dockerrun--restart=alwaysmy_image

失败时重启容器

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

dockerrun--restart=on-failure:10my_image
分享到:
评论

相关推荐

    DockerToolBox安装步骤.pptx

    随着容器技术的不断发展,Docker作为其中的佼佼者,已经被广泛应用于软件开发、测试和部署等多个环节。对于Windows用户而言,通过DockerToolBox安装Docker是一种简单且有效的方法。本文档将详细介绍在Windows环境下...

    docker-eb-ci-mon:Elastic Beanstalk Docker技巧

    Elastic Beanstalk提示 使用Docker部署 Circle CI整合 监控方式 记录中 Docker私有注册表集成 CloudWatch警报 使用AWS Lambda进行的号召性用语 用法

    Docker常用命令与小技巧汇总

    安装脚本 Ubuntu / Centos Debian的安装貌似有问题, 需要解决安装源的问题...Centos在运行完成之后, 还需要手动的 sudo systemctl start docker.service 否则会提示docker没有启动之类的错误 日志相关 Grep String

    基于树莓派Zero和Docker的远程开发与硬件驱动指南

    使用场景及目标:为用户提供一种高效的方法来完成树莓派零的初期配置与常用外设驱动部署,旨在通过具体实例帮助开发者熟悉树莓派的远程操控技巧及实际项目的软硬件协作模式。 其他说明:除了详细的教程外,还提供了...

    2016-docker-workshop:Docker Symfony会议研讨会22092016

    Docker研讨会2016 ID 项目描述01Docker的首次启动。 02具有NodeJS和Docker的单页应用程序(SPA)。... 05有用的提示和技巧的集合。热线链接作者米兰·费利克斯·舒尔克( Felix) Pavel Spajx Stejskal /

    Centos 6.5中安装docker的步骤(简洁版)

    总的来说,虽然Centos 6.5上安装Docker有一定的挑战性,但是通过上述步骤,以及处理常见问题的技巧,仍然可以完成Docker的安装和配置。安装完成之后,开发者可以享受到Docker带来的便捷容器化应用部署和管理的优势。

    Docker容器内存限制的方法

    Docker容器是一种轻量级的虚拟化技术,它允许用户在隔离的环境中运行应用程序。然而,在多容器环境下,资源分配成为一个至关重要的问题,特别是...同时,熟练掌握这些内存限制的技巧也是进行Docker容器集群管理的基础。

    精美简单的移动应用程序CI的提示和技巧

    我们将深入探讨这些提示和技巧,以及它们如何与Docker等工具结合使用。 1. **自动化的代码集成**:建立自动化脚本,确保每次代码提交后都能自动执行编译、测试和打包等任务。这减少了手动操作,减少了错误,并加快...

    multi-level.zip

    标题中的"multi-level.zip"可能是指一个包含多级目录结构的压缩文件,这在软件开发中...通过深入研究这个压缩包,开发者不仅可以学习到具体的Java编程技巧,还能了解到如何利用Docker提升开发效率和应用的可移植性。

    Linux安装与软件使用技巧大全

    此外,Linux还支持虚拟化技术,如KVM和Docker,允许在单一系统上运行多个独立的环境。这在测试软件兼容性或隔离不同项目时非常有用。安装和配置这些技术需要对Linux内核和网络配置有一定了解,但一旦掌握,将为工作...

    azure-cli-awesome:Azure CLI提示,技巧和片段

    在"azure-cli-awesome-main"这个项目中,你可能会找到更多实用的示例,如处理大规模数据上传、优化性能的技巧、使用条件语句和循环的脚本示例,以及如何与其他工具(如Docker、Kubernetes或CI/CD管道)集成的方法。...

    docker-DataScience:Dockerfile包含我大多数项目中需要的库

    数据科学影像 Dockerfile包含许多用于数据...提示与技巧 Windows快捷方式 打开Powershell并使用follwing命令打开您的配置文件。 notepad $PROFILE 将以下行粘贴到记事本中并保存文件。 function dsdocker { docker

    HR面试100问(完整版-含回答提示)

    "HR面试100问(完整版-含回答提示)"这个资料可能是为了帮助求职者准备人力资源(HR)部门进行的初步面试,同时也可能包含了技术面试的一些常见问题。尽管标题并未直接提及Java技术细节,但考虑到标签为"java",我们...

    WhizzPlayer:跟踪提示系统

    WhizzPlayer是一款基于JavaScript开发的提示音轨播放应用,它主要设计用于通过Web平台自动...通过深入理解这个项目,开发者不仅可以学习到如何创建类似的音频应用,还能掌握Docker和JavaScript在实际项目中的应用技巧。

    devops:简短提示,没有技巧

    在“简短提示,没有技巧”的主题下,我们可以探讨一些核心的DevOps理念和实践: 1. **持续集成(Continuous Integration, CI)**:开发人员频繁地将代码合并到主分支,通过自动化构建和测试来确保代码质量。这减少...

    Threejs-Boiler-Plate:用于启动Threejs项目的样板,以及到目前为止我已经使用它学习到的技巧和学习

    Boiler Plate,用于启动Threejs项目,以及到目前为止我已经使用该项目学习的技巧和学习。 如何使用 npm i npm start或npm run dev (要求您npm install nodemon --save ) 根据在localhost:3000上提供 。 Docker...

Global site tag (gtag.js) - Google Analytics