原文 Some Docker Tips and Tricks 由 Wouter Danes 编写
Docker 可能一开始让你望而生畏,但确实是一个非常伟大的工具。用 Shells 工作令人烦扰,并且有陷阱。鉴于我花了很多时间才弄明白它,所以我想写这篇文章来避免你们做无用功。这篇文章列举了一些快速技巧、秘诀和单行脚本,帮助你更有效地使用 Docker 。
移除所有的容器和镜像(大扫除)
用一行命令大扫除:
docker kill $(docker ps -q) ; docker rm $(docker ps -a -q) ; docker rmi $(docker images -q -a)
注:shell 中的 $() 和 `` 类似,会先执行这里面的内容,上面的脚本会出现如下 docker kill "pids" ; docker kill 在 docker 中用于停止容器,docker rm 删除容器, docker rmi 删除镜像
当没有运行的容器或者是根本没有容器的时候,这只会提示一个警告信息。当你想尝试的时候,这就是个非常好的单行命令。如果你仅仅想删除所有的容器,你可以运行如下命令:
docker kill $(docker ps -q) ; docker rm $(docker ps -a -q)
退出时删除容器
如果你仅仅想在一个容器中快速的运行一个命令,然后退出,并且不用担心容器状态,把 --rm
参数加入 run
命令后面,这将结束很多你保存了的容器,并且清理它们。
示例:docker run --rm -i -t busybox /bin/bash
不在 Shell 上运行命令
如果你使用需要Shell 的扩展项的 docker run
命令处理某些事情,比如 docker run --rm busybox ls '/var/log/*'
, 这个命令将失败。这个失败的原因我花了工夫才弄明白。这个陷阱在这里:你原来没有 Shell , 而 ```* 是 Shell 的扩展项,因此你需要一个能使用的 Shell 。正确方法为:
docker run --rm busybox sh -c 'ls /var/log/*'
Boot2Docker 和 LapTops 处理 DNS 问题的方法
由于这个原因, Boot2Docker 会占用 DNS 服务器很长一段时间。当你在尝试创建镜像的时候,可能会得到离谱的错误。如果你在 Ubuntu 或者 CentOS 上看到下面的提示:
cannot lookup archive.ubuntu.com
聪明的做法是停止,然后启动 boot2docker 。
boot2docker-cli down && boot2docker-cli up
这样问题就解决了。
Volumes 解决 docker logs
和 docker copy
问题
如果你想在一个容器中监控另一个容器中的日志文件和文件的使用,你可以看看 volumes ,例如,检查 tomcat 是否启动:
tomcat_id=$(docker run -d -v /var/log/tomcat6 wouterd/tomcat6) # Give Tomcat some time to wake up... sleep 5 while ! docker run --rm --volumes-from ${tomcat_id} busybox /bin/sh -c "grep -i -q 'INFO: Server startup in' /var/log/tomcat6/catalina*.log" ; do echo -n "." sleep 5 done
你还可以在一个 Dockerfile
中指定 volumes ,这个在我前面的博客文章中结合 Docker 连载了。
Docker Inspect 结合 Go Templates 的好处
命令 docker inspect
允许使用 Go Templates 来格式化inspect 命令的输出信息如果你擅长这个,你能获取很多 docker 容器命令行的脚本输出信息。这是一个获取正在运行的容器 IP 的示例:
container_ip=$(docker inspect --format '{{.NetworkSettings.IPAddress}}' ${container_id})
这里有一个笨的技巧,用于得到匹配所有暴露(exposed)的端口 host:port ,并且把他们输入一个 Java properties 文件:
sut_ip=${BOOT_2_DOCKER_HOST_IP} template='{{ range $key, $value := .NetworkSettings.Ports }}{{ $key }}='"${BOOT_2_DOCKER_HOST_IP}:"'{{ (index $value 0).HostPort }} {{ end }}' tomcat_host_port=$(docker inspect --format="${template}" ${container_id}) for line in ${tomcat_host_port} ; do echo "${line}" >> ${work_dir}/docker_container_hosts.properties done
敬请阅读
My post on continuous integration using docker and maven
原文 http://blog.segmentfault.com/yexiaobai/1190000000482229
http://blog.csdn.net/junjun16818/article/details/30696295
相关推荐
全书包括两部分,第一部分深入解读Docker容器技术,包括Docker架构与设计、核心源码解读和高级实践技巧;第二部分归纳和比较了三类基于Docker的主流容器云项目,包括专注Docker容器编排与部署的容器云、专注应用支撑...
Docker:进阶与实战
第二部分深入解读基于Docker的主流容器云技术,讲解了构建自己的容器云的方法,深入分析了3类Docker容器云技术的实现方法的设计思路,包括专注Docker容器编排与部署的容器云(Compose、Machine、Swarm、Fleet)、...
docker容器与容器云的文档,有助于理解docker的知识。
docker入门与实践指南docker入门与实践指南docker入门与实践指南docker入门与实践指南
Docker进阶与实战电子书,epub格式。 容器技术系列 Docker进阶与实战 华为Docker实践小组 著
Docker进阶与实战.pdf Docker进阶与实战.pdf Docker进阶与实战.pdf
docker技术与实践 docker入门教程 适合docker初学者。
最后,文章列举了一些Docker的应用实例,包括基于Docker的Web应用部署、CI/CD自动化流程和微服务架构等。通过本文的学习,读者可以快速掌握Docker的基本使用和应用实践技能,为日后的项目开发和运维工作提供有力的...
在你的压缩包文件"docker与nvidia-docker"中,应该包含了这些必要的组件。 总结一下,离线在Ubuntu上安装Docker和NVIDIA-docker,你需要: 1. 获取Docker的.deb安装包并使用`dpkg -i`安装。 2. 安装NVIDIA驱动。 3....
Docker入门与进阶Docker入门与进阶Docker入门与进阶Docker入门与进阶Docker入门与进阶aThe Docker WaThe Docker WaThe Docker WaThe Docker Wa
Docker 容器与容器云(第2版) PDF版本,带电子目录,结构清晰
Docker 容器入门与实践期末考试总复习 在本节总结中,我们将详细介绍 Docker 容器技术的基本概念、优点、架构、Namespace 和 Cgroup 等关键技术点,并总结 Docker 容器技术在实际应用中的价值。 容器技术解决了...
《Docker进阶与实战》pdf
文章目录一、docker 介绍二、docker 优点1、更快速的应用交付和部署2、更便捷的升级和扩缩容3、更简单的系统运维4、更高效的利用系统资源三、Docker 架构1、Docker Client (docker 客户端)2、Docker Host (docker 宿...
Docker容器与容器云第二版,高清pdf,docker容器与容器云解读,kubernetes结合
docker安装与启动: yum install -y epel-release yum install docker-io # 安装docker # 配置文件 /etc/sysconfig/docker chkconfig docker on # 加入开机启动 service docker start # 启动docker服务 # 基本信息...
Docker技术:Docker安装与配置教程+运维技术+超融合+虚拟技术+云计算; Docker技术:Docker安装与配置教程+运维技术+超融合+虚拟技术+云计算; Docker技术:Docker安装与配置教程+运维技术+超融合+虚拟技术+云计算;...
2. **解压与移动**:解压缩下载的二进制文件,将Docker和Docker Compose的可执行文件移动到系统的PATH路径下,以便于全局访问。 3. **设置环境变量**:对于某些系统,可能需要设置`DOCKER_OPTS`环境变量以指定Docker...