【转】一些 Docker 的技巧与秘诀

本文转载自:https://segmentfault.com/a/1190000000482229

原文 Some Docker Tips and TricksWouter 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 logsdocker 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
时间: 2024-10-12 09:17:15

【转】一些 Docker 的技巧与秘诀的相关文章

Docker误区+技巧+转换关系

Docker误区+技巧+转换关系 1. 误区:容器重启或者机器重启会丢失容器内的数据 根据https://docs.docker.com/faq/上的问答和本人的实践,在docker容器内创建文件和安装软件,做下面的操作都不会丢失数据和软件:A. exitsudo docker start b430d6f4ff00 B. sudo docker stop b430d6f4ff00sudo docker start b430d6f4ff00 C. reboot host https://docs.

Docker实用技巧之更改软件包源提升构建速度

一.开篇 地球,中国,成都市,某小区的阳台上,一青年负手而立,闭目沉思,阵阵的凉风吹得他衣衫呼呼的飘.忽然,他抬起头,刹那间,睁开了双眼,好似一到精光射向星空,只见这夜空......一颗星星都没有.他叹了下气,"今日夜观星象,看来是时候了."他走到电脑桌前,双手不断的做出各种手势,同时口中念着晦涩难懂的语言--嘛咪嘛咪哄,最后只见他将一只手放在了笔记本电脑上,同时大喊:"出来吧!我的皮卡丘.",只见贴在笔记本电脑上的一张泛黄的写着奇怪文字和图案的纸在燃烧,好像在进行

docker-8 docker小技巧

docker使用小技巧 杀死所有正在运行的容器 docker kill $(docker ps -a -q) 删除所有的已经停止的容器 docker rm $(docker ps -a -q) 删除所有镜像 docker rm $(docker images -q) 可以为这些命令创建别名 # vim ~/.bashrc# 杀死所有正在运行的容器. alias dockerkill='docker kill $(docker ps -a -q)' # 删除所有已经停止的容器. alias doc

Docker简单技巧

注意: Docker 是运行在1.9版本. docker run -it -v /Users:/Users ubuntu bash #注意: -v 是分享文件 到本地  -d是以守护进程的方式运行 docker exec -it <container_ID>  bash  #用于 正在运行的  docker  运行 bash 环境 docker ps -a   查看正在运行的 docker docker commit <IMAGE ID> <image name> 保存

Docker使用技巧及常用命令

安装docker 检查curl包是否安装? which curl 如果curl没有安装的话,则先更新apt源,并安装curl,如下: apt-get updateapt-get install curlapt-get updatewget -qO- https://get.docker.com/ | sh 设置当前用户为docker用户组,便于解决每次执行docker命令时都需要输入密码. # 添加一个新的docker用户组groupadd docker# 添加当前用户到docker用户组里,注

docker常用技巧

1:运行中容器如何保存为一个镜像? docker commit 容器名字 镜像名字 2:怎么给容器增加名字 docker rename 容器id(或名字)name(新名字) 3:docker中的Dockfile常见的命令有哪些 1,FROM 2, COPY 3,RUN 4,COMMAND 5,LABEL 4: Dockerfile中的命令COPY和ADD命令有什么区别? COPY的作用比ADD少,COPY是只负责复制文件和文件内容,不包括压缩包和url,而add则还会把压缩包解压,以及分析url

Docker实用技巧(一):镜像的备份/保存/加载/删除

首先需要理解,这里的镜像是指image,而container是容器,是image的一个启动. 镜像备份: 备份使用commit命令,相当于是将正在运行的container保存为一个image 使用方法如下: 实例: 最后跟的那个backup就相当于之后image的repository,当然这里也可以 backup:test,此时test就是tag. 运行image命令,查看已经有此image: 镜像保存: save命令用于保存image,如果想把备份好的image发送给别人,就需要保存,dock

Docker实用技巧(二):容器与主机之间复制文件

使用 docker cp 命令,进行容器与主机之间的数据copy. 使用方法如下: 命令中的两个文件夹,是相当于把前面的复制到后面的. 实例: 主机root ~目录如下: 容器root ~目录如下: 其中容器已经打开: [1]主机当前目录下的users文件夹拷贝到容器 主机如下命令: 容器中的变化: [2]容器test文件夹拷贝到主机当前目录文件夹 总结: cp命令的前面的文件夹是要复制的内容,后面的是即将复制的位置: -a参数是全部复制,包括uid gid等信息: 容器目录格式:contain

大数据系统工具集

Bootstrapping引导:Kickstart.Cobbler.rpmbuild/xen.kvm.lxc.Openstack. Cloudstack.Opennebula.Eucalyplus.RHEV配置类工具:Capistrano.Chef.puppet.func.salstack.Ansible.rundeck监控类工具:Cacti.Nagios(Icinga).Zabbix.基于时间监控前端Grafana.Mtop 日志系统:Logstash.Scribe绘图工具:RRDtool.G