10个日常Docker使用技巧(3)

$ mkdir /Users/jos/temp/samplevolume/ $ ls /Users/jos/temp/samplevolume/ $ docker run -v /Users/jos/temp/samplevolume/:/samplevolume -it --rm busybox $ docker run -v /Users/jos/temp/samplevolume/:/samplevolume -it --rm busybox / # ls samplevolume/ / # touch samplevolume/hello / # ls samplevolume/ hello / # exit $ ls /Users/jos/temp/samplevolume/ hello $ mkdir /Users/jos/temp/samplevolume/ $ ls /Users/jos/temp/samplevolume/ $ dockerrun -v /Users/jos/temp/samplevolume/:/samplevolume  -it --rmbusybox $ dockerrun -v /Users/jos/temp/samplevolume/:/samplevolume  -it --rmbusybox / # ls samplevolume/ / # touch samplevolume/hello / # ls samplevolume/ hello / # exit $ ls /Users/jos/temp/samplevolume/ hello

你可以看到我们指定的目录安装在容器内,而且我们把所有的文件都在主机上,并在容器内可见。我们也可以使用inspect查看,看看有什么安装在哪里。

$ docker inspect 76465cee5d49 | jq '.[].Mounts' [ { "Source": "/Users/jos/temp/samplevolume", "Destination": "/samplevolume", "Mode": "", "RW": true } ] $ dockerinspect 76465cee5d49 | jq '.[].Mounts' [   {     "Source": "/Users/jos/temp/samplevolume",     "Destination": "/samplevolume",     "Mode": "",     "RW": true   } ]

我们可以在Docker官网看到更多的特性和使用方 法: https://docs.docker.com/engine/userguide/dockervolumes/

7.添加DNS解析到你的容器

我之前提到过,我们可以通过consul来管理容器。Consul是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,可以为容器提供服务发现和健康检查。对于服务发现Consul提供无论是REST API或传统DNS,他的伟大的之处是,当你运行一个具体的镜像,你可以指定你的容器DNS服务器。

当你有Consul运行(或者其它 DNS server)你可以把它添加到您的Docker daemon就像这样:

docker run -d --dns $IP_CONSUL --dns-search service.consul <rest of confguration> dockerrun -d --dns $IP_CONSUL --dns-searchservice.consul <restofconfguration>

现在,我们可以解决与Consul的名字注册的所有容器的IP地址,比如在我们的环境我们有了一个cassandra 集群。每个cassandra将自己注册名称为“cassandra”我们的Consul 集群。最酷的是,我们现在只是解决卡cassandra的地址基于主机名(而不必使用Docker链接)

$ docker exec -ti 00c22e9e7c4e bash daemon@00c22e9e7c4e:/opt/docker$ ping cassandra PING cassandra.service.consul (192.168.99.100): 56 data bytes 64 bytes from 192.168.99.100: icmp_seq=0 ttl=64 time=0.053 ms 64 bytes from 192.168.99.100: icmp_seq=1 ttl=64 time=0.077 ms ^C--- cassandra.service.consul ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.053/0.065/0.077/0.000 ms daemon@00c22e9e7c4e:/opt/docker$ $ dockerexec -ti 00c22e9e7c4e bash daemon@00c22e9e7c4e:/opt/docker$ pingcassandra PINGcassandra.service.consul (192.168.99.100): 56 databytes 64 bytesfrom 192.168.99.100: icmp_seq=0 ttl=64 time=0.053 ms 64 bytesfrom 192.168.99.100: icmp_seq=1 ttl=64 time=0.077 ms ^C--- cassandra.service.consulpingstatistics --- 2 packetstransmitted, 2 packetsreceived, 0% packetloss round-tripmin/avg/max/stddev = 0.053/0.065/0.077/0.000 ms daemon@00c22e9e7c4e:/opt/docker$

8. Docker-UI是一个很棒来查看和获取洞察你容器的方式

使用Docker CLI来查看Docker容器所发生的一切并不难。很多时候,虽然你并不需要的Docker CLI的全部功能,但只是想快速浏览其中的容器运行,看看发生了什么。Docker UI ( https://github.com/crosbymichael/dockerui )就是一个这样伟大的项目,并且他是开源的。

10个日常Docker使用技巧

有了这个工具,你可以看到一个特定的Docker deamon的容器和镜像的最重要的东西。

9. Container 不能启动? Overwrite the Entry Point你只需要从bash启动。

有时候一个容器只是没有做你想要它做的事情,你已经重新创建了Docker 镜像,你在启动时运行了几次,但不知何故,该应用程序没有反应,然后日志显示也没什么有用的信息。最简单的调试方法是overwrite the entry point ,看看在容器内部发生的一切,查看文件权限是否正确。拷贝进入镜像的文件是否正确,或者任何其它可能出现的错误。幸运的是,Docker有这样做的一个简单的解决方案。你可以从一个选择的入口点启动你的容器:

$ docker run -ti --entrypoint=bash cassandra root@896757f0bfd4:/# ls bin dev etc lib mediaopt root sbin sys usr boot docker-entrypoint.sh home lib64 mntproc run srv tmp var root@896757f0bfd4:/# $ dockerrun -ti --entrypoint=bashcassandra root@896757f0bfd4:/# ls bin  dev    etc  libmediaopt  root  sbin  sys  usr boot  docker-entrypoint.sh  home  lib64  mntproc  run  srv  tmp  var root@896757f0bfd4:/#

10. 监听一个容器的事件:

当你编写自己的脚本,或者只是想了解发生了什么,你可以Docker event command运行你的镜像,为此编写脚本很容易。

10个日常Docker使用技巧

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/3dbf4a38cb82970ef86085d2690bdb6a.html