【docker】docker初试与填坑

docker是最近很流行的部署方式,最近尝试之前的项目都转移到docker上运行,下面是碰到的一些坑和解决方案。
  • 网络问题 因为国内的原因,docker pull 镜像的时候经常碰到连不上或者速度极慢的情况。 这部分可以使用 国内流行的  daocloud 的方案解决 ,使用dao pull代替docker pull ,如果是自行构建,可能需要使用代理或者直接在国外主机build,再打包传回来。
  • 时间同步 hub.docker.com上的镜像,包括自己构建的,基本上都是以utc时区作为默认时区,这样于host主机时间往往差8个小时。 最好的解决方案是  挂载volumn   /etc/localtime 到  docker环境中,如果是docker命令,docker -v /etc/localtime:/etc/locaitime:ro ... 如果是docker-compose.yml   添加volumes
    volumns:
       - /etc/localtime:/etc/localtime:ro
  • entrypoint 与 run 构建docker镜像时,最后一句往往要写上docker的"入口",使用entrypoint or run? 这两个最基本的区别就是 entrypoint 包含了命令本身,是应用化的docker镜像,如果 指定    docker-a 的entrypoint位 ls 则 docker run  entrypoint  -l  的结果就是ls -l 的结果,而如果指定  run 为ls,则  docker run  entrypoint  ls -l   则为ls -l的结果 所以单次执行不需要后台运行的项目,基本上建议指定为 entrypoint,否则建议run。 可以在 docker/docker-compose run  后面使用 --entrypoint覆盖dockerfile里的设置,不过如果想执行bash可能要使用 bash -c 代替。
  • 空间占用 如果pull了大量的image,可能会导致docker镜像占用了大量的磁盘空间,所以很多人往往希望找小而美的images,但是这往往没有必要: docker会复用相同的层(layer) ,所以pull或者build镜像的时候,最好找基于同一个base的镜像,特别是构建的时候,能复用的尽量复用。
  • docker 卡死 初期试用docker时,如果没有预估好资源使用量,可能会导致docker卡死,可能会导致系统其他服务响应都会变慢。 建议在多核机器上(>4),对docker使用CPU限制,建议使用cpuset 限制n-1个核心为docker使用,剩下一个响应其他操作,或者使用cpu-shares限制使用量(不超过90%)
  • 端口与IP docker默认使用nat作为网络使用方式,使用expose和publish bind暴露内部服务端口。 如果无需对外提供服务,尽量减少主机端口绑定,使用docker-compose时,对内服务无需是用ports指定端口,除非需要在另外一台机器上使用。 如果需要绑定静态ip或直接使用外网ip,可以使用iptables,或者 ip netns等方法,这里我也没做太多实践,下次补充。
  • 未完待补充..


文章来源:http://blog.xujif.com/archives/dockers.html
posted @ 2015-11-21 20:53  xujif  阅读(440)  评论(0编辑  收藏  举报